簡體   English   中英

從數據庫中刪除多行,具體取決於使用php選中了哪些復選框

[英]delete multiple rows from database depending on which checkboxes are checked using php

我需要編寫代碼以使用戶退訂他們所訂閱的各種警報。我想到了通過在用戶登錄后維護會話並檢查其用戶ID來實現的功能。 我寫了以下代碼:

<?php
session_start();
$con = mysql_connect("localhost", "root", "hgd");
echo "<html><body>";

if (!$con)
    {
    die("could not connect" . mysql . error());
    }

mysql_select_db("Project", $con);

if (isset($_SESSION['userid']) || isset($_SESSION['username']))
    {
    echo "Unsubscribe for alerts on:" . "<br/>";
    $userid = $_SESSION['userid'];
    $query = "select * from BOOK_ALERTS where Userid='$userid'";
    $result = mysql_query($query, $con);
    echo "<form method='post' action=''>";
    while ($row = mysql_fetch_array($result))
        {
        $isbn = $row[1];
        $datapoint = $row[2];
        $type = $row[4];
        $value = $row[3];
        $time = $row[7];
        $str = "A book with ISBN:" . $isbn . " whose " . $datapoint . "'s " . $type . " " . $value;
        echo "<br/><input type='checkbox' name='checkbox[]' value='" . $str . "'/>$str<br />";
        }

    echo "<input type='submit' name='submit' value='UNSUBSCRIBE'>";
    echo "</form>";
    if (isset($_POST['submit']))
        {
        if (isset($_POST['checkbox']))
            {
            $delquery = "delete  from BOOK_ALERTS where Isbn='$isbn' AND Datapoint='$datapoint' AND     Alert_type='$type' AND Datapoint_value='$value'";
            $delresult = mysql_query($delquery, $con);
            if (!$delresult)
                {
                echo "Deleting record failed: (" . $con->errno . ") " . $con->error;
                }
              else
                {
                echo "Unsubscribed the alert for " . $str;
                }
            }
        }
      else
        {
        echo "<br />";
        echo "already logged in";
        header("Location:./abc.php");
        }

    echo "</body></html>";
?>

上面的代碼無論選中哪個復選框都只會刪除最后一行,因為刪除查詢會刪除上次更新時采用變量值的那一行。 我不知道有什么其他方式可以編寫此代碼。有人可以幫忙嗎?

考慮將復選框的值部分用作ID而不是用戶可讀的字符串(或者如果不可用,則可能是ISBN)。 不會向用戶顯示值,但是在處理輸入時,所有選中的復選框(具有相同的名稱標簽)的值將最終顯示在數組中,例如:

如果row[0]是您的ID:

echo "<br/><input type='checkbox' name='checkbox[]' value='" . $row[0] . "'/>$str<br />";

同樣,現在您不評估用戶已檢查的內容,而是使用您顯示的最后一個$value刪除。

if (isset($_POST['checkbox']) && is_array($_POST['checkbox']))
foreach ( $_POST['checkbox'] as $checked_id )
{
    // $delquery = "select * from BOOK_ALERTS where Isbn='$isbn' AND Datapoint='$datapoint' AND     Alert_type='$type' AND Datapoint_value='$value'";
    $delquery = "DELETE FROM BOOK_ALERTS WHERE id=".mysql_real_escape_string($checked_id);
    $delresult = mysql_query($delquery, $con);
    if (!$delresult)
    {
        echo "Deleting record failed: (" . $con->errno . ") " . $con->error;
    }
    else
    {
        echo "Unsubscribed the alert with id " . intval($checked_id); // Also this is not really nice showing a number to your user, you might wanna modify it later, but I really don't wanna throw too much at you at once
    }
}

這會遍歷每個選中的復選框(在此之前檢查它實際上是一個數組)。

您以前也沒有使用DELETE語句,而是使用SELECT ,它僅檢索數據而不會將其刪除。

如您所見,這取決於每個記錄的唯一ID,我只能在您的情況下建議這樣做。

此外,在將數據插入數據庫之前(如我在此處所做的操作),您需要先轉義數據,然后使用google進行sql注入以獲取更多信息。

編輯:此代碼確實刪除了每個CHECKED記錄,如果您需要另一種方法,則必須將其切換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM