• ベストアンサー

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

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

  • PHP
  • 回答数6
  • ありがとう数7

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

  • ベストアンサー
  • 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/245)
回答No.6

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

  • sisya
  • ベストアンサー率39% (97/245)
回答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

  • AJAXでサーバーにある連想配列を取り出す

    こんにちは。PHP学習者です。 ブラウザ上でAJAXを使って、サーバーにあるPHPで作ったデータファイルを取得する方法は知っていますが、連想配列を取得することは出来ますか? 今までは連想配列をわざわざテキストファイルに書き換えてからAJAXで取得していましたが、もし直接取得する方法があれば知りたいと思いました。 詳しい方、どうかよろしくご教授ください。お願いします。

  • 配列や連想配列について

    言語一般の配列や連想配列について 最近どういう解釈をしていいのか わからなくなってしまいました。 仮にPerlで話をさせてもらいますと、 連想配列%FORMがあるとき、 個々の要素にアクセスする場合 例えば$FORM{'name'}などと記述しますが、 この$FORM{'name'}を みなさんはどのように解釈しているでしょうか? $FORM{' '}にキー nameを 代入しているようなイメージで、 「連想配列%FORMからキー'name'の値を取得する」 という考え方でしょうか? わたしは最近、 $FORM{'name'}はそれ自体が一つの変数という 考え方が出来るのではないかという気がしているのですが、 連想配列の実装から考えると この考え方は正しいのでしょうか? 以前、配列について同様の質問を したことがあります。 例えばC言語でint a[100]と宣言した場合は、 連続的なアドレスに確保されるため、 a[2]はaという名前のアドレスから a + 2 番目の場所という意味になるが、 言語によっては不連続なアドレスに 確保されるため、a[2]は一つの変数名として 考える必要がある・・ との回答でした。 ならば連想配列の場合も もし不連続なアドレスに確保されるならば、 $FORM{'name'} は一つの変数名と 考えたほうが正しいのではないかと 思ったからです。 連想配列の内部的な処理がどうなっているのか 教えて頂きたいです。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • 思うような連想配列ができない・・

    省略して説明します。 関東,東京,神奈川,千葉 中部,愛知,静岡,岐阜 関西,大阪,兵庫,京都 というCSVデータがあり これを以下のような、連想配列にしたいのですがどうすればよいのでしょうか?? Array (   [0] => Array    (      [0] => 関東      [1] => 東京      [2] => 神奈川      [3] => 千葉    )   [1] => Array    (      [0] => 中部      [1] => 愛知      [2] => 静岡      [3] => 岐阜    )   [2] => Array    (      [0] => 関西      [1] => 大阪      [2] => 兵庫      [3] => 京都    ) ) --------------------------------- CSVデータを、feofで終端まで読み込み feofで一行ずつ取得 explodeでコンマで分解まではできるのですが 上記のような、連想配列ができません・・。 ご教授よろしくお願いします。

    • ベストアンサー
    • PHP
  • Perlのサブルーチンで連想配列(ハッシュ)を渡す

    Perlのサブルーチンで連想配列(ハッシュ)を渡す方法 -------------------------------------- $str=rep::replace(%A,$B,@C); -------------------------------------- sub refidrep ( \%\$\@ ){ my(%A,$B,@C)=(@_); } -------------------------------------- では、上手くいきませんでした。 どのようにしたら、連想配列をサブルーチンに渡せるのでしょうか? 分かる方いらっしゃいましたらご教授ください。

    • ベストアンサー
    • Perl
  • 他スクリプトの連想配列を扱いたい

    a.phpにある特定の連想配列を、b.phpで扱いたいのですが どのようにすれば良いのでしょうか?? 簡略化して書きますが、a.phpに $a[japan][kantou][] = "東京"; $a[japan][kantou][] = "神奈川"; $a[japan][kantou][] = "千葉"; $a[japan][kansai][] = "大阪"; $a[japan][kansai][] = "兵庫"; $a[japan][kansai][] = "京都";    ・    ・    ・ (簡略化していますが実際はもっと複雑な連想配列です。) 上記のような連想配列があり、 b.phpで、$a[japan][kansai]の配列を扱いたいのです。 b.phpで、requireを使ってa.phpを読み込んでも a.php内の他の実行処理までされてしまうのでNG。 扱いたい連想配列をtxtなどに出力し、 b.phpでそのtxtを読み込んで扱う事も考えたのですが、わざわざ出力するのも・・・ なのでNG。 globalで、他スクリプトの特定の連想配列を読み込む事はできないですよね・・・? 何かいい方法があればご教授頂けたらと思います。

    • ベストアンサー
    • PHP
  • stdClass Objectを連想配列のように個別に取り出したい。

    $aに連想配列が入っているとして、 print "<pre>";print_r($a);print "</pre>";   ↓ array (  [Return] => array   (    [data] => あいうえお   ) ) このように連想配列の入った変数から データを個別に取るとき このように、配列名を並べると print $a['Return']['data']; ↓ あいうえお と、個別に取り出せますが、 あるデータをprint_rすると、 stdClass Object (  [Return] => stdClass Object   (    [data] => あいうえお   ) ) というふうに"stdClass Object"として出力されてしまいました。 stdClass Objectのデータを個別に取り出したいのですが 連想配列のような記述だとうまく取り出せません。 stdClass Objectのデータはどのようにして個別に取り出すのでしょうか?

    • ベストアンサー
    • PHP
  • responseTextから連想配列へ

    ajaxによってサーブレットから以下のresponseTextを取得したとします。 ~ A ~ a : aa b : bb c : cc ~ B ~ d : dd このようなレスポンスから var array; array["a"] = 'aa'; array["b"] = 'bb'; というように連想配列を取得したいのですが、どのようにすれば良いかわかりません。 どなたか力を貸していただけませんか?

  • 連想配列(PHP 対 JavaScript)

    こんにちは。質問をさせてください。 PHPでOracleのデータを取得してそのデータを連想配列に格納するとします。 /------- PHP内でのソース -----------------/ (例) $Count:検索データ数  for($cnt=0;$cnt<$Count;$cnt++){ $data[$cnt] = "取得したデータ";  Fech(次のレコードを取得する); } 上記で取得した連想配列の値をJavaScriptでしようしたいのですが うまくいきません。 JavaScriptではArrayに取得したデータを格納したいのです。 (例) /-- JavaScript内のソース Afor2=new Array("取得data1","取得data2",・・・"最後の取得data"); としてHTMLの何かのイベント時にしようしたいと考えています。 今僕は以下のような動きをしたいです。 /----以下、JavaScriptでの記述-----------------/ var New_Array=new Array(5); for(i=0;i<<?=$Count?>;i++){ document.form.cmb_box.options[i] = new Option(<?=$data[i]?>, i); } のようなことをしたいのですが。 (もちろん上記はだめですが・・・) 質問がわかりにくくて大変もうしわけありませんが、 アドバイス、質問などよろしくお願いいたします。

    • 締切済み
    • PHP
  • DBIを使用してデータを連想配列に「入れたい。

    MySQLとDBIを使って、テーブルから取り出したデータの、カラムの名前をキー、フィールド値をバリューとした連想配列を作りたいのですが、どうすればいいでしょうか?? fetchrow_arrayの使い方は分かっているのですが、fetchrow_arrayだと配列しか作れないみたいなので・・ハッシュにしたいのです。 分かる方いらっしゃいましたらご教授よろしくお願いします。

    • ベストアンサー
    • Perl
  • 連想配列と比較させ変換したいのですが

    ファイルから a,h,2,26,f というデータを読み込んで %hash = (1=>'a',2=>'b',‥‥,26=>'z') のような連想配列と比較させ 1,8,b,z,6 となるように、読み込んだものが英字ならキーを、数字なら値を 出力させたいのですが可能でしょうか? お教え願います。

    • ベストアンサー
    • Perl