1

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

3 回答 3

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在条件中添加了遗漏的括号

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

于 2012-09-12T21:11:31.623 回答
2

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

你应该有类似的东西

$array = $_POST[checkbox];

然后你可以做

foreach($array as $delID){

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

}

num 值的验证在一切之前完成

于 2012-09-12T21:03:00.863 回答
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变量应该可以工作,但是该指令长期以来一直默认为关闭,除了由于安全相关问题,它在 PHP 5.3.0 中已被弃用并在 PHP 5.4.0 中被删除。

于 2012-09-12T21:09:03.373 回答