Я пытаюсь обновить данные, используя флажки. Но когда один или несколько флажков не отмечены, возвращается уведомление:
Примечание. Неопределенный индекс: stats2 в E: \ wamp \ www \ HOSPITAL \ update.php в строке 12
Примечание. Неопределенный индекс: stats3 в E: \ wamp \ www \ HOSPITAL \ update.php в строке 12
Примечание. Неопределенный индекс: stats5 в E: \ wamp \ www \ HOSPITAL \ update.php в строке 12
<?php $con = mysql_connect("localhost","root",""); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("Hospital", $con); mysql_query("UPDATE t2 SET HOSPNUM ='$_POST[hnum]', ROOMNUM='$_POST[rnum]', ADDATE= '$_POST[ad8]', ADTIME='$_POST[adtym]', LASTNAME='$_POST[lname]', FIRSTNAME='$_POST[fname]', MIDNAME='$_POST[mname]', CSTAT='$_POST[cs]', AGE='$_POST[age]', BDAY='$_POST[bday]', ADDRESS='$_POST[ad]', SEX='$_POST[sex]', STAT='$_POST[stats1]', STAT2='$_POST[stats2]', STAT3='$_POST[stats3]', STAT4='$_POST[stats4]', STAT5='$_POST[stats5]', STAT6='$_POST[stats6]', STAT7='$_POST[stats8]', STAT8='$_POST[stats8]', NURSE='$_POST[nurse]' WHERE TELNUM ='$_POST[telnum]'"); mysql_close($con) ?>
Не могли бы вы мне помочь, чтобы уведомление не появилось?
Это определенное поведение для флажков – только если они включены в данные формы.
Вы должны использовать isset (), чтобы определить, отмечен ли флажок.
измените его на
STAT='".isset($_POST['stats1']).", STAT2='".isset($_POST['stats2']).", STAT3='".isset($_POST['stats3']).", STAT4='".isset($_POST['stats4']).", STAT5='".isset($_POST['stats5']).", STAT6='".isset($_POST['stats6']).", STAT7='".isset($_POST['stats8']).", STAT8='".isset($_POST['stats8'])."
Другим обходным решением, которое работает, является добавление скрытой переменной с тем же именем перед флажком: например
<form action='t1.php' method='post'> <input type='hidden' name="cb1" value="0"> <input type='checkbox' name="cb1" title='test'> <input type='submit' > </form> <?php print_r($_POST); ?>
Массив $_POST
не содержит индекс stats2
. Это связано с тем, что если флажок не установлен, он не будет включен в почтовый запрос.
Если элементы формы статичны, вы можете просто проверить, установлены ли они: Заменить STAT6='$_POST[stats6]'
с помощью STAT6=(array_key_exists('stats6', $_POST))
.
Если элементы формы генерируются динамически, например:
foreach($students as $student) { echo "<input element='checkbox' name='student-is-present-{$value}'>"; }
затем включите скрытый элемент в форму, чтобы вы могли определить, что проверено и что не проверено:
foreach($students as $student) { echo "<input element='hidden' name='student-{$value}' value='student-is-present-{$value}'>"; echo "<input element='checkbox' name='student-is-present-{$value}'>"; }
Вы должны указывать ключи массива. Например, используйте $_POST['stats5']
вместо $_POST[stats5]
. Ваш SQL также открыт для SQL-инъекций . Чтобы этого избежать, вы должны избегать данных с помощью функции mysql_real_escape_string()
.
Когда у вас есть флажок в форме, его значение отправляется только на сервер, если поле отмечено. Если он не отмечен галочкой, этот ключ не будет существовать в массиве $ _POST, следовательно, ошибки, которые вы видите.
Вы также должны дезинформировать ввод с помощью mysql_real_escape_string, чтобы предотвратить инъекцию mysql.
вам не следует использовать переменные POST и GET непосредственно в вашем массиве. вы должны очистить их, найти инъекцию mysql, чтобы узнать больше:
$hnum = isset($_POST['hnum']) ? mysql_real_escape_string($_POST['hnum']) : '';
а затем использовать эти переменные. Таким образом, вы избегаете инъекции mysql и разрешаете эти уведомления