Неопределенные ошибки индекса при доступе к $ _POST

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

Примечание. Неопределенный индекс: элементы в 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>"; } } } ?> 

Related of "Неопределенные ошибки индекса при доступе к $ _POST"

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

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

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

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

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

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

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

Решение

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

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

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

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

Не используйте их для проверки array_key_exists() определенного элемента в массиве – используйте 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'] также будут return 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 как float, '0' – ноль в виде строки, null , false или пустой массив array() ),
  • array_key_exists() – проверяет, действительно ли данный ключ или индекс существует в массиве,

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

Я не могу понять логику того, что вы пытаетесь сделать. Можете ли вы объяснить немного больше? Также ваше первое условие, 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 

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

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

 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, установленные для одного и того же значения для форм.

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

 print_r($_POST); 

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

Эй, просто используйте метод как «POST» вместо «post» .hope, чтобы он разрешил вашу проблему так же, как и мой.

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