- ベストアンサー
複数選択した情報をそのまま次のステップに移行させる方法
PHP5.2.4を使用しています。 ちょっとPHPと直接関係があるかは分かりませんがお願いします。 選択メニューで複数選択できるようにnameをkey[]として設定して、 例えばこの場合はaとbを選択します。 送信ボタンを押して次の[form2.php]に移ったとします。 そこでprint_r($_POST['key']);とすると、 Array([0] => 'a' [1] => 'b') と表示されるのですが、この$_POST['key']をhiddenで <input type="hidden" name="key[]" value="{$_POST['key']}"> ともたせたいのですが、このやり方だと次の[form3.php]に 移ったときにはprint_r($_POST['key']);とすると Array としか表示されません(当たり前かもしれませんが・・・) これをなんとかして <input type="hidden" name="key[]" value="{$_POST['key']}"> このような持たせ方で移行させる方法はないでしょうか? つまり、 <input type="hidden" name="key1" value="{$_POST['key'][0]}"> <input type="hidden" name="key2" value="{$_POST['key'][1]}"> とはしたくないのです。 [form1.php] <select name="key[]" size="3" multiple> <option value="a">あ</option> <option value="b">い</option> <option value="c">う</option> </select> [form2.php] <input type="hidden" name="key[]" value="{$_POST['key']}">
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
あ、なんだ、そういうことだったんですね。 ケータイでセッションが使えない&バリデーションの都合で配列を 希望&hiddenが望ましいということでしたら、 以下の方法でいかがでしょうか。 <?php foreach( $_POST["key"] as $key => $value ): ?> <input type="hidden" name="key[]" value="<?php echo $value; ?>" /> <?php endforeach; ?>
その他の回答 (2)
- oka5130
- ベストアンサー率66% (35/53)
当たり前と書いておられるのでわかっていらっしゃるのかもしれませんが、 PHPとHTMLがごっちゃになってしまっているようですね。 フォームのデータを持ちまわるならセッションが便利です。
お礼
ご返答ありがとうございます。 たしかに、こういうのはセッションでまわした方がいいんでしょうけど、 携帯でも使いたくて、対応してたりしてなかったりで気持ち悪いので やっぱりhiddenでやりたいというのがあります。
- yambejp
- ベストアンサー率51% (3827/7415)
><input type="hidden" name="key1" value="{$_POST['key'][0]}"> ><input type="hidden" name="key2" value="{$_POST['key'][1]}"> >とはしたくないのです。 したくないからやらないのは勝手ですが、できないものはできません。 もっと簡単にするなら、hiddenなどではなくそのままセレクトボックスを かくし持っちゃうという手も・・・ <div style="display:none"> <select name="key[]" size="3" multiple> <option value="a" selected>あ</option> <option value="b" selected>い</option> <option value="c" selected>う</option> </select> </div> ただこれにしても、結局foreachでまわして作ったりするので あまりかわらないかと・・・
お礼
ご返答ありがとうございます。 なるほど、そういうやり方もあるんですか。 >ただこれにしても、結局foreachでまわして作ったりするので >あまりかわらないかと・・・ そうなんですが、こちらのバリデーション(データチェック)のやり方で 統一してチェックしたいというのがあって、それを崩して使うくらいなら こういうやり方を利用したいかもしれないです。
お礼
ご返答ありがとうございます。 試してみましたが、たしかにこれならループはするかもしれないんですけど、 バリデーションの都合は解決されますね。