PHP初心者のためのフォームを使った配列変数の受け渡し方法

このQ&Aのポイント
  • PHP初心者のためのフォームを使った配列変数の受け渡し方法について解説します。
  • 一次元配列の受け渡しは成功したが、二次元配列の受け渡しでは問題が発生しました。
  • 多分、配列変数の記述方法が間違っていることが原因です。基本的なPHPの文法がわからないため、解決法につまずいています。
回答を見る
  • ベストアンサー

フォームを使った配列変数の受け渡し

PHP初心者です、よろしくお願いします。 フォームからPHPで配列変数を受け渡すことを考えています。 一次元配列はうまく渡せましたので、これを二次元にしましたところ、 うまく渡せません。基本的なPHPの文法がわかってないので、つまづい ています。多分、配列変数の記述方法がおかしいのだと思うのですが・・。 ご教授よろしくお願いします。 <html> <body> <form method = "POST" action ="test2.php" > <?php //データ渡し側 for ($i = 0 ;$i < 2 ;$i ++){ for ($j=0 ;$j <2;$j ++ ){ echo ("<input type ='text' name = 'data[$i][$j]' size ='10'>\n"); echo ("<br>\n"); } echo ("</tr>\n"); } ?> <input type="submit" name ="sbmit" value="data_input" > </form> </body> </html> <?php //データ受け側 for ($i = 0 ;$i < 2 ;$i ++){ for ($j=0 ;$j < 2;$j ++ ){ $tmp_data[$i][$j] = $_POST["data"][$i][$j]; echo ("$tmp_data[$i][$j] <br>\n"); } } ?> <html> <body> <form method = "POST" action ="test2.php" > <?php for ($i = 0 ;$i < 2 ;$i ++){ for ($j=0 ;$j <2;$j ++ ){ echo ("<input type ='text' name = 'data[$i][$j]' size ='10' value='$tmp_data[$i][$j]'>\n"); echo ("<br>\n"); } } ?> </table> <input type="submit" name ="sbmit" value="in" > </form> </body> </html> 実行結果は、 Array[0] Array[1] Array[0] Array[1] と表示されて、実際の入力した値が反映されません。

  • PHP
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
  • rhl
  • ベストアンサー率37% (42/111)
回答No.1

こんばんわ。 受け側の echo ("$tmp_data[$i][$j] <br>\n"); が問題です。 これだと echo ($tmp_data[$i]."[$j] <br>\n"); のように解釈されてしまうのです。 だから、 echo ($tmp_data[$i][$j]."<br>\n"); とするか、配列の前後に{}をつけて、 echo ("{$tmp_data[$i][$j]} <br>\n"); としてどこまでが配列の添え字なのか明示的にすれば いいですね。

rakujin
質問者

お礼

回答ありがとうございました。 {}でくくりましたところ、みごとに動きました。 このところ2日ばかり寝つきが悪かったのですが、 これで落ち着いて眠れます。ありがとうございました。

その他の回答 (2)

  • kusukusu
  • ベストアンサー率38% (141/363)
回答No.3

print_r($tmp_data) で一発です。

rakujin
質問者

お礼

回答ありがとうございます。 該当行に書き込み実行したところ、(フォームの値は、1,2,3と入れる) Array ( [0] => Array ( [0] => 1 ) ) Array ( [0] => Array ( [0] => 1 ) [1] => Array ( [0] => 2 ) ) Array ( [0] => Array ( [0] => 1 ) [1] => Array ( [0] => 2 ) [2] => Array ( [0] => 3 ) ) Array ( [0] => Array ( [0] => 1 ) [1] => Array ( [0] => 2 ) [2] => Array ( [0] => 3 ) [3] => Array ( [0] => 4 ) ) と表示されてしまいます。 書き込む場所がおかしかったのでしょうか? 受け側の echo ("$tmp_data[$i][$j] <br>\n"); ここに書き込みました。

  • rhl
  • ベストアンサー率37% (42/111)
回答No.2

NO1です。 すいません、回答の6行目と9行目のピリオド「.」が 見えにくいかもしれません。

関連するQ&A

  • PHP 多次元配列変数のデータ受け渡し。

    PHP 多次元配列変数のデータ受け渡し。 こんばんは。 先日からPHPでホームページを作成しています。 この度、二次元配列に代入した数値(文字列)を 二次元配列そのままで次のページに受け渡したいと考えています。 ※また、同時に新しく入力した値も受け取りたい。下記の name="data" の様に。 《1page.php》 → 《2page.php》 の受け渡しをする場合、 《1page.php》二次元配列作成 <?php for ($i=0; $i<10; $i++) { $test[] = array($_POST['moziretsu'],$_POST['suuretsu'],$_POST['suuretsu']); //文字・数字は毎回異なります。 } ?> <html> <body> <?= $test[2] ?><br> <?= $test[4] ?><br> <form action="2page.php" method="post"> <input type="text" name="data"><input type="submit" name="submit" value="次"> </form> </body> </html> 《2page.php》二次元配列受け取り <?php $aaaa = $_POST['data']; ?> で、新規に入力した数値は取得出来ても 二次元配列の $test はどの様に取得すれば宜しいのでしょうか? グーグル等で検索させてもらっても 希望の記事に辿り着かず困っております。 もしかしたら出来ないかも知れないので その場合は1page.phpで二次元配列をしないで 2page.phpにデータを送るり、2page.phpで二次元にする等の方法を考えなければなりませんし・・・。 書き方も悪くとても小さい初歩的な質問かとは思いますが 何卒、宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • 配列変数について

    とても基本的なことなのですが <script l anguage = "JavaScript"> week = new Array("日", "月", "火", "水", "木", "金", "土"); hizuke = new Date( ); day = hizuke.getDay( ); document.write("今日の日付 = ", hizuke.getMonth( ) + 1, "月 ", hizuke.getDate( ), "日 ", week[ day ], "曜日" ); </script> このような配列変数ならば、new Date( )によって呼び出された日付に対応して week[ day ]のところが日付に変わることはわかります。 <head> <title> Java </title> <script language = "JavaScript"> function calc( ) { point = new Array( ); point[0] = ei.value * 1; point[1] = su.value * 1 ; point[2] = ko.value * 1; sum = 0; for( i = 0 ; i < 3 ; i ++) { sum += point[i ]; } goukei .val ue = sum; ave = sum / 3; heikin.value = ave; } </script> </head> <body> <hr> <br> 英語 <input type = "text" size = "8" name = "ei "> <br> <br> 数学 <input type = "text" size = "8" name = "su"> <br> <br> 国語 <input type = "text" size = "8" name = "ko"> <br> <br> <hr> <br> <input type = "button" value = "計算" onclick = "calc( )"> <br> <br>3教科合計 <input type = "text" size = "8" name = "goukei "> 点 : 平均点 <input type = "text" size = "8" name = "heikin"> <br> <br> <hr> </body> </html > このような平均点を求めるプログラムでも point = new Array( ); point[0] = ei.value * 1; point[1] = su.value * 1 ; point[2] = ko.value * 1; sum = 0; for( i = 0 ; i < 3 ; i ++) { sum += point[i ]; このように配列変数を使っているのですが、なぜ配列変数をこのように使っているのかが わかりません。 なぜ、平均点を出すときはnew Array( )の( )の中身は何もなくて、上記のような表現を しているのでしょうか? よろしくお願いします。。

  • Noのデータ受け渡しで同じNoが表示されてしまうのは何故!?

    formdb_search.php 一覧表示させるphpです。 echo "<TR>\n"; echo "<FORM method=\"post\"action=\"./formdb_modify.php\">\n"; echo "<INPUT type=\"hidden\" name=\"data_no\" value=\"".$data_array[0]." \">\n"; echo "<TD nowrap><INPUT type=\"submit\" value=\" 詳細\"></TD>\n"; echo "<TD nowrap>" . $data_array[0] . "</TD>\n"; echo "<TD nowrap>" . $data_array[1] . "</TD>\n"; echo "<TD nowrap>" . $data_array[2] . "</TD>\n"; echo "<TD nowrap>" . $data_array[3] . "</TD>\n"; echo "<TD nowrap>" . $data_array[4] . "</TD>\n"; echo "<TD nowrap>" . $data_array[5] . "</TD>\n"; echo "<TD nowrap>" . $data_array[6] . "</TD>\n"; echo "</FORM>\n"; echo "</TR>\n"; //データ表示件数を1加算 $data_view++; } ?> <TR> <TH nowrap>詳細</TH> <TH nowrap>No.</TH> <TH nowrap>公開日</TH> <TH nowrap>求人の概要</TH> <TH nowrap>業界</TH> <TH nowrap>規模</TH> <TH nowrap>上場区分</TH> <TH nowrap>募集職種</TH> </TR> </TABLE> formdb_modifyのphpで、詳細を選択したNo.を表示するPGです。 // データファイルから1行ずつ配列として読込み $data_all = file("../../db/csv/maillog.csv"); //データ取得処理 for($i=1; $i < count($data_all);$i++){ // データを以下の配列として取得 // $data_array[0] - No. // $data_array[1] - 公開日 // $data_array[2] - 求人の概要 // $data_array[3] - 業界 // $data_array[4] - 規模 // $data_array[5] - 上場区分 // $data_array[6] - 募集職種 $data_array = explode(",",$data_all[$i]); $data_no = $_POST['data_no']; if($data_no == $data_no){ $kyujin=$data_array[0]; $koukai=$data_array[1]; $gaiyou=$data_array[2]; $gyoukai=$data_array[3]; $kibo=$data_array[4]; $kubun=$data_array[5]; $shokushu=$data_array[6]; $poji=$data_array[7]; $nenrei=$data_array[8]; $seibetsu=$data_array[9]; } } ?> <HTML> <HEAD> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=SHIFT_JIS"> <TITLE>データ詳細</TITLE> </HEAD> <BODY> <DIV align="center"> <H1>データ詳細 No.<?php echo $_POST['data_no'] ?></H1> <A href="./mail.html">求人案件情報登録へ</A> <A href="./formdb_search.php">求人案件一覧へ</A> <FORM method="post" action="<?php echo $PHP_SELF ?>"> <INPUT type="hidden" name="set" value="modify"> <INPUT type="hidden" name="data_no" value="<?php echo $data_no ?>"> <?php> $data_no = 0; ?> <TABLE align="center" cellpadding="10"> <TR align="left"> <TD>求人No.</TD> <TD><INPUT type="text" name="kyujin" size="20" value="<?php echo $kyujin ?>"></TD> </TR> 何故かどのNo.の詳細を選択しても同じNo.の詳細データが表示されてしまうのですが... 教えて下さい。

    • 締切済み
    • 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
  • 配列を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 からの受け渡しができません・・・

    教えてください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
  • 配列の受け渡し

    こんばんは。 あるページで使用した配列を他のページでも使いたいのですが、 こういう配列を格納した変数の受け渡しって出来るのでしょうか? 普通の変数のデータを受け渡したかったら <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
  • forで作成したフォームの値を更にPHPへ渡して表示する方法

    初心者です。 現在、PHPでforを利用し、繰り返しフォームを表示 させた後、その表示されたフォームへ入力をし、更に 違うPHPで入力された値を出力させようとしているのですが、 最終の出力が出来ずに悩んでおります。 繰り返しでフォームを作成するまでは出来たのですが、 どなたか御助力頂けたら助かります。 ---------------------------------------------------- <form.html> <html> <head> <title>it1</title> </head> <body> <form name="form" action="./it.php" method="POST"> <b>ラジオ選択<br> <input name="machine" type="radio" value="24">24<br> <input name="machine" type="radio" value="48">48<br> <input name="machine" type="radio" value="24">50</b><br><br> </body> <input type="submit" name="Submit" value="設定"> </form> </html> ------------------------------------------------------ <it.php> <?php $a = $_REQUEST["machine"]; ?> <html> <body> <p>入力テキストボックス表示</p> <?php for ($c=0; $c<$a; $c++){ $var[$c] += $var[$c]; $dest[$c] += $dest[$c]; $no[$c] += $c+1; } ?> <table> <tr> <td><center> <form name="form" action="./it2.php" method="POST"> <td> <center> <b>vlan</b><br> <?php for ($i=0; $i<count($var); $i++) { "<form name="form" action="./it2.php" method="POST">" print("fa0/${no[$i]}<input type=\"text\" name=\"${var[$i]}\" size=\"3\" maxlength=\"3\"><br>\n"); } ?> </td> <td> <b>description</b><br> <?php for ($i=0; $i<count($dest); $i++) { print("<input type=\"text\" name=\"${dest[$i]}\" size=\"15\" maxlength=\"15\"><br>\n"); } ?> </td> </tr> </table> <input type="submit" name="Submit" value="設定"> </form> </body> </html> -------------------------------------------------------- 以降の出力ソースに関して、難儀中。

    • ベストアンサー
    • PHP
  • セッション変数の受け渡しができない

    a.php: <?php session_start(); $_SESSION['test'] = "ok"; echo "<html><body>\n"; echo "<pre>\n"; var_dump($_SESSION); echo "</pre>\n"; echo "<a href=\"./b.php\">結果ページへ</a>"; echo "</body></html>\n"; ?> b.php: <?php session_start(); echo "<html><body>\n"; echo "<pre>\n"; var_dump($_SESSION); echo "</pre>\n"; echo "</body></html>\n"; ?> a.php の表示: array(1) { ["test"]=> string(2) "ok" } 結果ページへ b.php の表示: array(0) { } 再読込みでも同様です。 php.ini の Session 関係の項目は書籍やウェブサイトを参考にしておかしなものはないと自己判断していますが、指摘されるものを掲載します。

    • 締切済み
    • PHP
  • フォームから値の受渡し

    http://www.stackasterisk.jp/tech/php/php02_06.jsp こちらのページを参考にしてみたのですが、うまく表示されません 解決法ご存知でしょうか? 具体的には、display.php3 のページは表示されますが ソースを見ると php の部分になにも書かれてないようです display.php3 > display.php にしたり <? → <?php に変えたりしてみたのですけども 【form.html】 <html><body> <form action="display.php3" method="POST"> <input type="text" name="fName" size="30"><br> <input type="submit" value="submit"> </form> </body></html> 【display.php3】 <html><body> <? print $fName; ?> </body></html>

    • ベストアンサー
    • PHP

専門家に質問してみよう