2011-12-20 32 views
0

フォーム上でチェックボックスを使用しようとしていて、値を1または0として私のDBに保存します。私のDBでチェックボックス、mysql、およびPHPの問題

、私は次の属性で「購読」と呼ばれるフィールドがあります。私のHTMLフォーム内

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

を、私は次のようにあります

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

フォームがある場合デフォルトでチェックされた状態で送信されると、レコードはデータベースに渡されます。

誰かがチェックボックスをオフにすると、レコードは保存されません。

これは何が起こっているのですか?あなたはPHPを助けるために参照する必要がありますか?

ありがとう、 ネイサン

+0

のためには、はい、私たちは、PHPを確認する必要があります。 –

+0

Typo? 'TINYING(4)'はおそらく次のようにするべきです: 'TINYINT(4)' –

+0

はい、それは単にタイプミスです。申し訳ありません。 – Nathan

答えて

0

Webブラウザがチェックイマイチチェックボックスのためのキーと値のペアを送ってはいけません。 これを確認するには、print_r($_POST);を実行してください。

投稿された購読済みの値を除くすべての購読を解除するか、非表示の入力フィールドを使用してフォームに入力したチェックボックスの値を保存してください。

0

私はTINYINT(4)ではなくBOOLEAN(TINYINT(1))型を使うべきだと思います。フォームから直接クエリに値を渡さないでください。 if()で値をチェックし、独自の変数にクエリのブール値を与えます。このような何か:

$subscribe = 0; 

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

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

および有効なXHTMLの使用checked="checked"の代わりchecked

+0

興味深い。さて、これは良い解決策のように思えます。有効なXHTMLのヒントもありがとう。しかし、なぜ私はそれをやっていると、レコードが現在保存されていないのか分かりますか?私は0のDBにデフォルト値を持っていても問題ありません。私はレコードが一切保存されていないことに驚いています。 – Nathan

+0

デフォルト値は、この値が指定されていない場合にのみ使用されます。しかし、あなたのクエリでは値 ""、空の文字列を持っています。 – Corubba

+0

これはチェックされていないので空の文字列ですか?しかし、空の文字列ではなく、DBによってレコードが拒否されるのはなぜですか? – Nathan

関連する問題