formで送信した配列データを受け取る方法

このQ&Aのポイント
  • formで送信した配列データを取得するためには、受信側のPHPコードを適切に記述する必要があります。
  • 受信側では、$_POST変数を使用してデータを取得し、適切な処理を行うことで配列データを受け取ることができます。
  • 送信側では、input要素のname属性に配列の添字を指定し、value属性に送信するデータを出力することで、配列データを送信することができます。
回答を見る
  • ベストアンサー

送信した配列の取得方法

formで送信した配列データを受け取りたいのですが、以下のような記述だとうまく受け取れません。 記述方法を教えてくださいm(__)m (取得データはほかにもいくつかあり、まとめてPOSTで受け取っています) ◆取得側 function cnv_formstr($array1) { foreach($array1 as $k => $v){ if (get_magic_quotes_gpc()) { $v = stripslashes($v); } $v = htmlspecialchars($v,ENT_QUOTES); $array1[$k]=$v; } return $array1; } $prmarray_post = cnv_formstr($_POST); $data_cnt = isset($prmarray_post["data_cnt"]) ? $prmarray_post["data_cnt"] : ""; for ($i = 0; $i < $data_cnt; $i++) { $test_data[$i] = isset($prmarray_post["test_data[".$i."]"]) ? $prmarray_post["test_data[".$i."]"] : ""; } ◆送信側(html部分のphp宣言解除記述は省きます) <input type="hidden" name="data_cnt" value="<?=$data_cnt?>"> for ($i = 0 ; $i <= $data_cnt; $i++) { <input type="hidden" name="test_data[<?=$i?>]" value="<?=$test_data[$i]?>"> } という感じでやりたいです。 わかりにくかったらすみません(-_-; よろしくお願いします。

  • PHP
  • 回答数2
  • ありがとう数1

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

  • ベストアンサー
回答No.2

$prmarray_post["test_data[".$i."]"] の部分に関しては、 $prmarray_post["test_data"][$i] で参照できます。 HTML中の記述については問題ありません。

qkyorochan
質問者

お礼

ありがとうございます! 助かりましたm(__)m

その他の回答 (1)

回答No.1

PHPは、 <input type="text" name="foo[bar]" /> などといったname値がPOSTされた場合、配列に展開されてしまいます。 その為、これにアクセスするためには、 $_POST['foo']['bar']; としなければなりません。 なので、cnv_formstr関数に関しては再起処理を行う必要があります。 function cnv_formstr($array1) { foreach($array1 as $k => $v){ if(is_array($v)){ $array1[$k] = cnv_formstr($v); }else{ if (get_magic_quotes_gpc()) { $v = stripslashes($v); } $v = htmlspecialchars($v,ENT_QUOTES); $array1[$k]=$v; } } return $array1; } こんな感じで。

qkyorochan
質問者

補足

ご回答ありがとうございます。 たびたびすみません。 教えて頂いたfonctionで実行してみました。 取得部分の記述はどのようになるのでしょうか? $prmarray_post = cnv_formstr($_POST); $data_cnt = isset($prmarray_post["data_cnt"]) ? $prmarray_post["data_cnt"] : ""; for ($i = 0; $i < $data_cnt; $i++) { $test_data[$i] = isset($prmarray_post["test_data[".$i."]"]) ? $prmarray_post["test_data[".$i."]"] : ""; } とした場合、$data_cntは取れているのですが、$test_data[$i]がうまく取れません(;_;) 送信部分の配列の記述も <input type="hidden" name="test_data[<?=$i?>]" value="<?=$test_data[$i]?>"> で問題ないでしょうか?

関連するQ&A

  • submitではなくbuttonで送信

    事情があり、submitではなくbuttonでフォームのデータを送信したいのですが、以下のように書くとbuttonでは4567が送信されません。 <form action="test.cgi" method="post"> <INPUT type="hidden" name="aaa" value="1234"> <INPUT type="submit" name="bbb" value="4567"> </form> ↓ <form action="test.cgi" method="post"> <INPUT type="hidden" name="aaa" value="1234"> <INPUT type="button" name="bbb" value="4567" onclick="submit();" > </form> submitと同じように、bbbのデータ4567も送信するにはどのように書けばよいのでしょうか? 宜しくお願いします。

  • 複数Formから値を取得するやりかた

    AというASPには複数のformがあります。 DBの取得結果を表示しており、countには取得件数が入ってます。 また、件数分同じformがあり、判別はnameにて行っています。 検索件数<%=count %>件 <input type="button" value="一括修正" action="Update('<%=count %>')"> <% Do Until rs.EOF %> <form method="POST" target="main" name="updatename<%=ii%>"> <input type="hidden" name="no" value="<%= rs.Fields.Item("NO").Value %>" </form> <form method="POST" target="main" name="updatename<%=ii%>">… <% ii= ii+1 rs.MoveNext Loop%> 受け取り側のBというASPでは <form method="POST" name="update"> <%For i = 1 To count%> <input type="hidden" name="no<%=i%>" value="<%=Server.HTMLEncode(Request.Form("No" & i)) %>"> <%Next%> </form> のようにループにて送信側のデータを取得しています。 このAとBの間をjavascriptにて行いたいのです。 Javascript(データ受け渡し) function Update(count) { var No = new Array(); for (Cnt=1; Cnt<count ; Cnt++){ // 件数分ループ No[Cnt] = document.all.updatename(Cnt).no.value; document.update.no(Cnt).value=No[Cnt]; } document.update.submit(); } やりたい事は、Aというファイルにある複数のformから値を取得し、Bというファイルにある項目に設定する、という事なのですが、上手くいきません。 ・複数のformからデータを取得する方法 document.allを使用すると上手くいく、とネットで検索してわかったのですが、いまいち使用方法がわからず、こまっています…。 どうか宜しくお願いします。(ちなみに1つのFormで、というのは仕様上不可能です)

  • for文でpostの値を受け取る方法

    以下のようなコードで、postで投げられた値を、for文で、添え字を組み立てて受け取って表示したいのですが、添え字の生成が間違っているのか、うまくいきません。 何を修正すればよいか教えてください。 <form action="" method="post"> <input type="hidden" value="A" name="name_0"> <input type="hidden" value="B" name="name_1"> <input type="hidden" value="C" name="name_2"> <input type="hidden" value="D" name="name_3"> <input type="submit"> </form> <?php for($i =0; $i < 4; $i++){ if (!empty($_POST['name_$i'])) { print $_POST['name_$i']; } } ?>

    • ベストアンサー
    • PHP
  • 配列の受け渡し

    失礼致します。 配列について困っていまして、質問させてください。 今、フォームデータとしてsubmitを押したときにjavascriptから配列をサーブレットに受け渡ししたいです。フォームを含めたソースは次のようになります。 <script> function submitArr(n) { var i = 0; var array = []; while(i<n) { array.push(variable); // variableはiの値に応じて変わる変数。 } document.frm.array.value = array; ☆ } </script> <form action="servlet" method="post" name="frm"> <input type = "submit" value = "submit" onClick="submitArr()"> <input type = "hidden" value = "" name="array"> ☆ </form> 次に、servlet側でこれを受け取ります。 String[] array = new String[n]; ★ while(i<n) { array[i] = req.getParameter(array[i]); ★ } 以上が本質的な部分だと思うのですが、☆および★の部分をどう書いたらいいかわかりません。 添え字も少しあやふやなのですが、 分かる人がおられましたら、教えていただけないでしょうか?

    • ベストアンサー
    • Java
  • 配列の受け渡し

    こんばんは。 あるページで使用した配列を他のページでも使いたいのですが、 こういう配列を格納した変数の受け渡しって出来るのでしょうか? 普通の変数のデータを受け渡したかったら <input type="hidden" />で直接valueに変数の値を入れれば良いですが、 配列だと自分では以下のように愚直にやる方法しか分かりません。 もっとちゃんと渡せる方法ってあるのでしょうか? <?$a=array(1,2,3,4,5);?> <? for($i=0;$i<count($aaa);$i++){ ?> <input type="hidden" value="<?=$aaa[$i]?>" name="hoge[]"/> <?}?>

    • ベストアンサー
    • PHP
  • POSTで配列のデータを渡す方法は?

    初歩的な質問で申し訳ございません。配列でデータを入力し、POSTで配列のデータを渡す方法を知らなくて困っています。いろいろ調べましたが、見つかりません。 だれか、教えてください。 ..... &ReadParse(*in); for ($i = 0 ; $i <=10 ; $i++){    $data[$i] = $in{'data[$i]'}; } sub main { 。。。以下修正部分・。。。 print "<form method=\"POST\" action=\"$userpro\">"; print " <input type=\"hidden\" name=\"mode\" value=\"miss1\"><p>"; print " <input type=\"text\" name=\"data[1]\" size=\"20\" value=\"$data[1] \">"; print " <input type=\"text\" name=\"data[2]\" size=\"20\" value=\"$data[2] \">"; print " <input type=\"text\" name=\"data[3]\" size=\"20\" value=\"$data[3] \">"; ...... print " <p><input type=\"submit\" value=\"修正\" name=\"B1\"></p>\n" ; print "</form>\n" ; ・・・・ } #Submit後実行される関数 sub miss1 { print "Content-type: text/html\n\n"; for ($i = 0 ; $i <=10 ; $i++){ print "$i-$data[$i]<br>"; } exit; } 結果は 0-空(空白) 1-空(空白) 2-空(空白) 。。。 にです。 何が間違っているでしょうか。よろしくお願いします。

    • ベストアンサー
    • Perl
  • バックスラッシュの対策について

    formでデータを送信するとバックスラッシュが入ってしまうので、stripslashes()で処理しています。 POSTでデータを送信しているのですが、 $prmarray_post = $_POST; $data1 = stripslashes($prmarray_post["data1"]); というような処理だと大丈夫なのですが、受け取るデータがいくつもあるので function cnv_formstr($array) { foreach($array as $k => $v){ if (get_magic_quotes_gpc()) { $v = stripslashes($v); } $v = htmlspecialchars($v, ENT_QUOTES); $$k = $v; } return $array; } $prmarray_post = cnv_formstr($_POST); $data1 = $prmarray_post["data1"]; という感じでやりたいのですが、これだとうまくいきません。 どのようにすればよいのでしょうか。 よろしくお願いしますm(__)m

    • ベストアンサー
    • PHP
  • リンクが押された文字をある値に変更するプログラム

    以下のソースで、リンクが押された文字をXに変更するということを実現したいのですが、なぜかうまくいきません。 リンクを押して、その文字を引数にして関数changeXを実行し、その文字がnameのhiddenのvalueをXに変更し、postでフォーム送信し、その文字がnameの$_POSTに値が入っていればそれをその文字の配列に代入して、表示するという風にしています。 どこを改良すれば、実現できるか教えてください。 <?php print "<form name='form1' method='post' action=''>"; $a = array("A"=>"A", "B"=>"B", "C"=>"C", "D"=>"D"); if(isset($_POST['A'])){ $a["A"] = $_POST['A']; }elseif (isset($_POST['B'])) { $a["B"] = $_POST['B']; }elseif (isset($_POST['C'])) { $a["C"] = $_POST['C']; }elseif (isset($_POST['D'])) { $a["D"] = $_POST['D']; }; function showA(){ global $a; foreach ($a as $key => $value) { print "<a href='' onclick=\"changeX('".$key."')\">"; print $value; print "</a>"; } } print "<input type='hidden' name='A' value=''>"; print "<input type='hidden' name='B' value=''>"; print "<input type='hidden' name='C' value=''>"; print "<input type='hidden' name='D' value=''>"; showA(); print "</form>"; print "<script>"; print "function changeX(v){"; print "document.form1.v.value = 'X';"; print "document.form1.submit();"; print "}"; print "</script>";

    • ベストアンサー
    • PHP
  • JSP内での配列の値取得方法。

    こんにちは。 -------- (略) <SCRIPT LANGUAGE="JavaScript" > function NextPage(no){ with( document.frm1 ) { hidNO.value = no; hidPlanId.value = 「ここに配列から取得した値を表示したい」; action = "Next.jsp"; submit(); } (略) <FORM name="frm1"> <% for(int i=0; i<(DBより取得した配列).length; i++) { ROW(HashMap継承の配列クラス) row = rows[i]; %> <INPUT TYPE="hidden" ID="hidKey" NAME="hidKey" VALUE="<%= i番目の値(1)%>" > <INPUT TYPE="hidden" ID="hidKey" NAME="hidKey" VALUE="<%= i番目の値(2)%>" > <TD><INPUT TYPE="button" NAME="btnDet<%= i %>" VALUE="詳細表示" onClick="NextPage('<%= i %>');" > </TD> <% } %> </FORM> ******* 上記のhidkeyのvalue値をJavaScript内でi番目の値を 取得するにはどのように記載したらよいのでしょうか・・・。 他のクラス等を使っているため、うまくコードが表現 できていないかもしれませんが、 もしこれでわかった方、ぜひ教えてください。

    • ベストアンサー
    • Java
  • 配列を使って値を受け取る方法で困っています(PHP)

    こんにちは、よろしくお願い致します。 現在使用している環境が2つあります。 Win2000+Apache1.3+PHP4.2.3 RedHatLinux8.0+Apache1.3+PHP4.2.3 そのうちLinux環境の方では、配列がうまく使えません。 お手数ですが、具体的な結果は test.html、test.phpのソースと実行結果をご覧下さい。 両方の環境のApacheやPHPの設定ファイルをチェックしたのですが 特に怪しいところはなく、とても困ってます。 アドバイスお願い致します。 (test.html)-- <HTML><BODY> <form action=./test.php method=post> <input type=input name=a[0] value="1"> <input type=input name=b[0] value="12"> <input type=input name=c[0] value="123"> <input type=input name=d[0] value="1234"> <input type=input name=e[0] value="12345"> <input type=input name=f[0] value="123456"> <input type=submit name=submit value="OK"> </form> </BODY></HTML> ------------ (test.php)-- <?php print_r($HTTP_POST_VARS); ?> ------------ 【 Win環境の結果 】 Array ( [a] => Array ( [0] => 1 ) [b] => Array ( [0] => 12 ) [c] => Array ( [0] => 123 ) [d] => Array ( [0] => 1234 ) [e] => Array ( [0] => 12345 ) [f] => Array ( [0] => 123456 ) [submit] => OK ) 【 Linux環境の結果 】 Array ( [a] => Array ( [0] => 1 ) [b] => Array ( [0] => 12 ) [c] => Array ( [0] => 123 ) [d] => Array ( [0] => ) [e] => Array ( [0] => 5 ) [f] => Array ( [0] => 56 ) [submit] => OK )

    • ベストアンサー
    • PHP