我正在尝试使用Checkboxes删除MySQL日期行。当我应用下面的脚本时,它不能完成我想要它做的事情。行动没有执行..我得到了
Undefined variable: checkbox in C:\wamp\www\project\topics.php on line 108
我尝试回显出要执行的实际sql并给出了这个
DELETE FROM forum_topics WHERE topic_id = intval()
PHP
<?php
$topics = mysql_query(" SELECT topic_id , topic_head ,
topic_tags , topic_owner , topic_date
FROM forum_topics ") or die (mysql_error());?>
<form method='post' action='topics.php'>
<div class='admin'><table>
<tr>
<td >DELETE</td>
<td >ID</td>
<td>Title</td>
<td>Tags</td>
<td>Owner</td>
<td>Date</td>
</tr>
<?php
while($row=mysql_fetch_array($topics)){ ?>
<tr align=center>
<td align="center" bgcolor="black">
<input name="checkbox[]" type="checkbox" value="<?php echo $row['topic_id'];?>">
</td>
<td><?php echo intval($row['ID']); ?></td>
<td><?php echo htmlspecialchars($row['topic_head']); ?></td>
<td><?php echo htmlspecialchars($row['topic_tags']); ?></td>
<td>><?php echo htmlspecialchars($row['topic_owner']); ?></td>
<td>
<?php
$date = date_create($row['topic_date']) ;
echo date_format($date, 'F j, Y, g:i A');
?>
</td>
<?php echo"
</tr>";
}?>
<td ><input name="delete" type="submit" value="DELETE"></td>
<?php
// Check if delete button active, start this
if (isset($_POST['delete'])) {
for($i=0;$i<$count;$i++){
$del_id = $checkbox[$i];
$sql = "DELETE FROM forum_topics WHERE topic_id = intval($del_id)";
mysql_query($sql);
}
}
?>
</table>
</form>
</div>
答案 0 :(得分:3)
您需要将删除逻辑重写为此类
if (isset($_POST['delete']) && isset($_POST['checkbox'])) {
foreach($_POST['checkbox'] as $del_id){
$del_id = (int)$del_id;
$sql = "DELETE FROM forum_topics WHERE topic_id = $del_id";
mysql_query($sql);
}
header('Location: topics.php');
}
同时考虑不要使用mysql_*
函数,因为弃用过程已经开始。
编辑在if
条件
修改强> 此外,我建议在表单提交后将用户重定向到同一页面,这样可以防止在页面刷新时重复提交表单。查看更新的代码。当然,删除逻辑应该在你做出任何选择之前放置
答案 1 :(得分:2)
你从哪里得到数组的值?
你应该有像
这样的东西$array = $_POST[checkbox];
然后你可以做到
foreach($array as $delID){
$sql = "DELETE FROM forum_topics WHERE topic_id = $delID";
mysql_query($sql);
}
num值的验证在所有内容之前执行
答案 2 :(得分:1)
尝试替换这些行:
for($i=0;$i<$count;$i++){
$del_id = $checkbox[$i];
这个
$count=count($_POST['checkbox']);
for($i=0;$i<$count;$i++){
$del_id = $_POST['checkbox'][$i];
如果启用了php指令register_globals,那么你的$checkbox
变量应该可以工作,但是该指令已经很长时间默认为off,除了它已经从PHP 5.3.0和REMOVED中删除了由于安全相关问题,从PHP 5.4.0开始。