MySQL / PHP - 用于从数据库中删除多行的复选框数组

时间:2017-03-26 15:42:41

标签: php jquery mysql arrays checkbox

我在将表单复选框数组作为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>

PHP用于处理usunogrod.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。

2 个答案:

答案 0 :(得分:3)

您可以在$_POST['removegarden']中获取数据。最后不需要[]

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

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.';
    }

答案 1 :(得分:3)

我认为这应该可以帮到你:

更改此行:

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)");