【问题标题】:How to delete rows of database results using checkbox如何使用复选框删除数据库结果行
【发布时间】:2012-09-05 22:34:57
【问题描述】:

我正在尝试使用复选框删除 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>

【问题讨论】:

  • 你在哪里指定$checkbox
  • 是的 $checkbox 突然出现
  • @ibu 我在 &lt;input name="checkbox[]" type="checkbox" value="&lt;?php echo $row['topic_id'];?&gt;"&gt; 中有复选框
  • 您可以通过在类似问题上调整我的示例来开发自己的解决方案:stackoverflow.com/questions/11123782/…

标签: php mysql checkbox sql-delete administrator


【解决方案1】:

你从哪里得到数组的值??

你应该有类似的东西

$array = $_POST[checkbox];

那么你就可以为

foreach($array as $delID){

          $sql = "DELETE FROM forum_topics WHERE topic_id = $delID"; 
                  mysql_query($sql);

}

num 值的验证在所有事情之前进行

【讨论】:

  • 观看:我将复选框的值更改为'1) OR 1',您的所有表格数据都将被删除,SQL injection
  • 是的,这就是我告诉他的原因......一切都在验证之前。
【解决方案2】:

尝试替换这些行:

 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 变量应该可以工作,但是该指令长期以来一直默认为关闭,除了它在 PHP 5.3.0 中已被弃用并在 PHP 5.4 中被删除.0 因为安全相关问题。

【讨论】:

  • 感谢您的回答,当我替换为您的代码时,我在该行得到了一个未定义的偏移量。
  • $count 定义在哪里?我没有在你的代码中看到它,它应该在 for($i=0;$i&lt;$count;$i++){ 行的正上方,就像 $count = count($_POST['checkbox']);
  • 我用$count 定义更新了我的答案,试试看。
【解决方案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条件中添加了遗漏的括号

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

【讨论】:

  • 感谢您的回答,它成功了。但我必须在它生效之前完成这个过程。
  • @DotOyes 我猜您在删除之前获得了所有主题。只需将DELETE 放在您的SELECT 之前即可
  • 感谢您的回答。我很完美。
猜你喜欢
  • 2014-05-27
  • 1970-01-01
  • 2012-02-10
  • 1970-01-01
  • 2014-07-18
  • 2017-11-26
  • 2012-06-17
  • 2018-03-09
  • 1970-01-01
相关资源
最近更新 更多