2013-01-10 68 views
0

這似乎應該是一個容易的,但我已經搜索,似乎無法弄清楚。我使用PHP來更新MySQL數據庫,它將幾個字段設置爲布爾型開關。該網站上的觸發器是一個複選框。當用戶選中該框時,該值設置爲1,未選中時該值爲零。問題是,當我發送表單時,數據庫在設置複選框時會更新,但它不會將該字段的值更新爲零,而只是忽略它。當沒有設置驗證變量確實設置爲零時,我已經回顯了該值。當我嘗試清除文本框併發送任何內容時,我發現類似的問題。 MySQL只是忽略它,並不會清除該字段。我錯過了什麼嗎?你如何在MySQL中存儲零點

這裏是我使用的代碼示例:

<?php 
if ($_POST) { 
    if (isset($_POST['box1'])) { 
     $box1 = $_POST['box1']; 
    } 
    else { 
     $box1 = 0; 
    } 
    $query = "UPDATE table SET box1 = '{$box1}'"; 
    $result = mysqli_query($dbc, $query); 
} 
    ?> 

<form method="post" action=""> 
    <input type="checkbox" name="box1"> Box 1 
</form> 
+2

什麼是'回聲$查詢的結果;'? – Kermit

+7

你確定你沒有錯過'WHERE'嗎? – Kermit

+1

你的複選框的'value'屬性在哪裏? –

回答

0

<input type="checkbox" name="box1">

應該

<input type="checkbox" name="box1" value="1">

在你的數據庫box1的數據類型應該是INT所以即使它沒有設置爲0它仍然會保存d與0,因爲您根本不能在INT作爲數據類型的字段中不存儲任何內容。

+0

這不回答這個問題。 OP聲明他的複選框的值爲1.他的邏輯爲空盒子聲明'0'。 – Kermit

+0

我提供了一個有效的答案。 OP說:當用戶選中該框時,該值設置爲1,未選中時該值爲零 – SeanWM

+0

您是否錯過上面OP的評論? '對不起,我忘了在原始複選框代碼中包含值=「1」 – Kermit

0

此刻,如果數組內沒有值傳遞,則不會發生任何操作。

考慮以下...

... 
$box1=0; 

if ($_POST) { 
    if (isset($_POST['box1'])) { 
     $box1 = $_POST['box1']; 
    } 
} 
    $query = "UPDATE boxtest SET box1 = $box1"; 
    $result = mysqli_query($dbc,$query); 
    ?> 

<form method="post" action=""/> 
    <input type="checkbox" name="box1" value="1"/> Box 1 
    <input type="submit"/> 
</form> 

或(按我以前的評論)

<input type="hidden" name="box1" value="0" /> 
<input type="checkbox" name="box1" value="1"/>