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

标签 php mysql checkbox sql-delete administrator

我正在尝试使用复选框删除 MySQL 日期行。当我应用下面的脚本时,它没有执行我想要它执行的操作。没有执行操作..我明白了

undefined variable :第 108 行 C:\wamp\www\project\topics.php 中的复选框

我尝试回显正在发送执行的实际 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>

最佳答案

那么你需要将你的删除逻辑重写成这样

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_* 函数,因为弃用过程已经开始。

EDITif 条件中添加了遗漏的括号

编辑 我还建议在提交表单后将用户重定向到同一页面,这样可以防止在页面刷新时重复提交表单。请参阅更新的代码。当然,删除逻辑应该放在你做出任何选择之前

关于php - 如何使用复选框删除数据库结果行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12396096/

相关文章:

php - 在 php 中开源文件托管/共享

php - Codeigniter 分页类 - 如何从 URL 中删除尾部斜杠

php - 重新排列数据库表项目顺序的最佳方法?

java - Android - 我如何知道哪个复选框被选中?

javascript - 简化复选框链接的 jquery/javascript

php - 设置 PHP web 项目,基础设施

javascript - Sucuri 404javascript.js 安全问题或内部服务器错误

html - SQL 获取表中的内容

mysql - 有没有一个工具可以显示 mysql 引擎接收到的所有 sql 命令的实时日志?

javascript - 选中复选框时如何显示和隐藏 id