【问题标题】:Deleting records selected by Checkbox [duplicate]删除复选框选中的记录[重复]
【发布时间】:2011-04-22 10:01:46
【问题描述】:

可能重复:
Delete values selected using checkbox

我想删除已使用复选框选中的记录

复选框代码

<input name="checkbox[]" type="checkbox" value="<?=$row[s_id]?>" id="checkbox[]">

打开删除按钮

if($_POST['delete'])
{
$cnt=array();
//$cnt=array_count_values($_POST[checkbox]);
$cnt=count($_POST['checkbox']);
for($i=0; $i < $cnt; $i++)
{
        $del_id=$checkbox[$i];
        //$sql = "DELETE FROM t_s_list WHERE `s_id`='".mysql_real_escape_string($del_id)."'";
        $sql = "DELETE * FROM t_s_list WHERE `s_id`= '$del_id'";
        $result = mysql_query($sql);
        mysql_error();
        $NEW="Selected records Deleted";
}
$NEW="Selected records not Deleted";
}

【问题讨论】:

    标签: php


    【解决方案1】:

    决定添加我自己的答案,基本上是基于@Sanjay Mohnani 的答案。

    if($_POST['delete']) {
        //store the array of checkbox values
        $allCheckBoxId = $_POST['checkbox'];
        //escaping all of them for a MySQL query using array_map
        array_map ('mysql_real_escape_string', $allCheckBoxId);
        //implode will concatenate array values into a string divided by commas
        $ids = implode(",", $allCheckBoxId);
        //building query
        $sql = "DELETE FROM t_s_list WHERE `s_id` IN ($ids)";
        //running query
        mysql_query($sql);
    
        $NEW="Selected records Deleted";
    
    }
    

    请记住,当您在 MySQL 查询中使用来自外部世界的任何值($_POST、$_GET、$_COOKIE 等)时,请事先将其转义。这些值很容易被恶意用户操纵。这种类型的攻击称为 SQL 注入。您可以使用mysql_real_escape_string() 转义值。

    如果要转义数组中的所有值,可以使用array_map(),它将函数应用于数组的所有元素。

    当你输出来自外部世界的东西时,你也应该小心。例如,你永远不应该做echo $_GET['something'];,正确地转义它以输出(类似于echo htmlspecialchars($_GET['something']))。

    永远不要相信来自外部的任何东西。

    还有一件事:在 HTML 文档中,一个 ID 只能用于一个元素。在您的代码中,所有复选框的 ID 均为 checkbox[],这不是一个好习惯。

    请执行以下操作:

    <input name="checkbox[]" type="checkbox" value="<?=$row[s_id]?>" id="checkbox_<?=$row[s_id]?>">
    

    这可确保您的元素具有不同的 ID 或根本不使用 ID。当您发布表单时,只会发布 NAME,ID 仅用于客户端(例如可以与 CSS 或 Javascript 一起使用)。

    【讨论】:

    • @bazmegakapa:谢谢。我是这个内爆函数的新手。
    • @bazmegakapa:向您致敬,先生......非常感谢。请帮我在另一个文件中编写相同的函数。也就是说,当按下删除按钮时,我想导航到其他页面(我将在其中编写此函数)。还是在那一页写的。
    • @Aditii 如果您希望将表单发布到另一个页面,请执行&lt;form action="anotherpage.php" method="post"&gt;
    • @bazmegakapa。还有一个问题。我正在使用 2 个文件,一个是 manage_records.php(用于列出所有记录),另一个是 action.php(用于采取行动)。我想把行动写在行动上。一种用于删除选定的记录,另一种用于发布选定的记录。在管理记录中使用表单方法作为“发布”我已成功触发删除选定记录的查询。但我想同时实现发布按钮,以便用户导航到操作页面并相应地更新查询。这次我也必须传递一个检查值数组。
    • @Aditii 请为此打开一个单独的问题,cmets 不适合解释:)。
    【解决方案2】:

    尝试:-

    if($_POST['delete'])  
    {  
    if(count($_POST['checkbox']) > 0) {  
       foreach($_POST['checkbox'] as $checkbox)  
       {  
            $del_id=$checkbox;  
            $sql = "DELETE * FROM t_s_list WHERE `s_id`= '$del_id'";  
            $result = mysql_query($sql);  
            mysql_error();  
    
       }  
       echo "Selected Rows deleted";  
    } else {  
         $NEW="Nothing to Delete";  
    }
    
    }
    

    【讨论】:

    • 使用此代码,我收到消息为“已删除选定代码”,但实际上记录并未删除。这意味着 foreach 循环正在跳过。
    • 如果您选择了 10 个复选框,您并不想运行 10 个查询。在foreach 中构建1 查询,然后运行它。
    • @Aditii,您是否有任何名为 delete 的表单元素。您可以尝试在 foreach 循环中放置一个回声并查看它是否跳过,还可以放置一个 print_r($_POST['checkbox']) 。为了得到更好的主意,在循环之前
    • 哦,这段代码也容易受到 SQL 注入攻击。
    【解决方案3】:

    试试这个代码,

    if($_POST['delete'])
    {
        $allCheckBoxId = $_POST['checkbox'];
        $ids = implode(",", $allCheckBoxId);
        $sql = "DELETE from t_s_list WHERE `s_id` IN (".$ids.")";
        mysql_query($sql) or die(mysql_error());
        $NEW="Selected records Deleted";
    
    }
    

    【讨论】:

    • 谢谢先生,你能解释一下这段代码吗,因为我对此比较陌生。
    • 请在所有 POST 值上应用 mysql_real_escape_string。您的代码将导致安全漏洞(SQL 注入)。 @Aditii:在 Sanjay 修复之前,请不要在 Internet 上使用此代码。
    • -1 语法错误,删除查询 * 无法使用
    • @bazmegakapa:请指定代码。 @Sanjay 和@bazmegakapa:我想在另一个文件中编写这个删除函数,你能解释一下需要发送 wat 值吗?如何修改代码。
    • @Aditii 您只需include 'anotherfile.php';。请阅读PHP Manual about include()。如果您还有其他问题,请打开一个新问题。
    猜你喜欢
    • 2012-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多