2011-01-11 14 views
0

私はチェックボックスのセクションとラジオボタンのセクションを含むフォームを持っています。私は両方で同様の問題を抱えています。問題は、PHPのチェックボックスやラジオボタンから値を取得する

チェックボックスのセクションのためのHTMLは次のようになります。私は、フォームを送信すると

<input type="checkbox" name="activity[]" value="run" id="run" /><label for="run">Run</label> 
<input type="checkbox" name="activity[]" value="swim" id="swim" /><label for="swim">Swim</label> 
<input type="checkbox" name="activity[]" value="bike" id="bike" /><label for="bike">Bike</label> 

、活動の配列が正しく定義されていないようです。 PHPは

$activity = $_POST['activity']; 
var_dump($activity); 

を実行する際に最初の2つのチェックボックスを想定

Iは、フォームを処理し、チェックされることは印刷:

array(2) [0]=> string(0) "" [1]=> string(0) "" 

は明らかに、3つのボックスの二つがあることを検知していますそれは値を通過していません。 HTMLがすべてのチェックボックスのchecked属性で始まる場合、チェックボックスの値を正しく送信します。

同様に、ラジオボタンでは、デフォルト値以外の値を取得できません。ユーザーがデフォルト値から値を変更した場合、パラメーターは存在しますが、値は空の文字列です。

フォームが読み込まれたときにボックスがチェックされているかどうかにかかわらず、配列にはチェックされた各ボックスに対して定義された値が含まれているはずです。私は間違って何をしていますか?

+1

フォームのHTMLを表示できますか? – lonesomeday

+0

はい、申し訳ありませんが、ただ修正しました。 –

+0

Firebug/HTTPFoxのようなものを使って、ブラウザの送信内容を確認しましたか?フォームをmanglingするクライアント側のjavascriptや、同じサーバー側をやっているライブラリ/プラグインがあるかもしれません。 –

答えて

1

私は「水泳」と「自転車」をクリックして、私の出力はので、おそらく他の何かが間違っているこの

array(2) { [0]=> string(4) "swim" [1]=> string(4) "bike" } 

のように見えたこの簡単なテスト

<?php 

if (isset($_POST['activity'])) 
{ 
    $activity = $_POST['activity']; 
    var_dump($activity); 
} 

?> 

<form method="post"> 
    <input type="checkbox" name="activity[]" value="run" id="run" /><label for="run">Run</label> 
    <input type="checkbox" name="activity[]" value="swim" id="swim" /><label for="swim">Swim</label> 
    <input type="checkbox" name="activity[]" value="bike" id="bike" /><label for="bike">Bike</label> 
    <input type="submit" value="go" /> 
</form> 

であなたの行動を複製することはできませんあなたの質問には含まれていません。私は私が私のために期待どおりに動作しますが予想出力

Content-Type: application/x-www-form-urlencoded 
Content-Length: 39 

activity%5B%5D=swim&activity%5B%5D=bike 
0

を参照してくださいFirebugので要求を検査するとき

はしても、ちょうどそのようコピー&ペースト。

<form action="test.php" method="post"> 
<input type="checkbox" name="activity[]" value="run" id="run" /><label for="run">Run</label> 
<input type="checkbox" name="activity[]" value="swim" id="swim" /><label for="swim">Swim</label> 
<input type="checkbox" name="activity[]" value="bike" id="bike" /><label for="bike">Bike</label> 
<input type="submit"> 
</form> 
<?php 
$activity = $_POST['activity']; 
var_dump($activity); 
?> 

私は(私はこのスニペットで行ったように)あなたがこの問題を特定していないと、それはどこかにあると思われる:
それは本当にあなたがそうのように、このビットを分離する場合は、あなたのために動作しません。そうかもしれない?

+0

あなたのクイックフィードバックをありがとう。それは正しい方向に私を導いた。私はそれを分離しようとしていなかったし、私はそれを分離しようとしたときに値を間違っていたいくつかのjavascriptを持っていたことを見つけ出すために、 –

+0

私はピーターほど速くはなかった、私は恐れている^^ – Ruben

0

悲しいことに、問題は私が思ったものとは関係がありませんでした! PeterとRubinの提案のおかげで、サーバーに送信される前にフォームを検証するために書いたJavaScriptのいくつかが、チェックボックスとラジオボタンの値を間違って空白にしてしまったことが判明しましたフォーカス。入力フィールドを確認する簡単なテストは、起こってから停止したテキストエリアでした!

関連する問題