みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

[初歩?]FOREACHの構文エラーの原因がわからない

下記を表示すると
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>

投稿日時 - 2006-09-22 11:39:40

QNo.2423561

暇なときに回答ください

質問者が選んだベストアンサー

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

まず原因は$_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;
?>

投稿日時 - 2006-09-22 13:46:17

お礼

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

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

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

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

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

投稿日時 - 2006-09-22 15:56:59

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問