• 締切済み

PHPのチェックボックスでforeachの警告出る

UbuntuにXPMPPを入れてPHPの勉強してます。複数選択可能なチェックボックスの値を取得しようとしているのですが送信して受信側のページを開くと「Warning: Invalid argument supplied for foreach()」が出ます。正しく複数選択のチェックボックスの値を送受信する方法を教えてください。なお、入力ミスかと思い、http://www.7key.jp/hp/php/memo5.htmlのコピペをしてみましたが警告が出続けます。以下にそのページのソースを示します。 送信側のページのソースは次のようになっています。 <?php echo '<?xml version="1.0" encoding="UTF-8"?> '; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>送信</title> </head> <body> <form action="response.php" method="post"> <input type="checkbox" name="sample" value="1" checked="checked"> <input type="checkbox" name="sample" value="2"> <input type="checkbox" name="sample" value="3"> <input type="submit" value="sending" /> </form> </body> </html> 受信側のソースは次のようになっています。 <?php echo '<?xml version="1.0" encoding="UTF-8"?> '; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>受信</title> </head> <body> <?php foreach($_POST['sample'] as $key => $val){ echo "$key : $val \n"; } ?> </body> </html>

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

#1さんの回答にもありますがsample[]というnameをつければ解決します。 (そうしたくないなら別名をつけてください) データがない場合も以下のようにすれば姑息ですが簡単な解決します <?php foreach((array) $_REQUEST['sample'] as $key => $val){ echo "$key : $val \n"; } ?> もちろんデータを検証する作業はやって置く方が精度はたかくなります。

  • neko-ten
  • ベストアンサー率55% (1287/2335)
回答No.1

POSTされてきた内容を確認すれば一目瞭然ですが、$_POST["sample"]は配列ではありません。 同じname属性を付けている場合、後にPOSTした内容で上書きされます。 たとえば、value:1とvalue:3にチェックを入れていた場合、 $_POST["sample"] = 1; $_POST["sample"] = 3; という感じの処理をしているってことです。 これだと見てのとおり、最終的には「$_POST["sample"] = 3」ということになり、配列ではないのでforeachは動きません。 じゃ、どうするか。 <input type="checkbox" name="sample[]" value="1" checked="checked"> <input type="checkbox" name="sample[]" value="2"> <input type="checkbox" name="sample[]" value="3"> とすると、$_POST["sample"]を配列で取得することができます。 もちろん、なにもチェックされていないとエラーが出ますので、$_POST["sample"]の存在を確認する必要はあります。