簡體   English   中英

PHP更新數據庫(如果未選中此復選框)

[英]Php update database if checkbox is not checked

所以我有一個動態生成的表

<tr>
    <td><?php echo $row['RequestID']?></td>
    <td><?php echo $row['FirstName'] . " " . $row['LastName']?></td>
    <td><?php echo $row['DateRequested']?></td>
    <td><?php echo $row['DateNeeded']?></td>
    <td><?php echo $row['TotalPrice']?></td>
    <td><?php echo $row['Company']?></td>
    <td><?php echo $row['Account']?></td>
    <td><?php echo $row['Brand']?></td>
    <td><?php echo $quantity?></td>
    <td><input type="checkbox" name="bill[]" value=<?php echo '"' . $row['RequestID'] . '"'; if($row['BillBack'] == "1") {echo "checked='checked'"; } ?></td>
</tr>

當行被選中或未選中時,我想更新數據庫。

if(isset($_POST['submit'])){//to run PHP script on submit
    if(!empty($_POST['bill'])){
    // Loop to store and display values of individual checked checkbox.
    foreach($_POST['bill'] as $selected){
    echo "hello";
    $sql2 = "UPDATE Requests SET BillBack = '1' WHERE RequestID = '$selected'";
    $result2 = $conn->query($sql2);

    }} elseif(empty($_POST['bill'])){
    // Loop to store and display values of individual checked checkbox.
    foreach($_POST['bill'] as $selected){
    echo "hello";
    $sql2 = "UPDATE Requests SET BillBack = '0' WHERE RequestID = '$selected'";
    $result2 = $conn->query($sql2);
    }}

         }

現在。 if語句就像一個魅力。 對於提交中每個選中的復選框,該記錄都會更新。 該問題與取消選中復選框有關。 如您所見,通過查找不為空的內容可以找到復選框。 但是,當我刪除該感嘆號時,它並沒有有效地做到相反。 它也不起作用,因為它本身擁有if語句,直接的else語句並檢查!isset。 這是因為認為輸入經過檢查嗎? 有語法錯誤嗎? 我已經完成了大約5個小時的錯誤檢查,谷歌搜索,但我無法弄清楚。 多謝你們

非常簡單:只需將所有條目更新為0,然后在選中的條目上設置1。

//to run PHP script on submit
if(isset($_POST['submit'])){    
    // Setting everyone to 0
    $sql2 = "UPDATE Requests SET BillBack = '0'";
    $result2 = $conn->query($sql2);

    // Setting only those checked to 1
    if(!empty($_POST['bill'])){
        // Loop to store and display values of individual checked checkbox.
        foreach($_POST['bill'] as $selected){
            echo "hello";
            $sql3 = "UPDATE Requests SET BillBack = '1' WHERE RequestID = '$selected'";
            $result3 = $conn->query($sql3);
        }
    }
}

編輯:

請注意,在foreach中進行查詢可能會導致服務器過載,為避免這種情況,您可以存儲要更新的條目的ID,並且只能在foreach之外的一個查詢中使用它:

//to run PHP script on submit
if(isset($_POST['submit'])){
    // Setting everyone to 0
    $sql2 = "UPDATE Requests SET BillBack = '0'"; // Maybe add a WHERE clause, like BizzyBob pointed out
    $result2 = $conn->query($sql2);

    // Setting only those checked to 1
    if(!empty($_POST['bill'])){

        // Initialize an array of selected ids
        $selected_ids = array(); 

        // Loop to store individual checked checkboxes on array        
        foreach($_POST['bill'] as $selected){
            $selected_ids[] = $selected;
        }

        // Get the ids separated by comma
        $in_clause = implode(", ", $selected_ids);

        // Do only one sql query
        $sql3 = "UPDATE Requests SET BillBack = '1' WHERE RequestID in (".$in_clause.")";
        $result3 = $conn->query($sql3);
    }
}

暫無
暫無

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

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