Неопределенные ошибки индекса при доступе к $ _POST - PullRequest
2 голосов
/ 28 ноября 2011

Я продолжаю пытаться исправить это, но это выдает мне те же ошибки:

Примечание: неопределенный индекс: элементы в C: \ xampp \ htdocs \ shop.php в строке 9

Примечание: неопределенный индекс: тело в C: \ xampp \ htdocs \ shop.php в строке 24

Вот мой код:

<form action="" method="post">
    <input type="radio" name="items" value="fed" /> Fed<br />
    <input type="radio" name="items" value="body" /> Body<Br>
    <input type="submit" name="submit"><br>
</form> 

<?php
if(isset($_POST['submit'])) {
     $items = $_POST['items'];
     if($items=="fed") {
         echo "You choose feds";    
         die();
     }
     else
         echo "<Form action='' method='POST'>
         <select name='body'>
         <option value='head'>Head</option>
         </select>
         <input type='submit' name='submit' value='submit' /><br />
         </form>";

 if(isset($_POST['submit'])) {
    $body = $_POST['body'];
    $connect = mysql_connect("localhost","root","")or die(mysql_error());
    mysql_select_db("feds",$connect)or die(mysql_error());

    $merchandise = mysql_query("SELECT * FROM merchandise WHERE body_part='$body' ")or     die(mysql_error());

    while($row = mysql_fetch_array($merchandise)) {
        echo $row['item'];  
        echo "<bR>";
    }
}


} 
?>

Ответы [ 7 ]

3 голосов
/ 28 ноября 2011

В сообщениях об ошибках говорится, что вы обращаетесь к элементу массива, который не существует!

Но в целом вам следует проверить наличие этих переменных (даже если вы уверены, что форма была отправлена):

$items = isset($_POST['items']) ? $_POST['items'] : outputError('...');

И, пожалуйста, исправьте дыру в безопасности SQL-инъекций !!

$body = mysql_real_escape_string( $_POST['body'] );

Пожалуйста, рассмотрите возможность обновления до MySQLi или PDO ! Есть много хороших ресурсов по этим темам.

2 голосов
/ 29 ноября 2011

Это не ошибки , это уведомления . Но они должны быть исправлены в производственной среде, поскольку это дает вам подсказку, что в некоторых случаях ваш код может работать некорректно.

Решение

В зависимости от того, чего именно вы хотите достичь, вы можете использовать следующий код:

$items = array_key_exists('items', $_POST) ? $_POST['items'] : '';

и вы уверены, что ваша переменная $items содержит что-то (хотя бы пустую строку). Конечно, в зависимости от вашей архитектуры кода, вы можете заменить пустую строку на false или null, но это ваше дело.

Совет по использованию isset() или empty()

Не используйте их для проверки наличия определенного элемента в массиве - используйте array_key_exists(). В чем разница?

Предположим, $my_array выглядит так:

$my_array = array(
    'a' => 'abc',
    'b' => 0,
    'c' => '',
    'd' => null,
);

, то:

  • empty() в $my_array['b'], $my_array['c'] и $my_array['d'] вернет true, так как все эти значения считаются пустыми, а в $my_array['e'] также вернет true как несуществующее значение / переменная также считается пустой,
  • isset() для всех элементов вернет true за исключением $my_array['d'], потому что isset() обрабатывает переменные, равные null, как не заданные. isset($my_array['e']) также возвратит `false (поскольку переменная не установлена),
  • array_key_exists() вернет true для каждого ключа, который на самом деле существует в массиве, и вернет false, если его нет,

Таким образом, как упоминалось выше, лучший способ проверить, определен ли какой-либо элемент в массиве, - это использовать array_key_exists(), так как он не пропускает "пустые" или null значения.

Приложение

Есть ссылки на документацию:

  • isset() - определяет, установлена ​​ли переменная и не является ли NULL,
  • empty() - определяет, является ли переменная пустой (пустая строка, 0 как целое число, 0.0 как число с плавающей запятой, '0' - ноль как строка, null, false или пустой массив array()),
  • array_key_exists() - фактически проверяет, существует ли данный массив или индекс в массиве,
0 голосов
/ 19 декабря 2012

Эй, просто используйте метод как "POST" вместо "post". Надеюсь, что это решит вашу проблему так же, как моя.

Счастливое кодирование

0 голосов
/ 29 ноября 2011

Попробуйте изменить код, отображающий вашу форму, следующим образом: -

echo "<Form action='' method='POST'>
     <select name='body' id='body'>
     <option value='head'>Head</option>
     </select>
     <input type='submit' id='submit' name='submit' value='submit' /><br />
     </form>";

Обратите внимание, что я добавил идентификаторы к элементам формы, лучше всего использовать атрибуты id и name с одинаковым значениемдля форм.

0 голосов
/ 28 ноября 2011

Вы должны сделать скрытый ввод для каждой формы, вместо того, чтобы пытаться прослушать кнопку отправки. не все версии php регистрируют кнопку отправки в качестве значения. Кроме того, вы написали «if (isset ($ _ POST ['submit']))» дважды, что заставит php вернуть оба выражения if.

0 голосов
/ 28 ноября 2011

Я не могу понять логику того, что вы пытаетесь сделать.Можете ли вы объяснить немного больше?Также ваше первое if условие закрыто неправильно.Ваша структура выглядит следующим образом:

if(user submits) //true
{
if(){ do something}
else{ do something}

if(user submits) //true
{
//you call body variable, which is not defined the first time user submits the page, thus the error
}

}//original if ends

Итак, проверьте скобки.

0 голосов
/ 28 ноября 2011

Неопределенный индекс означает, что вы пытаетесь получить доступ к ключу массива, который не существует. Ваша форма, вероятно, не публикуется, как вы ожидаете. Простое:

print_r($_POST);

покажет вам, что публикует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...