如何使用复选框删除数据库结果行

时间:2012-09-12 20:57:46

标签: php mysql checkbox sql-delete administrator

我正在尝试使用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>

3 个答案:

答案 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开始。