• ベストアンサー

$_POSTを連想配列で取得したい!!

こんにちは。 HTMLの入力フォームからPHPでデータを取得したいのですが、項目(50項目位)が多い為に配列を使ってデータを取得したいと考えています。 どうやっていいのか迷っているのですが、おそらく連想配列を使えばいいのだとは思うのですが、取得の仕方がわかりません・・・すみませんが、ご教授頂けないでしょうか? 後、必須項目が何点かあるのですが、その必須項目で記入漏れがあるものを全てエラーで出したいと思います。 例えばA,B,C,Dの必須項目があり、Aにだけ記入されていたら【BCDは必須項目です】とBCだけ記入されていたら【ADは必須項目です】と画面に表示される。 これも配列を使えばどうにかなると思うのですが、ぜんぜんプログラムがわかりません・・・。 質問が2つになり申し訳ございませんが、ご教授をよろしくお願いします。

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

  • ベストアンサー
  • inu2
  • ベストアンサー率33% (1229/3720)
回答No.4

>この配列から例えば$key=Dだけを正規表現等で ////HTML内 <input type="text" name="A" value=""> <input type="text" name="B" value=""> <input type="text" name="C" value=""> <input type="text" name="D" value="123-4567"> … <input type="text" name="n" value=""> ////// foreach($_POST as $key => $val){  if(!$val) $error_message .= $key;  if($key == "D" and !preg_match("/^[0-9]{3}([-]{1}[0-9]{4})?$/",$val) )$error_message .= $key; } エラーメッセージの出方に難有りですがこんな感じでしょう (例として D は郵便番号としました

amountainblast
質問者

お礼

何度もご回答ありがとうございます。特定の要素だけを取り出すのは分かったのですが、他の処理がどうも上手いことできません・・・。今回はこの方法は諦めたいと思います。どうもありがとうございました。

その他の回答 (5)

  • sisya
  • ベストアンサー率39% (97/244)
回答No.6

ソースを良く見てくださいね。 foreach($_POST as $key => $val){ $key .":" .$val. "<br>" .}; 真中の行「$key .":" .$val. "<br>"」では どこに代入するのかが示されていませんし、 最後に「;」が無いので当然エラーが出ます。 この場合 「$message .= $key .":" .$val. "<br>";」 とすべきです。 また次の行の「.」も意味不明です。

  • sisya
  • ベストアンサー率39% (97/244)
回答No.5

テストしていないのですが 以下のように要素名に「[]」をつければ 配列で入ってくるはずです。 (ラジオボタンなどで普通に使われる手法です) <input type="text" name="item[]" value=""> <input type="text" name="item[]" value=""> <input type="text" name="item[]" value=""> <input type="text" name="item[]" value=""> もし上のようにname属性を変更できないのでしたら post(もしくはget)を自力で分解するスクリプトを書けば 同じ名前の項目が複数あっても取得できますよ。

amountainblast
質問者

お礼

ありがとうございます。 データをpostで取る事はできました。 このデータをメールで送信するのに メッセージの部分を$messegeと変数を設定し この変数に $message=" ?> 大阪舶来マートJCB申込<br /><br /> <?php foreach($_POST as $key => $val){ $key .":" .$val. "<br>" .}; "; ?> とスクリプトを記述しました。 これを print_r($message); とすると Parse error: parse error, unexpected T_STRING in /usr/local/asuka/virtual/B4Z001480/※※※※/soshin.php4 on line 8 というエラーを返します。 どうしてもこのエラーが出てしまうんです。 何故でしょうか?

  • inu2
  • ベストアンサー率33% (1229/3720)
回答No.3

////HTML <input type="text" name="A" value=""> <input type="text" name="B" value=""> <input type="text" name="C" value=""> <input type="text" name="D" value=""> … <input type="text" name="n" value=""> ////// foreach($_POST as $key => $val){  if(!$val) $error_message .= $key; } if($error_message)echo $error_message."は必須項目です"; こんな感じだと、HTML内の部分を直せば何百個項目あっても全てに対して未記入チェックできると思われます。

amountainblast
質問者

お礼

ありがとうございます。 まさしく期待していた答えでした・・・。 基本的なことですみませんが、 この配列から例えば$key=Dだけを正規表現等で チェックを掛けたい場合はどうしたらいいのでしょうか? ご教授をよろしくお願いします。

  • ron0826
  • ベストアンサー率21% (3/14)
回答No.2

確認はしてませんがこんなんでいけるかな? ////a.php/////// ///フォーム書き出し// <form action="b.php" method="post"> <?php for($i=1;$i<=50;$i++){ echo "<input type=\"text\" name=\"item".$i."\"><br>\n"; } ?> <input type="submit" name="Submit" value="送信"> ///b.php//// //空白チェック <?php if($_POST[Submit]){ for($i=0;$i<=50;$i++){ if($_POST["item".$i]==""){ $err .= "$i"."に空白があります。<br>"; } } } echo "$err"; ?>

amountainblast
質問者

お礼

ありがとうございます。 この方法ですとHTMLの要素名を連番にしないといけないんですよね???製作の都合上、ある文字と連番とかにはできないんです・・・。というのもitem4に空白がありますなんて表示されても分かり難いと思いますので・・・

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

$_POSTは元々連想配列では。 $_POST自身は、HTMLフォームの要素名をキーとしてますから、 例えば、 <input type="text" name="item1" value="atai"> <input type="text" name="item2" value="watashi"> <input type="text" name="item3" value="boku"> のように要素名を規則的にする事で、 $idx = 3; echo $_POST[ "item".$idx ], "<br>"; でアクセスできます。 ――という話ではない?

amountainblast
質問者

お礼

ありがとうございます。 この方法ですとHTMLの要素名を連番にしないといけないんですよね???製作の都合上、ある文字と連番とかにはできないんです・・・。すみません・・・

関連するQ&A

専門家に質問してみよう