PHP用复选框删除多行

时间:2014-03-04 00:23:38

标签: php

我有一个包含删除按钮的表单。我希望用户能够一次选择他们想要删除的所有项目。 我设法显示回声,但项目仍保留在页面上。你能指出为什么会这样吗?任何帮助表示赞赏!

删除按钮:

  <input name="del_btn" type="submit" value="Delete">

支票:

   if (isset($_POST['del_btn']) && $_POST['del_btn']){
        for($i = 0; $i < count($_POST['checkbox']); $i++){
            if (isset($_POST['checkbox'])) {
                mysql_query("DELETE FROM `posts` WHERE `id` = '" . $_POST['checkbox'][$i] . "' LIMIT 1");   
                echo 'deleted';
            }
        }
 }

项目'复选框:

<input name="checkbox[]" type="checkbox" id="<?php echo $id; ?>" />

4 个答案:

答案 0 :(得分:2)

这实际上取决于控制器中变量的定义方式,以及它们在视图文件中的显示方式。

如果您想要隐藏/清除表单中的值,您可以:

  1. 重新加载页面:在if (isset($_POST['del_btn']) && $_POST['del_btn']){语句末尾创建一个重定向,将用户重新发送回新页面。
  2. 使用jQuery隐藏选中复选框的div。
  3. 在帖子之后重新定义控制器中的变量为NULL。
  4. 在视图中为您的值添加三元运算符,例如<input name="form_input" type="text" value=<?=isset($_POST['del_btn'] ? NULL : $form_input?>>,这意味着在提交del_btn时表单将显示为NULL。

答案 1 :(得分:0)

当您使用复选框时,您的元素变为数组而不是您可以使用多种方法:

使用ajax(使用jQuery的示例)来避免提交:

<script>
$(document).ready(function() {
   $('[name="del_btn"]').click(function() {
      $.post('/my/action.php', $('form').serialize(), function(r) {
         if (r.success) {
             alert('deleted....');
         } else {
             alert('error');
         }
      },'json');
      return false; // prevent submit
   });
});
</script>

您可以使用以下方法简化代码:

<?php
if (isset($_POST['checkbox']) && count($_POST['checkbox'])){
    $c = implode(',', array_map('intval', $_POST['checkbox'])); // sanitize data
    $r = mysql_query("DELETE FROM `posts` WHERE `id` IN(" . $c .")");
    echo json_encode(array('success' => $r));
}

答案 2 :(得分:0)

<input name="checkbox[]" type="checkbox" id="<?php echo $id; ?>" />

我认为你必须加上像

这样的东西
<input name="checkbox[]" type="checkbox" value="<?php echo $id; ?>" />

注意“值”而不是“id”。您将ID放在id属性中。如果要获取值,则指定特定目标。 (您可以使用Javascript或JQuery来执行此操作)。

在您的情况下,使用标记“值”确保您的复选框具有正确的ID值。回显查询而不是“已删除”一词。

$queryDel =  "DELETE FROM posts WHERE id = " . $_POST['checkbox'][$i] . " LIMIT 1";
echo $queryDel;

如果您使用的是mysql_query(),请注意SQL注入。请改用mysqli。使用预准备语句来阻止它或者至少提供一些白名单或验证。

希望这会有所帮助。谢谢。

答案 3 :(得分:0)

 <input name="checkbox[]" type="checkbox" value ="<?php echo $id; ?>" id="<?php echo $id; ?>" />

试试这个它会起作用。并检查值print_r($ _ POST)您将能够看到所有发布值并能够获得正确的值。