Удаление элементов в базе данных на основе статуса флажка

#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);
}
}