- ベストアンサー
フォームを通さずに2次元配列の値の受け渡しについて教えてください
お世話になります。 以前にも質問させて頂きましたが、うまくいかずもう1度質問させてください。 phpで2次元配列の値の受け渡しについて教えてください。 A.phpファイルからB.phpファイルに2次元配列の値をフォームを通さずにPOSTで渡したいと考えています。 処理上、2次元配列のままB.phpファイルに値を渡したいと考えています。 そもそもPOSTで2次元配列を送ることはできるのでしょうか? その他の方法で2次元配列のままB.phpファイルに渡すことが出来るのであれば、その方法も教えて頂きたいのですが。 たとえば [A.php] $DATA = array( array('name'=>"tanaka", 'age'=>"20"), array('name'=>"sasaki", 'age'=>"30"), ); をB.phpファイルに送るにはどうすれば良いのでしょうか? ※2次元配列のサイズは可変です。 どなたか教えて頂けないでしょうか? よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
同じ内容の質問にしか見えないので同じ回答の繰り返しになりますが 配列を文字列に変えるにはserialize、データの保守にurlencodeを 使うというのは理解いただいているのでしょうか? リンクっぽくやりたいということであればこんな風にしてみては? <? $DATA = array( array('name'=>"tanaka", 'age'=>"20"), array('name'=>"sasaki", 'age'=>"30") ); $dataStr=urlencode(serialize($DATA)); print <<<eof <html> <head> <style> .hide{ position:absolute; margin-top:-1000px; } label.link{ text-decoration:underline; color:#0000ff; } </style> </head> <body> <form action ="B.php" class="hide"> <input type="text" name="DATA" value="{$dataStr}"> <input type="submit" value="go" id="go"> </form> <label for="go" class="link">B</label> </body> eof; ?> <? $data=$_REQUEST["DATA"]; $data=unserialize(urldecode($data)); print_r($data); ?>
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
クリックなしで・・・というのが前回からひっかかっているのですが・・ なんのトリガーもなしに、AからBにデータを移すという意味が わかりません。 具体的にAでなにもしないならBにデータがいくわけがなく それは配列うんぬんいぜんに、何のパラメータも渡せないでしょ? Bに書かれた処理をするだけなら、うまくかけばBをincludeして 処理すればいいような気もしますが、どういうことですか? 補足を希望します
補足
そもそも説明不足でした。 すいませんでした。 色々調べていたら、理想とする動きを見つけました。 file_get_contents()をしようするものでした。 こんな感じのを探していました。 下記のようなコードであれば、ユーザーからのアクションはいらないですし。 親切に回答をくださってありがとうございました。 [A.php] <?php //POSTデータ //2次元配列データ $data = array( array('name'=>"tanaka", 'age'=>"20"), array('name'=>"sasaki", 'age'=>"30"), ); $data = http_build_query($data, "", "&"); //header $header = array( "Content-Type: application/x-www-form-urlencoded", "Content-Length: ".strlen($data) ); $context = array( "http" => array( "method" => "POST", "header" => implode("\r\n", $header), "content" => $data ) ); $url = "http://localhost/B.php"; echo file_get_contents($url, false, stream_context_create($context)); ?>
補足
回答ありがとうございます。 上記サンプルだと、[B]をクリックした際にB.phpファイルにパラメータ送信が行われていると思いますが、 理想は、A.phpファイルで定義した2次元配列をユーザーのクリック等をしないで、B.phpファイルに送信して、2次元配列データを使用したいと考えています。 それとurl以降のパラメータサイズに制限があると思うので、それは避けたいと考えています。