I';我试图用php代码删除用复选框选中的行


I'm trying to delete the rows selected with checkboxes with php code

我正试图用php代码删除用复选框选中的行。html部分

<form action="maincontrol.php" name="control" method="post">
<?php
require('dbconnect.php');
$result = mysql_query("SELECT * FROM soru");
echo "<table border='1' id='tumveriler'>
<tr>
<th></th>
<th>Index</th>
<th>Soru</th>
<th>Sorma Tarih</th>
<th>Cevap</th>
<th>Cevaplama Tarih</th>
</tr>";
while($row = mysql_fetch_array($result))
  {
  echo "<tr>";
  echo "<td>" . "<input name='checkbox' type='checkbox' value='" . $row['index'] . "'" . " />";
  echo "<td>" . $row['index'] . "</td>";
  echo "<td>" . $row['soru'] . "</td>";
  echo "<td>" . $row['sormadate'] . "</td>";
  echo "<td>" . $row['cevap'] . "</td>";
  echo "<td>" . $row['cevapdate'] . "</td>";
  echo "</tr>";
  }
echo "</table>";
mysql_close($con);
?>
<input type= "submit" name ="update" value="Update">
</form>

php部分

<?php
  require('dbconnect.php');
  if (isset($_POST['control']) && !empty($_POST['checkbox'])) {
    foreach($_POST['checkbox'] as $id) 
    {
        $query = "DELETE FROM soru WHERE `index` = '$id'";
        $link = mysql_query($query);
    if(!$link)
        {
        die('not worked: ' . mysql_error());
        }
        else
        {
        mysql_close($con);  
        echo 'worked';
        }

    }
  }
?>

当我点击更新按钮时,我看到一个美丽的白色屏幕。什么都没发生,没有错误对话框。。。帮助

两件事:

  • 您的代码正在检查表单中是否存在$_POST['control'](至少在您发布的部分中(
  • 如果您希望将复选框数据作为数组提交,则需要对表单使用数组表示法:

    <input type="checkbox" name="checkbox[]" ...etc

否则,将只提交最后一个被选中的元素。

如果您想确保表单已过帐,而不是使用isset($_POST['control'])(未发送(,

使用

isset($_POST['update']),因为提交按钮已发送。

正如其他人所提到的,一旦你的复选框值是一个数组:

<input type="checkbox" name="checkbox[]" ...

您还可以使用WHERE IN子句简化数据库查询,通过一个查询删除所有记录:

//  Input filtering - retrieve only int values from $_POST['checkbox']
$array = array_filter($_POST['checkbox'],'is_int');
//  Format array for SQL WHERE IN clause
$array = implode(',',$array);
$query = "DELETE FROM `soru` WHERE `index` IN ($array)";

根据上面的评论,这是解决方案:

您的表单不包含名为"control"的输入,但是处理删除的PHP具有isset($_POST['control'])if语句很可能失败。此外,复选框的输入应该包括方括号,以告诉PHP它是一个数组:<input name="checkbox[]" ... />

在表单中,将回显复选框的行更改为echo "<td>" . "<input name='checkbox[]' type='checkbox' value='" . $row['index'] . "'" . " />";,如果表单不包括名为"control"的字段,则从脚本中删除的if语句中删除isset($_POST['control'])