
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で二次元にする等の方法を考えなければなりませんし・・・。
書き方も悪くとても小さい初歩的な質問かとは思いますが
何卒、宜しくお願いいたします。
No.4ベストアンサー
- 回答日時:
まずうまくいかない原因を。
最初の《1page.php》では
<?= $test[2] ?><br>
<?= $test[4] ?><br>
となっていますが、このままでは配列なので単に Array と表示されるだけで、しかもformの外にありますので何も送信されません。
それをhiddnでformに入れて送信する方法が #Ano2.mpxさんの方法です。
これで取得はできているはずですが、$testは配列なので print としてもArray と出るだけです。配列を確認するには、print_r($test); とする必要があります。
また、配列の各要素にアクセスするときの、'の位置が間違っています。
print $_POST['test[0][0]']; ではなく、
print $_POST['test'][0][0]; です。
■セッションを使用する方法:;
※セッションはアクセス中ずっと変数を保持し続けるので持ち廻るには大変便利ですが、これはこれでセッション特有のセキュリティ上の注意点がありますので、その方法等は適宜、検索して処理してください。
《1page.php》
文字やヘッダを出力する前に session_start(); とし、配列を生成したら、
$_SESSION['test'] = $test; としてセッションに保存します。
《2page.php》
使用したいページでもまず、session_start(); すれば、
print_r($_SESSION['test']);
で確認できるはずです。
もちろん配列の各要素にアクセスするには、$_SESSION['test'][0][0] 等になります。
No.3
- 回答日時:
yambejpさんの↓を最初に入れて、
$test=Array(Array(1,2,3),Array(4,5,6),Array(Array(7,8,9),Array(10,11,12)));
mpxさんのをコピペして、
2page.php を↓一行だけ書いて、
<? print_r($_POST); ?>
結果は ↓。
Array
(
[test] => Array
(
[0] => Array
(
[0] => 1
[1] => 2
[2] => 3
)
[1] => Array
(
[0] => 4
[1] => 5
[2] => 6
)
[2] => Array
(
[0] => Array
[1] => Array
)
)
[data] => test
[submit] => 次
)
ちゃんと渡されているようですよ?
(最後、三次元になってるのでArrayになりますが)
No.2
- 回答日時:
《1page.php》内のformタグ内を以下のようにして試してみてください
<form action="2page.php" method="post">
<?php
foreach($test as $k0=>$v0){
foreach($v0 as $k1=>$v1){
echo"<input type='hidden' name='test[{$k0}][{$k1}]' value='{$v1}'>\n";
}
}
?>
<input type="text" name="data"><input type="submit" name="submit" value="次">
</form>
この回答への補足
先ほど上記の記述をコピーして試してみました。
データの受け取り部分に問題があるのか分からないのですが
上手くデータが受け取れませんでした。
受け取り側の記述は
《2page.php》
$test = $_POST['test'];
や
$test = $_POST['test[0][0]'];
を試してprintにて出力してみましたが表示されず、直接
print ($_POST['test']);
や
print ($_POST['test[0][0]']);
と記述しても表示不可能でした。
記述に問題があるのでしょうか・・・(´・ω・`)
ご迷惑でなければ
ご教授頂ければ幸いです。
宜しくお願い致します。
返答有難う御座います。
まだソースを実験した訳ではありませんが
コピー貼り付けで一度動作させてみたいと思います。
もし別の方法もあるようでしたら宜しくお願い致します。
No.1
- 回答日時:
まず第一にページに埋め込んだデータは悪意あるユーザーにより改変される可能性があることを
理解しなくてはいけません。
そのうえで、なおやりたいということであれば、serialize-unserializeで文字列にしてやれば
容易に受け渡しが可能です。
<?
$test=Array(Array(1,2,3),Array(4,5,6),Array(Array(7,8,9),Array(10,11,12)));
$x=serialize($test);
print $x;
$y=unserialize($x);
print_r($y);
?>
きちんとやるならやはりsessionをつかってやることです。
コメント有難う御座います。
利用者のデータ改変は特に問題はありません。
(そこまで重要な情報をやり取りする訳では無いので。)
やり方として態々記述頂いて有難う御座います。
もし宜しければセッションを利用した方法も
参考URLでも結構ですのでご誘導頂けませんでしょうか?
宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
phpのheader("Location:#pos")...
-
フォームで戻った際に入力済み...
-
SplFileObject を利用したとき...
-
csvファイルについて教えて下さ...
-
PHP8でWarning:Undefined varia...
-
PHPSpreadsheetによる書き出し...
-
PHPの変わった閉じタグの必要性...
-
セッション関数を使わずにファ...
-
composerをインストールしたい...
-
phpの問い合わせフォームを作っ...
-
marginの値でマイナス値を設定...
-
submitで思うようにページが遷...
-
HTML PHP ラジオボタンのイベント
-
php でqiitaのサイトにあったフ...
-
PHPの勉強してます。 配列のと...
-
BASIC認証のフォームをデザイン...
-
アップロードファイルを表示す...
-
複数のパソコンの中の1つのパソ...
-
返信機能のツリー構造の深さを...
-
PHPについて。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
file_existsでファイル名の部分...
-
配列をループでたくさん宣言し...
-
PHPのカッコ[ ]の使い方について
-
String だと「 ByRef引数の型が...
-
foreachのなかで次のキーを参照...
-
$_SESSIONに二次元配列を使える...
-
PHP掲示板で新着順に表示させた...
-
チェックボックス複数選択 mys...
-
$_POSTを一括してサニタイズし...
-
Smartyでtplファイルから配列を...
-
ネストが深い時のforeachはどう...
-
配列をmysqlに保存
-
プルダウンメニューでCSVデータ...
-
postgresql関数をつかったレコ...
-
禁止ワード設定
-
sortableで並べ替えてDBに保...
-
ファイルから指定行数分だけ読...
-
配列を分解したいのですが
-
リストビュー 条件により表示
-
配列一致(要素順番は違うが内容...
おすすめ情報