Ошибка обновления данных MySQL через PHP

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

Примечание. Неопределенный индекс: 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 и разрешаете эти уведомления