2016-12-29 24 views
0

所以我有一個動態生成的表腓更新數據庫

<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個小時的錯誤檢查,使用Google搜索,我無法弄清楚。 Thanks guys guys

+0

不要使用'empty()'作爲複選框,使用'isset()'。 –

+0

@ Fred-ii-就像我說的,!isset()仍然不起作用。 isset()用於設置複選框以進行檢查。但!isset()不會將複選框設置爲未選中狀態。 – Sharkn8do

+0

未經檢查的複選框不會發布。所以,你需要找到一種不同的方式來知道哪些複選框沒有被檢查,並相應地進行更新。 – BizzyBob

回答

0

它非常簡單:只需將所有條目更新爲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在外部查詢:

//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); 
    } 
} 
+0

務必添加一個'WHERE'子句,以不影響與當前事務不相關的行。 – BizzyBob

+0

謝謝!我做了一個編輯,以防止任何人想要複製和粘貼,因爲$ sql vanilla的第一個用法是while循環的開始,在提交時會導致fetch_assoc()錯誤。除此之外,它非常完美,非常感謝 – Sharkn8do