Я продолжаю пытаться исправить это, но он дает мне те же ошибки:
Примечание. Неопределенный индекс: элементы в C: \ xampp \ htdocs \ shop.php в строке 9
- Преобразование строки в тип mySql DECIMAL
- С помощью regex заменить систему шаблонов smarty?
- Динамическое пользовательское меню WordPress не показывает правильные результаты
- получение validate.js для работы
- Изменение значений в <select> с помощью другого <select> с использованием AJAX (PHP)
Примечание. Неопределенный индекс: тело в 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>"; } } } ?>
В сообщениях об ошибках говорится, что вы обращаетесь к элементу массива, который не существует!
Но в целом вы должны проверить наличие этих переменных (даже если вы уверены, что форма была отправлена):
$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, чтобы он разрешил вашу проблему так же, как и мой.
Счастливое кодирование