POSTで配列のデータを渡す方法は?

このQ&Aのポイント
  • 配列でデータを入力し、POSTで配列のデータを渡す方法を知りたい
  • 現在のコードでは正しく配列のデータが渡せていない可能性がある
  • 修正が必要な部分があるため、コードを再チェックしてください
回答を見る
  • ベストアンサー

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
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • X-Terra
  • ベストアンサー率48% (25/52)
回答No.2

配列を利用するのではなく、この場合は、$data_1や$data_2などの変数を利用するのが無難です。<input type> がtextですので。 ただ、<select ... multiple>やcheckboxの場合は、別の処理の仕方を工夫する必要があります。 一番良いやり方は、&ReadParseを使わず、連想配列を活用する方法です。 インプレス社の「Perl5 パワフルテクニック大全集」の、第7章にヒントがあります。ご参考まで。 尚、PHPを使えば、abparkさんが書かれたような「配列」を利用することが出来ます。

abpark
質問者

お礼

X-Terra様 ありがとうございました. 自分も配列ができなかったので、$data_1。。。の方法をとっては 見ましたが、できなかったので質問しましたが、コメントのあと もっとやってみるとできました. 本当にありがとうございます. 以下のようにしました. sub correct { print "Content-type: text/html\n\n"; print "data1-list->$data1<>$data2<>$data3<p>\n\n"; for ($i=1;$i<=3;$i++) { $da = "data$i"; print " $i-> $$da <br>\n\n"; } } //結果は data1-list->test1<>test2<>test3 1-> test1 2-> test2 3-> test3 以上でできました.

その他の回答 (1)

  • A__
  • ベストアンサー率47% (22/46)
回答No.1

HTMLが問題で、name の値に [ があるからだと思いました。 <html> <input name=inp value=test01> <input name=inp[0] value=test02> <button onClick=alert(inp.value)>inp</button> <button onClick=alert(inp[0].value)>inp[0]</button> <html>

abpark
質問者

お礼

A__様 ありがとうございました. コメント、役に立ちました.

関連するQ&A

  • FORM ACTION~POST使用時について

    こんにちは。お世話になります。 cgiファイルから、FORM ACTION~POST⇒submitで自分自身を呼び出す時に、INPUT TYPE=\"text\"を11個間に入れると呼び出せません。 (10個の場合はうまくいきます) FORM ACTION~POSTは文字数制限がないと、本を見てもかいてあるのですが、なにか理由があるのでしょうか。 ご存知の方、ご教授願えたら幸いです。 よろしくお願いいたします。 抜粋したソースを下記に記します。 ------------------------------------------------------------- #障害対応情報項目テキストボックス print "<H5>【障害対応情報項目】</H5>\n"; print "<FORM ACTION=\"../cgi-bin/serch_e-001.cgi\" METHOD=\"POST\">\n"; print "<INPUT TYPE=\"text\" NAME=\"S1-2\" VALUE=\"$$selectdata[0][7]\" SIZE=30>\n"; print "<INPUT TYPE=\"text\" NAME=\"S1-3\" VALUE=\"$$selectdata[0][8]\" SIZE=30>\n"; print "<INPUT TYPE=\"text\" NAME=\"S1-4\" VALUE=\"$$selectdata[0][9]\" SIZE=30>\n"; print "<INPUT TYPE=\"text\" NAME=\"S1-5\" VALUE=\"$$selectdata[0][10]\" SIZE=30>\n"; print "<INPUT TYPE=\"text\" NAME=\"S1-6\" VALUE=\"$$selectdata[0][11]\" SIZE=30>\n"; print "<INPUT TYPE=\"text\" NAME=\"S1-7\" VALUE=\"$$selectdata[0][12]\" SIZE=30>\n"; print "<INPUT TYPE=\"text\" NAME=\"S1-8\" VALUE=\"$$selectdata[0][13]\" SIZE=30>\n"; print "<INPUT TYPE=\"text\" NAME=\"S1-9\" VALUE=\"$$selectdata[0][13]\" SIZE=30>\n"; print "<INPUT TYPE=\"text\" NAME=\"S1-13\" VALUE=\"$$selectdata[0][18]\" SIZE=30>\n"; print "<INPUT TYPE=\"text\" NAME=\"S1-14\" VALUE=\"$$selectdata[0][19]\" SIZE=30>\n"; print "<INPUT TYPE=\"text\" NAME=\"S1-15\" VALUE=\"$$selectdata[0][19]\" SIZE=30>\n"; print "<INPUT TYPE=\"submit\" NAME=\"button\" VALUE=\"新規検索\">\n"; print "<INPUT TYPE=\"submit\" NAME=\"button\" VALUE=\"更新\">\n"; print "<INPUT TYPE=\"hidden\" NAME=\"no\" VALUE=\"$$selectdata[0][0]\">\n"; print "</FORM>\n"; ------------------------------------------------------------

    • ベストアンサー
    • Perl
  • 配列をPOSTで受けとる

    タイトルのまんまですが 配列をformで送って それをPOSTで受け取りたいのですが うまくいきません 具体的に言うと <?php print"<form method=POST action=action.php>"; for($i=0; $i<$n; $i++){    print"<input type=text name=foo[$i]>"; } print"<input type=hidden name=n value=$n>"; print"<input type=submit value=go>"; print"<form>"; ?> ///////////以下action.php////////////////// <?php $n = $_POST["n"]; for($j=0; $j<$n; $j++){    $foo[$j] = $_POST["foo[$j]"];    print"$foo[$j]"; } ?> こんな感じのことがしたいのですが うまくいきません どうもPOSTされてないみたいでfoo[$j]はnullです 凡ミスな気がしなくもないんですが...プログラム初心者なんで↓↓ 教えてください よろしくお願いします

    • ベストアンサー
    • PHP
  • 特定のデータだけををソートしたい

    POSTで渡されたデータの中から特定のデータだけを取り出しソートしたい。 例えばNo・名前・年齢のtextを数個表示してNoだけを抽出し、ソートして昇順にしたいのですが? print '<form name="form1" action="eee.php" method="POST">' . "\r\n"; for($i=0;$i<5;$i++){ print '<input type="text" name="N0'.$i.'">' . "\r\n"; print '<input type="text" name="Name'.$i.'">' . "\r\n"; print '<input type="text" name="Age'.$i.'">' . "\r\n"; } print '<input type="submit" value="送信">' . "\r\n"; print '</form>' . "\r\n";

    • 締切済み
    • PHP
  • POSTデータのNAME属性をVALUEによって取得する方法

    HTML→PHPのPOSTデータのやりとりについて、 【HTML】 <form name="form1" method="post" action="xxx.php"> <input name="01" type="text" value="1"> <input name="02" type="text" value="0"> <input name="03" type="text" value="0"> <input name="04" type="text" value="1"> <input type="submit" name="Submit" value="送信"> </form> 【xxx.php】 フォームから送信されたデータを使って、「value」が"1"の「name」を拾うのにはどのように書けばいいでしょう? ↓このように取得したいです。 $data[0]="01"; $data[1]="04"; よろしくお願いします。

    • ベストアンサー
    • PHP
  • POST からの受け渡しができません・・・

    教えてくださいm(__)m <FORM action="<? echo $PHP_SELF; ?>" method="POST"> :(ここにはif文がはいっています。) : print "お名前:<BR>\n"; print "<input type=\"text\" name=\"handle\" size=\"16\" maxlength=\"30\" value=\"<? echo ($handle); ?>\"><br><br>\n"; print "性別:<BR>\n"; for (reset ($sex_tbl); $key = key ($sex_tbl); next ($sex_tbl)) { echo (" <OPTION value=\"" . $key . "\""); if ($key == $sex) echo (" SELECTED"); echo (">" . $sex_tbl[$key] . "\n"); } print "PRポイント:<BR>\n"; print "<input type=\"text\" name=\"pr\" size=\"16\" maxlength=\"30\" value=\"<? echo ($pr); ?>\"><br><br>\n"; print "<CENTER><input type=\"submit\" value=\"次の人!\"></CENTER><br>\n"; print "<input type=\"hidden\" name=\"page\" value=\"kekkapage\">\n"; print "<input type=\"hidden\" name=\"handle\" value=\"" . $_POST['handle'] . "\">\n"; print "<input type=\"hidden\" name=\"sex\" value=\"" . $_POST['sex'] . "\">\n"; print "<input type=\"hidden\" name=\"pr\" value=\"" . $_POST['pr'] . "\">\n";←80 </FORM> : : ↑なのですが、 「・・・on line 80」エラー表示になりうまくいきません。 の部分が原因と表示にはなっているのですが…。 助けてください。 宜しくお願いしますm(__)m

    • ベストアンサー
    • PHP
  • HTML側データの摘出方法

    フォームメールを作っているのですがHTML側のデータが希望通りに摘出出来ません。 【C G I 側 一部】 push(@DATA_N,$name); push(@DATA_V,$value); foreach (0..$count-1) { if ($DATA_V[$_] =~ /\n/) { &jis("$DATA_N[$_] =\n$DATA_V[$_]\n"); print OUT "$msg\n"; } else { &jis("$DATA_N[$_] =$DATA_V[$_]"); print OUT "$msg\n"; } } 【HTML側】 <BODY> <h1>WEBFORM用サンプルフォーム</h1> <FORM method="POST" action="webform.cgi"> <INPUT type="hidden" name="location" value="http://abc.com/123.htm"> <INPUT type="hidden" name="subject" value="フォームメール"> 質問:<INPUT size="50" type="text" name="質問"><BR> 名前:<INPUT size="50" type="text" name="Yourname"><BR> メール:<INPUT size="50" type="text" name="Email"><BR> <BR> <INPUT TYPE="submit" VALUE="確認"> <INPUT TYPE="reset" VALUE="リセット"> <p> <input type="checkbox" name="c_copy" value="on" checked> 送信内容のコピーを表示<br> <input type="checkbox" name="no_check" value="on"> 内容確認画面を出さないで送信する </FORM> </BODY> 上記の設定で【質問】【名前】【メール】の項目と値が全て送られて来るのですが、送られてくる順番を【名前】が先頭であとはHTML側の順番通りにしたいと思います。 以下のように行が何番目かを指定すれば結果は得られるのですが複数のHTMLに対応させる為【名前】項目が何番目に来るかが指定出来ません。 foreach (1) { if ($DATA_V[$_] =~ /\n/) { &jis("$DATA_N[$_] =\n$DATA_V[$_]\n"); print OUT "$msg\n"; } else { &jis("$DATA_N[$_] =$DATA_V[$_]"); print OUT "$msg\n"; } } そこでHTML側 名前:<INPUT size="50" type="text" name="Yourname"> のname="Yourname"部分を使って指定出来ないかとあれこれ試してみますがうまくいきません。 有識者の方々のご指導いただければ幸いです。何卒宜しくお願いします。

    • 締切済み
    • CGI
  • postのタイムラグ

    以下のソースでPOSTの値が取れないときがあるので困っています。 具体的にはページを表示してから30秒程度待ってからの クリックじゃないとPOSTの値が取れません。 GETの場合はページ表示後すぐにボタンをクリックしても大丈夫でした。 原因が分からず途方に暮れています。 お知恵をお貸しください。 PHP Version 5.2.3 <?php $P_data = $_POST["pg"]; print("POST=>".$P_data."<BR>"); $G_data = $_GET["pg"]; print("GET=>".$G_data."<BR>"); print <<< DOC_END <html> <head> </head> <body> DOC_END; echo"<form action=test.php method=post>"; echo"<input type=hidden name=pg value=1>"; echo"<input type=submit value=あ>"; echo"</form>"; echo"<form action=test.php method=post>"; echo"<input type=hidden name=pg value=2>"; echo"<input type=submit value=い>"; echo"</form>"; echo"<form action=test.php>"; echo"<input type=hidden name=pg value=3>"; echo"<input type=submit value=う>"; echo"</form>"; echo"<form action=test.php>"; echo"<input type=hidden name=pg value=4>"; echo"<input type=submit value=え>"; echo"</form>"; print <<< END </body> </html> END; ?>

    • 締切済み
    • PHP
  • 複数のデータをPOSTで渡す場合について(ソース一部省略)

    教えてくださいm(。≧Д≦。)m PHP初心者です。。 ----------------------------------------------------------- <FORM action="<? echo $PHP_SELF; ?>" method="POST"> print "お名前:<BR>\n"; print "<input type=\"text\" name=\"handle\" size=\"16\" maxlength=\"30\" value=\"$handle\"><BR>\n"; ↓この表示も違うと思うのですが…-------- print "性別:<BR>\n"; print "<input type=\"radio\" name=\"sex[0]\" value=\"$sex[0]\" checked>男性<BR>\n"; print "<input type=\"radio\" name=\"sex[1]\" value=\"$sex[1]\">女性<BR>\n";------------ print "PRポイント:<BR>\n"; print "<input type=\"text\" name=\"body\" size=\"16\" maxlength=\"30\" value=\"$body\"><br><br>\n"; <input type=\"submit\" value=\"次の人\"></CENTER> print "<input type=\"hidden\" name=\"handle\" value=\"" . $_POST['handle'] . "\">\n"; print "<input type=\"hidden\" name=\"sex\" value=\"" . $_POST['sex'] . "\">\n"; print "<input type=\"hidden\" name=\"body\" value=\"" . $_POST['body'] . "\">\n"; ---------------------------------------------------------------- ↑この前に「人数は?」というSELECTで数字を選ぶものがありその人数に合わせて「次の人」を押すと入力ページが繰り返されています。 例えば3人を選ぶと3回入力画面が続くわけですが、その後そのデータを引継ぎたいのです。 一人目 名前の表示<br>PRの表示<br>(女性を選択した場合)全ての男性の名前の表示 二人目、三人目も同じように表示したいのです。。 どのように作ればいいでしょうか?m(。≧Д≦。)m

    • ベストアンサー
    • PHP
  • PHPで隠しデータをPOST送信する方法

    <form name="example" method="POST" action="example.php"> <input type="text" name="id" value="" /> <input type="password" name="pw" value="" /> <input type="submit" value="ログイン" /> </form> 上記のようなログインフォームがあるとします。 <input type="hidden" />のようにソースを見たらわかってしまう方法ではなく、 クライアント側で完全に見えないよう、id,pwの送信と同時にPHPで隠しデータをPOST送信する方法はございますでしょうか。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • フォームデータのcsv保存について

    お世話になります。フォームに入力されたデータを csvファイルに保存するというcgiの作成をしています。 初めてcgiを作成するので、書籍の真似をして作成した のですが、おかしいデータが保存されてしまいます。 質問の項目数は5個で以下のとおりです <FORM ACTION="./ans1.cgi" METHOD="POST"> 名前:<br> <input type="text" name="name" size=30> <br> 1:<br> <input type="text" name="a1" size=30> <br> 2:<br> <input type="text" name="a2" size=30> <br> 3:<br> <input type="text" name="a3" size=30> <br> 4:<br> <input type="text" name="a4" size=30> <br> <INPUT type="submit" value="送 信"> <INPUT type="reset" value="リセット"> <BR> </FORM> cgiの中身です。 #! /usr/bin/perl require './cgi-lib.pl'; $answer = 5; $ansfile = "kotae.csv"; &ReadParse(*in); $name = $in{'name'}; for($n = 1; $n <= $answer; $n++ ) { $a[$n] = $in{"a$n"}; } open (FILE,">>$ansfile"); flock (FILE,2); print (FILE "\"", $name); for($i = 1; $i <= $answer; $i++ ) { $a[$i] = ~ s/\"/""/g; print FILE "\"\,\""; print FILE $a[$i]; } print FILE "\"\n"; flock(FILE,8); close(FILE); print "Content-type: text/plain\n\n"; print "<HTML><BODY>\n"; print "tesuto"; print "</body></HTML>"; exit; csvファイルの中身を見ると、最初の列には、項目1で 記入したデータが入ってますが、項目2以降 は4294967295と数字が入ってます。どうも1個目の回答 欄のデータはちゃんと取得されてるのですがそれ以降の が取得されていないみたいです。 よろしくお願いいたします。

    • ベストアンサー
    • CGI