我正在尝试使用带有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';
}
}
}
?>
当我点击更新按钮时,我看到一个漂亮的白色屏幕。没有任何反应,没有错误对话框......帮助!
答案 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
在删除的脚本中。