PHPで配列をPOSTデータで送った場合の取り出し方を教えてください。
知恵袋でも質問したのですか、使い方をよくわかっておらず、補足が追加出来なくって、回答者の方に返事が出来なくなってしまいました。申し訳ありません。
プログラム初心者です。始めたばかりで、自分で考えて知っている範囲で組もうとしているのですが、
例えば
<form method="POST" action="○○○">
<input type="checkbox" name="color[]" value="赤" />赤<br />
<input type="checkbox" name="color[]" value="青" />青<br />
<input type="checkbox" name="color[]" value="緑" />緑<br />
<input type="submit" value="送信" />
とこのように書いてすべてにチェックを付けて送った配列のデータはどのように取り出したら良いのでしょうか?
foreachで下記のように、
$x = $_POST['color'];
foreach( $x as $value ){
echo "色 = ". $value."<br />\n";
}
exit;
$_POST['color']の配列を取り出そうすると
Invalid argument supplied for foreach()
と表示されてしまいます。
var_dumpで配列を表示させると、
string(3) "Array"
と表示され確かに配列として届いていると思います。
確かにチェックはいれて送信もしています。
print "{$_POST['color']}"で表示してみると、"A"と"r"と"r"でした。
チェックボックスを10個に増やして、それぞれ$_POST['color'][0]~[9]まで
表示させてみたところ、はじめの5個はArrayも文字がいつつ表示され、残りは空白でした。
知恵袋のほうで、取り出し方が間違っているとの指摘をいただきましたが、どのように取り出したら良いのでしょうか。
どなたかお手数ですが、教えていただけないでしょうか。
よろしくお願いします。
No.4ベストアンサー
- 回答日時:
ご質問のコードは、合ってる気がします。
その記述のほかに、何か別のロジックかましてないですか?
例えばですが、magic_quotes_gpcの対策コードですとか、文字コードを一括で変換するコードですとかそういうものです。
$_POST['color']に含まれるべき配列を、変な変換処理を行っているために、文字列「Array」に変換されてしまっているようです。
PHPは、
<?php
$arr = array('a', 'b', 'c');
//上記の配列を
echo $arr;
//とすると、出力結果は、「Array」と文字列が表示されます。
?>
一度、ご質問のコード以外の場所を確認してみてください。
回答ありがとうございます!
おっしゃるとおりでした。
switch構文で動かしていたのですが、プログラムの冒頭にある下記の記述が邪魔をしていました。
授業で「xss対策として下記の記述は必ず入れてください。」と言われて、
データに影響を及ぼすとは考えず、気にしていませんでした。
(ということは別途xss対策をしないといけないということでしょうか。。。)
foreach ($_POST as $key => $value){
//前後の空白削除
$value = trim($value);
//XSS対策
$_POST[$key] = htmlspecialchars($value);
}
No.3
- 回答日時:
手元の環境ではすべて未チェック以外はエラーにはならず、
色 = 赤
色 = 青
色 = 緑
と表示されます。
> 1行目が$_POST['color'][0]~[2]を表示させたもの、
> A; r; r;
POSTされてるvalue値が"赤","青","緑"なのだから、$_POST['color'][0]~[2]で取り出される値はこのいずれかの値のはずですが、そうなっていないのは?
回答ありがとうございます!
純粋に質問の部分だけのプログラムを記述したら確かに動きました!
switch構文で動かしていたのですが、プログラムの冒頭にある下記の記述が邪魔をしていました。
foreach ($_POST as $key => $value){
//前後の空白削除
$value = trim($value);
//XSS対策
$_POST[$key] = htmlspecialchars($value);
}
No.2
- 回答日時:
>Invalid argument supplied for foreach()
対策は
foreach((array) $x as $value ) ・・・
とすること。これでデータを渡さなかった時のエラー回避ができます。
No.1
- 回答日時:
> Invalid argument supplied for foreach()
これが出るのってチェックボックスが3つとも非選択だった時じゃないでしょうか。
チェックボックスが未選択の場合は配列に要素が追加されません。選択されているチェックボックスの項目のみ前詰めで追加されるので、3つとも未選択の場合は配列の要素が無いので、これをforeach文で取り出そうとしてエラーになります。
どれか選択されている場合はきちんと取り出されます。(意図した順番かどうかはわかりませんが)
この回答への補足
回答ありがとうございます。
質問欄にも書きましたが、確かにチェックを入れています。
下にチェックを入れた場合と入れなかった場合の違いです。エラーの内容は一緒ですね。
1行目が$_POST['color'][0]~[2]を表示させたもの、
2行目がvar_dump($_POST['color'])で表示させてもの、
3行目がforeach( $_POST['color'] as $value ){echo "色 = ". $value."<br />\n";}で表示されるエラーです。
; ; ;
NULL
Warning: Invalid argument supplied for foreach()
A; r; r;
string(5) "Array"
Warning: Invalid argument supplied for foreach()
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS ただいま勉強始めたての初心者です。フォームを縦並べにしたいです。 2 2022/11/20 17:18
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP $_SESSIONについて教えて下さい。 2 2023/03/02 09:18
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- HTML・CSS 私の能力からして間違っていないような気がします。 4 2022/09/30 13:24
このQ&Aを見た人はこんなQ&Aも見ています
-
あなたの「必」の書き順を教えてください
ふだん、どういう書き順で「必」を書いていますか? みなさんの色んな書き順を知りたいです。 画像のA~Eを使って教えてください。
-
秘密基地、どこに作った?
小さい頃、1度は誰もが作ったであろう秘密基地。 大人の今だからこそ言える、あなたの秘密基地の場所を教えてください!
-
とっておきの手土産を教えて
お呼ばれの時や、ちょっとした頂き物のお礼にと何かと必要なのに 自分のセレクトだとついマンネリ化してしまう手土産。 ¥5,000以内で手土産を用意するとしたらあなたは何を用意しますか??
-
許せない心理テスト
私は「あなたの目の前にケーキがあります。ろうそくは何本刺さっていますか」と言われ「12本」と答えたら「ろうそくの数はあなたが好きな人の数です」と言われ浮気者扱いされたことをいまだに根に持っています。
-
【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
【お題】 ・このサンタクロースは偽物だと気付いた理由とは?
-
<input type=hidden" >で配列(複数の要素)を渡したいとき?"
PHP
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列をループでたくさん宣言し...
-
file_existsでファイル名の部分...
-
$_SESSIONに二次元配列を使える...
-
if文の判定に変数をつかって
-
【PHP】count( )の結果に納...
-
ネストが深い時のforeachはどう...
-
postgresql関数をつかったレコ...
-
禁止ワード設定
-
$_POSTを一括してサニタイズし...
-
C言語の配列をPush(追加)する...
-
Smartyで多次元配列をスマート...
-
行数が30万件ほどあるCSVから、...
-
uasort? のやり方を教えてく...
-
配列の要素(value)に、変数を...
-
stdClass Objectを連想配列のよ...
-
csvの内容を行単位で削除したい
-
pdfファイルの複数添付 引数の型
-
CSVデータの行数カウントをした...
-
CArrayの要素としてCStringArra...
-
foreachで上限回数指定方法また...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
配列をループでたくさん宣言し...
-
foreachのなかで次のキーを参照...
-
$_SESSIONに二次元配列を使える...
-
String だと「 ByRef引数の型が...
-
file_existsでファイル名の部分...
-
postgresql関数をつかったレコ...
-
$_POSTを一括してサニタイズし...
-
PHPのカッコ[ ]の使い方について
-
配列一致(要素順番は違うが内容...
-
漢字のソートについて
-
ネストが深い時のforeachはどう...
-
○番目から○番目までの取り出し...
-
チェックボックスが複数選択で...
-
テーブルの行と列の入れ替えは可?
-
PHP 配列の添字に変数は使えない?
-
CSVデータのn番目だけの値を取...
-
PHPで配列をPOSTデータで送った...
-
正規表現
-
配列操作
-
PHP 多次元配列変数のデータ受...
おすすめ情報