我正在尝试删除使用php代码复选框选择的行

时间:2011-07-05 22:59:12

标签: php mysql sql database sql-delete

我正在尝试使用带有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';
        }


    }
  }

?>

当我点击更新按钮时,我看到一个漂亮的白色屏幕。没有任何反应,没有错误对话框......帮助!

4 个答案:

答案 0 :(得分:2)

两件事:

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

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

否则只会检查已检查的最后一个元素。

答案 1 :(得分:1)

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

使用

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

答案 2 :(得分:1)

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

<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)";

答案 3 :(得分:0)

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

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

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