我正试图用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'])
。