[英]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.