アプリ版:「スタンプのみでお礼する」機能のリリースについて

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で二次元にする等の方法を考えなければなりませんし・・・。

書き方も悪くとても小さい初歩的な質問かとは思いますが
何卒、宜しくお願いいたします。

A 回答 (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] 等になります。
    • good
    • 0

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になりますが)
    • good
    • 0

《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]']);
と記述しても表示不可能でした。

記述に問題があるのでしょうか・・・(´・ω・`)

ご迷惑でなければ
ご教授頂ければ幸いです。

宜しくお願い致します。

補足日時:2010/06/18 03:34
    • good
    • 0
この回答へのお礼

返答有難う御座います。
まだソースを実験した訳ではありませんが
コピー貼り付けで一度動作させてみたいと思います。

もし別の方法もあるようでしたら宜しくお願い致します。

お礼日時:2010/06/18 03:15

まず第一にページに埋め込んだデータは悪意あるユーザーにより改変される可能性があることを


理解しなくてはいけません。

そのうえで、なおやりたいということであれば、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をつかってやることです。
    • good
    • 0
この回答へのお礼

コメント有難う御座います。
利用者のデータ改変は特に問題はありません。
(そこまで重要な情報をやり取りする訳では無いので。)
やり方として態々記述頂いて有難う御座います。
もし宜しければセッションを利用した方法も
参考URLでも結構ですのでご誘導頂けませんでしょうか?

宜しくお願い致します。

お礼日時:2010/06/18 03:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!