#php #mysql #html
#php #mysql #HTML
Вопрос:
Я пытаюсь получить входные данные из HTML-формы, где есть флажки. Флажки создаются с помощью идентификаторов student_ids из базы данных. Вот так:
<td><input type="checkbox" name="{$row['STUDENT_ID']}" />
Что я хочу сделать, это пройти через таблицу Students и проверить все записи, против которых установлены флажки. Затем я хочу удалить записи из базы данных, которые были отмечены флажками.
8 $query = "SELECT STUDENT_ID From Students";
9 $result = mysql_query($query) or die(mysql_error());
10 while($row=mysql_fetch_array($result)){
11 $checkname=$row['STUDENT_ID'];
12 foreach($_POST[$checkname] as $student_id =>val)
13 {
14 if($val == 'YES'
15 {
16 echo $_POST['STUDENT_ID'];
17 $query = "DELETE FROM Students WHERE STUDENT_ID" . mysql_real_escape_string($STUDENT_ID);
18 }
19 echo $query;
20 $result = mysql_query($query) or die(mysql_error());
21 //echo $POST['STUDENT_ID'];
22 }
23 }
Ответ №1:
Создайте массив флажков :
<input type="checkbox" name="studentID[]" value="{$row['STUDENT_ID']}" />
Из PHP :
$studentID = $_POST['studentID'];
foreach($studentID as $ID){
echo $ID.'<br />'."n";
}
Редактировать :
Не уверен, но я думаю, что это правильный путь :
$studentID = $_POST['studentID'];
$i=0;
foreach($studentID as $ID){
$i ;
echo $_POST['studentID'][$i].'<br />'."n";
}
Ответ №2:
Попробуйте это для вашей формы:
<input type="checkbox" name="STUDENT_ID[<?php echo $row['STUDENT_ID'] ?>]" value="YES" />
и это для вашего цикла PHP:
foreach ($_POST['STUDENT_ID'] as $student_id => $val) {
if ($val == 'YES') {
$query = "DELETE FROM Students WHERE STUDENT_ID=" . mysql_real_escape_string($student_id);
$result = mysql_query($query) or die(mysql_error());
}
}
Ответ №3:
Лучший способ сделать это — взять идентификаторы учащихся из ваших отправленных флажков, а затем выполнить для них удаление.
HTML
<input type="checkbox" name="students_to_delete[]" value="{$row['STUDENT_ID']}" />
PHP
$students_to_delete = $_POST['students_to_delete'];
if(is_array($students_to_delete) amp;amp; count($students_to_delete) > 0) {
$query = "DELETE FROM Students WHERE STUDENT_ID IN (" . implode(",", $students_to_delete) . ")";
$result = mysql_query($query) or die(mysql_error());
}
Ответ №4:
Приведенный выше код уязвим для внедрения SQL. Если кто-то отправит обратно на сервер значение 0 OR STUDENT_ID!=0
, все строки в таблице Students будут удалены.
Ваш код также неэффективен — вы возвращаете всех учеников, а затем перебираете каждого ученика, чтобы увидеть, требует ли это удаления.
Вам было бы лучше использовать в своей разметке:
<input type="checkbox" name="STUDENT_TO_DELETE" value="$row['STUDENT_ID']" />
а затем в php:
foreach ($_POST['STUDENT_TO_DELETE'] as $student_id => $val) {
$sql = "DELETE FROM Students WHERE STUDENT_ID=" . mysql_real_escape_string($student_id);
mysql_query($sql);
}
}