2011-12-20 105 views
0

我想在表單上使用複選框,並希望將值保存爲1或0在我的數據庫中。麻煩與複選框,MySQL和PHP

在我的數據庫,我有一個名爲「訂閱」字段具有以下屬性:

TINYING(4) 
Not Null 
Default value = '0' 

在我的HTML表單,我有以下幾點:

<input type="checkbox" value="1" name="subscribe" checked>Subscribe to our newsletter<br /> 

如果表單以默認的檢查狀態提交,記錄傳遞給數據庫就好了。

如果有人取消選中該複選框,則不保存記錄。

任何想法爲什麼會發生這種情況?你需要看到的PHP來幫助?

謝謝 彌敦道

+0

是的,我們需要看到的PHP。 – 2011-12-20 22:45:57

+0

錯字? 'TINYING(4)'可能應該是:'TINYINT(4)' – 2011-12-20 22:48:27

+0

是的,這只是一個錯字。對於那個很抱歉。 – Nathan 2011-12-20 23:15:47

回答

0

Web瀏覽器不發送的鍵值對爲心不是檢查的複選框。 做一個print_r($_POST);觀察這個

要麼取消訂閱除訂閱的訂閱值之外的所有內容,要麼使用隱藏的輸入字段來存儲您放入表單的複選框值。

0

我認爲你應該使用BOOLEAN(TINYINT(1))類型,而不是TINYINT(4)。並且不要將表單中的值直接傳遞給查詢。使用if()檢查值併爲每個自變量賦予查詢布爾值。事情是這樣的:

$subscribe = 0; 

if(isset($_POST['subscribe']) && $_POST['subscribe'] == "1") 
    $subscribe = 1; 

mysql_query("... VALUES ('".$subscribed."' ..."); 

併爲有效的XHTML使用checked="checked"代替checked

+0

有趣。好的,這聽起來像是一個很好的解決方案。也感謝有效的XHTML提示。但是你知道爲什麼這個記錄目前沒有被保存下來嗎?我雖然在數據庫中有一個默認值應該沒問題。我很驚訝沒有記錄存儲。 – Nathan 2011-12-20 23:21:49

+0

默認值僅在未給出此值時使用。但是在你的查詢中它有值「」,空字符串。 – Corubba 2011-12-20 23:25:56

+0

所以未檢查是一個空字符串?但爲什麼記錄被數據庫拒絕,而不是用空字符串存儲? – Nathan 2011-12-20 23:30:27