• ベストアンサー

PHP+MySQL 2次元配列をPOSTで渡す処理について

こんにちはー! PHPで作った2次元配列をPOSTで渡す場合、丸ごと渡すことはできないのでしょうか。 1.CSVファイルを選択させ、読み込み 2.CSVの内容確認画面を表示 3.ユーザに対象レコードを選択させる 4.データベースへ追加 という処理を作っています。 「2.内容確認画面を表示」の際、 内容表示部分と、データベース追加用のPOSTで渡す部分は 配列をループさせています。 内容表示部分は問題無いですが、データベース追加用の部分は 配列の要素数分hiddenタグを書き出しています。 要素数が多ければ多いほど、 ソースがすごい量になってしまうのですが、 配列を丸ごと渡すことはできないのでしょうか? PHP4、もしくはPHP5でなにか方法はないでしょうか?

noname#107872
noname#107872
  • PHP
  • 回答数3
  • ありがとう数2

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

  • ベストアンサー
  • gogo-tea
  • ベストアンサー率75% (25/33)
回答No.2

hiddenがたくさん並ぶのが嫌であれば#1さんのおっしゃられる通りセッションを使うのが良いかと思います。 $hogeが以下のような配列だとして、 $hoge = array("aaa","bbb","ccc"); -----渡すphp----- session_start(); for($i=0;$i<count($hoge);$i++){ $_SESSION['hoge'][] = $hoge[$i]; } といった感じに格納して -----受けとるphp----- session_start(); $gethoge = $_SESSION['hoge']; for($i=0;$i<count($gethoge);$i++){ やりたい処理; } でいけるかと思います。

その他の回答 (2)

  • racchoman
  • ベストアンサー率71% (20/28)
回答No.3

セッションを使わない方法も書いてみます。 内容確認画面からは、ユーザが選択したレコードの、レコード識別子のみがサーバにPOSTされてくるようにします。 4の処理では、サーバ側のCSVファイルを再度読み込んで、上記のレコード識別子に該当するデータを取得し、それをDBに追加します。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

セッションで渡せるかもしれません

関連するQ&A

  • phpでcsvファイルから二次元配列を作る

    php初心者です。 phpでcsvファイルを読み込んで、 配列[csvの行番号][項目名(csv一行目の内容)]=各々の値 という二次元配列を作りたいのですが、作り方が全く分かりません。 どなたか教えてください。

    • ベストアンサー
    • PHP
  • PHP+MySQLでこのようなシステム

    PHPとMySQLで、このようなシステムを作れないかと考えているのですが、可能か不可能か、もしくはヒントだけでもいただだけないかと思い、質問させていただきました。 まず、PHP+MySQLというのは、javascriptとかも初心者用の本を買ったりしたのですが、こういうところに使うとかいまいち理解できず、 現在PHP+MySQLと必要な時だけjavascriptのサンプルをコピペとかで使って事足りているということです。 PHP+MySQLの知識は、浅い方ですが、データベースを使っての表示や条件抽出くらいはできるくらいです。 主に使うデータベース・ページは、下記の通りです。 データベース内にテーブルが複数あります。 ・table_01 ・table_02 ・table_03 全テーブルデータの一覧を表示させるPHP(1ページ20件毎に表示させています) ・itiran.php 各会員ページのPHP ・mypage.php 「このようなシステム」というのは、 ・一覧ページ【itiran.php】に[追加]ボタンを作り、[追加]を押すと会員ページ【mypage.php】に追加した商品が一覧として表示される ・【itiran.php】および【mypage.php】で追加した商品を一覧から[削除]できる ・【itiran.php】の各商品には、追加している人数[登録数]が表示される([削除]した場合は、人数は-1となる) 【itiran.php】テーブル例 ┼───┼───┼───────┼───┼ │NAME│ZAIKO│お気に入り    │登録数│ ┼───┼───┼───────┼───┼ │ポニョ │2,000 │ 追加       │500 │ ┼───┼───┼───────┼───┼ │ゲド  │1,000 │ 追加       │300 │ ┼───┼───┼───────┼───┼ │トトロ │9,000  │登録済み・・削除│100 │ ┼───┼───┼───────┼───┼ ・データベースは、各テーブル更新があった場合、一度の更新数が多くいので、1テーブルまるごとCSVで更新しています。 ・登録数を、このテーブル内に入れておいた方が良いのでしょうか。 参考になるようなサイトもなく、PHP+MySQL可能か不可能か、もしくはヒントだけでもお願い致します。

    • ベストアンサー
    • PHP
  • PHP+MySQLでの配列のinsert文について

    PHP+MySQLでの配列のinsert文について はじめまして。 POSTされた配列データのDB一括挿入方法で約2週間悩み中で非常に困っております。 私の配列の理解が不足しているため、初心者の私でもわかるように解決方法をご教示いただけましたら大変助かります!何卒、よろしくお願い致します。 行いたい処理といたしまして、 [index.php] CSVアップロード(名前・メアド・金額・年月日の4項目)→※解決しました。  ↓↓↓ [check.php] CSVデータをテーブルで入力されている行数分をループして表示→※解決しました。  ↓↓↓ [finish.php] check.phpで表示した配列データをPOSTで受け取りDBに登録する。→※未解決 となります。 ソースは下記のようになります。 ※index.phpは今回無関係と思うので省略します。 ━━━━ [check.php]ここから ━━━━ ・ ・ ・ <form action="finish.php" method="post"> <? while($arr = fgetcsv_reg($fp,1024)){ ?> <? //空行以外を処理 $num = count($arr); if(!$arr ==''){ // $namae = $arr[0]; //名前 $mail = $arr[1]; //メアド $money = $arr[2]; //金額 $year = $arr[3]; //年 $month_hen = $arr[4]; //月 $month = sprintf("%02d", $month_hen); //1~9月(1桁)の場合、前に0を付加する $day_hen = $arr[5];//日 $day = sprintf("%02d", $day_hen); //1~9日(1桁)の場合、前に0を付加する // ?> <input type="hidden" name="namae[]" value="<?php echo $namae ?>"> <input type="hidden" name="mail[]" value="<?php echo $mail ?>"> <input type="hidden" name="money[]" value="<?php echo $money ?>"> <input type="hidden" name="year[]" value="<?php echo $year ?>"> <input type="hidden" name="month[]" value="<?php echo $month ?>"> <input type="hidden" name="day[]" value="<?php echo $day ?>"> ・ ・ ・ <input type="submit" value="  一括登録する  " /> </form> ━━━━ [check.php]ここまで ━━━━ ━━━━ [finish.php]ここから ━━━━ ・ ・ ・ // DB登録部分開始 if ($_POST['submit']) { $arr = array( 'reg_id', //auto_increment 'user_id', //ユーザーID(セッションで保持) 'namae', //名前 'mail', //メアド 'money',//金額 'ymd'//年月日 ); $value = array( NULL, mysql_real_escape_string( $_SESSION['user_id'] ), mysql_real_escape_string( $_POST['namae'] ), mysql_real_escape_string( $_POST['mail'] ), mysql_real_escape_string( $_POST['money'] ), mysql_real_escape_string( $_POST['year'] . '-' . $_POST['month'] . '-' . $_POST['day'] ) ); // DB登録部分終了 //ループ処理開始 foreach ( $arr as $value ) { $sql = "insert into receipt_issue ( $arr ) values ( $value )"; mysql_query($sql); $result = mysql_query( $sql ) ; //ループ処理終了 } } ・ ・ ・ ━━━━ [finish.php]ここまで ━━━━ というソースなのですが、データベースに登録できません。 例えば「finish.php」内に、 print_r( $_POST['namae'] ); と記述すると、 Array ( [0] => ああ君 [1] => いい君 [2] => うう君 [3] => ええ君 ) とちゃんと配列は受けとれているようです。 そもそもDB接続ができていないということもありません。 ※配列でない場合のテストでちゃんと接続・登録できていました。 いろいろ調べた中で、$value = array内の記述方法に問題があるのか・・・ と思い、色々調べて試したのですがダメでした。。。 上記の仕組みでループさせてデータベースに登録するには、どのように記述したらよろしいでしょうか? 情報に不足がございましたら、申し訳ございません。その点ご指摘いただきましたら必要な情報を再度投稿します。 何卒、お力をお貸しいただけましたら幸いでございます。 宜しくお願い致します!

    • 締切済み
    • PHP
  • 2次元配列について

    プログラミング初心者です。先日以下の例文を問い合わせさせていただきました。 答えとして$abc[0] に $def を代入して、$abc[1] に $abcという配列([0] に $def の内容がある)が代入されると教えていただき、実際確認しました。二次元配列入れ子のようになるのは解ったのですが、 どのような場合に使うのでしょうか? ホームページなどの画面に表示するのに使ったりするのでしょうか? それともデータベースからデータを抽出して一時的に、何らかのかたちで格納 したりする場合によく使われるのでしょうか? この例文だけどこかにあったので、実際どのように使うのかイメージできません。 すみません。教えてください。 <?php $def = 'test'; $abc = array(); $abc[] = $def; $abc[] = $abc; print '<pre>'; print_r($abc); print '</pre>';

    • ベストアンサー
    • PHP
  • 配列の値の引渡し

    目的: 配列の値をフォームによりCSVに書き込みたい。 1.php 値入力 2.php 確認画面 for($i = 0;$i < count(@$_POST["q1"]); $i++){ echo "<p>" .$_POST["q1"][$i]; } として、1.phpで入力された値を表示 また、 <input type="hidden" name="q1[]" value="<? echo $q1[$i] ?>"> として、3.phpに値を引き渡すことをしているのですがうまくいきません。 3.php 完了画面 CSVに書き込み処理 アドバイスよろしくお願いします。

    • 締切済み
    • PHP
  • PHPで配列をPOSTデータで送った場合の取り出し方を教えてください。

    PHPで配列をPOSTデータで送った場合の取り出し方を教えてください。 知恵袋でも質問したのですか、使い方をよくわかっておらず、補足が追加出来なくって、回答者の方に返事が出来なくなってしまいました。申し訳ありません。 プログラム初心者です。始めたばかりで、自分で考えて知っている範囲で組もうとしているのですが、 例えば <form method="POST" action="○○○"> <input type="checkbox" name="color[]" value="赤" />赤<br /> <input type="checkbox" name="color[]" value="青" />青<br /> <input type="checkbox" name="color[]" value="緑" />緑<br /> <input type="submit" value="送信" /> とこのように書いてすべてにチェックを付けて送った配列のデータはどのように取り出したら良いのでしょうか? foreachで下記のように、 $x = $_POST['color']; foreach( $x as $value ){ echo "色 = ". $value."<br />\n"; } exit; $_POST['color']の配列を取り出そうすると Invalid argument supplied for foreach() と表示されてしまいます。 var_dumpで配列を表示させると、 string(3) "Array" と表示され確かに配列として届いていると思います。 確かにチェックはいれて送信もしています。 print "{$_POST['color']}"で表示してみると、"A"と"r"と"r"でした。 チェックボックスを10個に増やして、それぞれ$_POST['color'][0]~[9]まで 表示させてみたところ、はじめの5個はArrayも文字がいつつ表示され、残りは空白でした。 知恵袋のほうで、取り出し方が間違っているとの指摘をいただきましたが、どのように取り出したら良いのでしょうか。 どなたかお手数ですが、教えていただけないでしょうか。 よろしくお願いします。

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

    現在PHPでアンケートフォームを作成しているものです。 フォーム⇒確認画面⇒登録完了画面 と3モジュールを経由します。 配列の受け渡しで問題が発生しています。 フォーム⇒確認画面では問題なく配列の値がわたってきているのですが。 確認画面⇒登録完了画面ではわたってきません。 $a = $HTTP_POST_VARS["a"];(←配列変数:a) <input type=hidden name=a value=$a> とアンケートフォーム、確認画面両モジュールとも上記のような書き方で渡しています。 変数名を変えたりといろいろしていますが うまくいきません。 アドバイスお願いします。

    • ベストアンサー
    • PHP
  • 2次元配列の配列

    VisualBasic.NETでプログラムを作っているのですが、2次元配列の配列で行き詰って困っています。 配列1~3を別に定義して、その2次元配列を配列Xという配列にひとまとめにしたいのですが、エラーが出てしまいます。 エラー内容は「配列初期化子の次元が少なすぎます」で、場所は配列Xの第1要素です。 配列1~3以降もどんどん配列を追加していく予定なので、なるべく以下の方法で書いていきたいのですが、解決法はないでしょうか? また、他にいい方法があればご教授ください。 ソースです。 ---------------------------------------- Public 配列1(,) As Integer = _ { _ {1, 1, 1}, _ {1, 1, 1}, _ {1, 1, 1}, _ {1, 1, 1} _ } Public 配列2(,) As Integer = _ { _ {2, 2, 2}, _ {2, 2, 2}, _ {2, 2, 2}, _ {2, 2, 2} _ } Public 配列3(,) As Integer = _ { _ {3, 3, 3}, _ {3, 3, 3}, _ {3, 3, 3}, _ {3, 3, 3} _ } Public 配列X(,)() As Integer = { _ 配列1, _     ←ここにエラーが出る 配列2, _ 配列3 _ } ---------------------------------------- 回答よろしくお願いします。

  • PHP 多次元配列の次要素を返す便利関数

    PHP5を独学中の者です。 1次元や多次元配列を扱ってきて、次元数が決定されていない配列を自作関数に渡す事で、 現在のポイントの次要素を返す便利関数を考案中です。 【関数に求める利点】  ・引き渡した配列の次元数(1~n)に関わりなく、現在のポイントの次要素を返す。 【関数を使用した想定コード】   $e[0][0] = "a1";   $e[0][1] = "a2";   $e[0][2] = "a3"; // $e配列の次要素を取得 $r = 自作関数($e);  ※ 上記コードでは、現在のポイント($e[0][1])の次要素($e[0][2])を、$rに "a3" を返す   $e[0][0][0] = "a1";   $e[0][0][1] = "a2";   $e[0][0][2] = "a3"; // $e配列の次要素を取得 $r = 自作関数($e);  ※ 上記コードでは、現在のポイント($e[0][0][0])の次要素($e[0][0][1])を、$rに "a2" を返す 関数に対して引数を与えたり、色々と試行錯誤中ですが、アドバイス頂ければ嬉しいです。

    • 締切済み
    • PHP
  • 配列の要素でmysqlに問い合わせ

    フォームから送信されたデータを配列として取得し、その配列の1つの要素に対してそれぞれmysqlにselectで問い合わせてageというカラムの値を取得したいと思っています。 配列の要素の数がその都度変わるので、要素が5つある場合には5回selectでデータベースに問い合わせてデータを5つ取得したいのですが、それは可能でしょうか? ためしに下記のようにしてみたのですが、うまく取得できませんでした。 $hairetu = $_POST; for($i=0; $i< count($hairetu) ; $i++){ $sql = "SELECT * FROM member where age = '$hairetu[i]';"; $res = mysql_query($sql, $conn) or die("エラー"); $row = mysql_fetch_array($res, MYSQL_ASSOC); $age = $row["age"]; echo $age; } $ageの値をcount($hairetu)の回数分表示したいのですが、どのように処理していいのか分かりません。 また、根本的におかしな点もあると思いますがよろしくお願いします。

    • ベストアンサー
    • MySQL

専門家に質問してみよう