例えば、会員登録ページを作ってるとします。
<form action="" method="post"> <input type="text" name="skill1"> <input type="text" name="skill2"> <input type="text" name="skill3"> <input type="text" name="skill4"> <input type="text" name="skill5"> </form>
と5つのフォームを用意している場合
<?php $_SEESION['join'] = $_POST; ?>という風にセッションに保存して
<?php echo h($_SESSION['join']['skill1']); ?> <?php echo h($_SESSION['join']['skill2']); ?> <?php echo h($_SESSION['join']['skill3']); ?> <?php echo h($_SESSION['join']['skill4']); ?> <?php echo h($_SESSION['join']['skill5']); ?>
という風に取り出せるので確認画面ページなどで使ったりできます。
しかし人によっては
スキルが2個だけかもしれないし、
スキルが10個あるかもしれません。
なので、フォームとかは動的に生成したいわけです。
<?php <style> [v-cloak] { visibility: hidden; } </style> <h1>Sample</h1> <form id="form" v-cloak action="submit.php" method="post"> <div> 言語: <div v-for="i in numbers.language"> <select name="languages[{{i}}][name]"> <option selected>選択してください▼</option> <option value="jp">日本語</option> <option value="en">英語</option> <option value="fr">フランス語</option> <option value="de">ドイツ語</option> </select> <select name="languages[{{i}}][level]"> <option selected>選択してください▼</option> <option value="3">母語並みに話せる</option> <option value="2">ビジネスで困らない程度に話せる</option> <option value="1">日常会話で困らない程度に話せる</option> </select> </div> <a @click.prevent="++numbers.language" href="">追加する</a> </div> </form> <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/1.0.20/vue.min.js"></script> <script> 'use strict'; new Vue({ el: '#form', data: { numbers: { language: 1 } } }); </script>
上記記述はまだ分かってませんが、サンプルです。
知りたいのはここからで、
先ほどは5つのフォームがあることを分かってたから
セッションから取り出すときの記述もどう書けばいいかわかりました。
<?php echo h($_SESSION['join']['skill1']); ?> <?php echo h($_SESSION['join']['skill2']); ?> <?php echo h($_SESSION['join']['skill3']); ?> <?php echo h($_SESSION['join']['skill4']); ?> <?php echo h($_SESSION['join']['skill5']); ?>
しかし今回は、動的にセレクトボックス追加してるので
nameがどれだけの数でてくるのか未知数なので分かりません。
動的にセレクトボックスを追加する機能を実装したところまではいいです。
問題はそのあとで、
2個かもしれないし、10個あるかもしれない入力内容をどうやって取り出せるのかというところです。
joinにはskill以外にも様々なname属性が2次配列として入ってるわけですが
<?php echo h($_SESSION['join']['skill1']); ?>['skill1']の部分はどうすればいいのでしょうか?
うまく言えないんですが
”もし、セッションの2次配列のname属性がskillの場合何個あるか数えてある分だけのname属性を2次配列に与える”みたいなif構文を作らないといけないんでしょうか?
【追記】
問題点は、動的に生成されたフォーム値をどうやって全部受け取るか、です。
説明下手なので上手く伝わらないかもしれませんが...
input.php <form action="" method="post"> <input type="text" name="skill[]"> <input type="text" name="skill[]"> <input type="text" name="skill[]"> <input type="text" name="skill[]"> <input type="text" name="skill[]"> </form>
check.php <?php session_start(); $arr = $_SESSION['join']['skill']; echo $arr[0]; echo $arr[1]; echo $arr[2]; echo $arr[3]; echo $arr[4]; ?>
この場合入力フォームが5個だからcheck.phpの記述もこれでいいかもしれませんが
input.phpの入力フォームはユーザーによって追加(増やすことが)できるので
入力フォームが10個だったら
check.php <?php session_start(); $arr = $_SESSION['join']['skill']; echo $arr[0]; echo $arr[1]; echo $arr[2]; echo $arr[3]; echo $arr[4]; ?>
では対応できません。
echo $arr[5];
echo $arr[6];
echo $arr[7];
echo $arr[8];
echo $arr[9];
と 追加で記述しなければ反映されません。
session_start(); $arr = $_SESSION['join']['skill']; for($i=0,$i =< $arrの個数,$i++){ echo $arr[$i] }
みたいな感じにならないと動的とはいえないと思うのですが、
書いているうちに要点が分かってきましたが
$arrの個数ってのはどうやって出したらいいんでしょか?
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/06/15 13:49 編集
2016/06/15 14:07
退会済みユーザー
2016/06/15 14:09
2016/06/15 14:36
退会済みユーザー
2016/06/15 14:38