【问题标题】:MySQL/PHP - Checkbox array to delete multiple rows from databaseMySQL/PHP - 复选框数组从数据库中删除多行
【发布时间】:2026-01-22 05:40:01
【问题描述】:

我在将表单复选框数组传递为 mysql_query 以从表中删除多行时遇到一些问题。

结构如下:

HTML

<form action="usunogrod.php" method="POST" enctype="multipart/form-data">
    <?php
     $ogrodysql = "SELECT id_ogrodu, nazwa FROM ogrody";
     $result = mysqli_query($con, $ogrodysql);

     if (mysqli_num_rows($result) > 0) {

         while($row = mysqli_fetch_assoc($result)) {
              echo "• " . $row["id_ogrodu"]. " " . $row["nazwa"]. "<input type='checkbox' name='removegarden[]' value=" .$row["id_ogrodu"]." <br><br>";
         }
     } 
     else {
         echo "0 results";
     }
     ?>

    <br><br>
    <input type="submit" value="Usuń zaznaczony ogród."/>
</form>

用于处理 usunogrod.php 中的表单的 PHP

<?php

$db_host = 'xxxxx';
$db_user = 'xxxxx';
$db_pwd = 'xxxxx';
$con = mysqli_connect($db_host, $db_user, $db_pwd);  
$database = 'xxxxx';

if (!mysqli_connect($db_host, $db_user, $db_pwd))
    die("Brak połączenia z bazą danych.");

if (!mysqli_select_db($con, $database))
    die("Nie można wybrać bazy danych.");

function sql_safe($s)
{
    if (get_magic_quotes_gpc())
        $s = stripslashes($s);
    global $con;
    return mysqli_real_escape_string($con, $s);
}

if ($_SERVER['REQUEST_METHOD'] == 'POST') {   

    $ogrod_id = trim(sql_safe($_POST['removegarden[]']));

    if (isset($_POST['removegarden[]'])) {

                mysqli_query($con, "DELETE FROM ogrody WHERE id_ogrodu='$ogrod_id'");

                $msg = 'Ogród został usunięty.';
    }
    elseif (isset($_GET['removegarden[]']))
        $msg = 'Nie udało się usunąć ogrodu.';
};
?>

MySQL 表

ogrody

#      id_ogrodu      nazwa
       1              garden1

如何处理复选框表单中的数组,以便我能够传递查询以删除所有选中的元素?

编辑:

我已经能够让它工作到它只删除一个选中的位置,或者其他时候只是得到一个错误,说我无法将数组传递给 mysqli_query。

【问题讨论】:

    标签: php jquery mysql arrays checkbox


    【解决方案1】:

    我认为这应该对您有所帮助:

    改变这一行:

    echo "• " . $row["id_ogrodu"]. " " . $row["nazwa"]. "<input type='checkbox' name='removegarden[]' value=" .$row["id_ogrodu"]." <br><br>";
    

    对于这个:

    echo '• ' . $row["id_ogrodu"]. ' ' . $row["nazwa"]. '<input type="checkbox" name="removegarden['.$row["id_ogrodu"].']" value="'.$row["id_ogrodu"].'" /> <br/><br/>';
    

    然后这个:

    if (isset($_POST['removegarden[]'])) {
    

    if (isset($_POST['removegarden'])) {
    

    最后是您的查询:

    $gardens = implode(',',$_POST['removegarden']);
    mysqli_query($con, "DELETE FROM ogrody WHERE id_ogrodu IN($gardens)");
    

    【讨论】:

    • 工作完美,与 B. Desai 建议的方法相同 - 你只是晚了一分钟! :) 感谢您详细解释,除此之外我无法更改 html/php 标记中的值,因为它需要用于进一步处理,您的回答非常有价值,谢谢!!!
    • 对不起,我忘记更改了。它当然应该是您在查询之前连接的 id .. 编辑了第二个 sn-p 粘贴。
    • 我将最佳答案更改为您的答案,因为它提供了对这个问题的更详细的思考方式,因此对于 any1 来说可能更有用一点。祝你有美好的一天,再次感谢!
    【解决方案2】:

    您可以在$_POST['removegarden'] 中获取您的数据。终于不用[]了。

    然后将此数组转换为','分隔的字符串,然后可以在查询中使用

    if (isset($_POST['removegarden'])) {
    $ids_to_delete = implode(",",$_POST['removegarden']);
                    mysqli_query($con, "DELETE FROM ogrody WHERE id_ogrodu IN ($ids_to_delete)");
    
                    $msg = 'Ogród został usunięty.';
        }
    

    【讨论】:

    • 工作完美,即使我不得不删除 sql_safe 函数,它的工作原理就像一个魅力,谢谢!