チョコミントアイス

下記を表示すると
Warning: Invalid argument supplied for foreach() in
とエラーになってしまい、どうしても原因がわからないのですが・・
よろしくお願い致します

<html>
<body>
<form action="$PHP_SELF" method="post">
<input type="radio" name="q2[]" value="0"<?php foreach ($_POST['q2'] as $q2_sel) { if ( $q2_sel == '0') { echo " selected"; }} ?>>男
<input type="radio" name="q2[]" value="1"<?php foreach ($_POST['q2'] as $q2_sel) { if ( $q2_sel == '1') { echo " selected"; }} ?>>女
</form>
</body>
</html>

A 回答 (1件)

つっこみどころがおおいですね。



まず原因は$_POST['q2'] が配列じゃないからでしょうね。
単純な対策としてはforeachの前にif(is_array($_POST['q2']))を
つけるとよいでしょう。
× foreach($_POST['q2']) as $q2_sel){・・・}
○ if(is_array($_POST['q2'])) foreach($_POST['q2']) as $q2_sel){・・・}

ラジオボタンは排他選択なので配列で返さないほうがよいのでは?
×<input type="radio" name="q2[]" ・・・>
○<input type="radio" name="q2" ・・・>

またご記入のソースでは$PHP_SELFは参照できません
× $PHP_SELF
○ <?=$PHP_SELF?>
とか?もしくはヒアドキュメントなどにする。

それとラジオボタンの値渡しにはselectedではなくchecked

以上を踏まえて私ならこうします

<?PHP
if($_POST['q2']!="") $checked[$_POST['q2']]=" checked";

print <<<eof
<html>
<body>
<form action="$PHP_SELF" method="post">
<input type="radio" name="q2" value="0" {$checked[0]}>男
<input type="radio" name="q2" value="1" {$checked[1]}>女
<input type="submit" value="送信">
</form>
</body>
</html>
eof;
?>
    • good
    • 0
この回答へのお礼

yamabejpさん、いつもお世話になります。

実は、yamabejpさんにも教わった
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1972507
のラジオボタン版の質問でありました。
↑の時は、#2さん(yamabejpさん)の回答どおりに組み込みましたが、
今回は↑の#1さんの方法ではどうかとやってみた次第です。

おっしゃるように、チェックボックスと違って配列にする
必要はぜんぜんなかったですね・・・

いただいた形で活用させていただきます。

ありがとうございました。

お礼日時:2006/09/22 15:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!