まず、下記記述の確認をお願いします。
全部記述すると膨大な量になるので一部をシンプルにして記述します。
↓input.php
追加を2回押して
計6フォームを入力したとして、
6フォーム分の値をセッションに保存して
次ページ(確認ページ)にいきます。
<?php session_start(); if(!empty($_POST)){ $_SESSION['join2'] = $_POST; header('Location: preview.php'); } ?> <script type="text/javascript"> /*スキルエリアのセレクトボックスセットのクローン*/ function skill_selectAdd(){ var get = document.getElementById("skill_select"); var set = get.cloneNode(true); var target = document.getElementById("skill_selectAdd"); var btn_delete = document.getElementById("skill_select_btnDel"); set.id= "test" + target.children.length;//idの重複を防ぐため、連番をつけておく target.parentNode.insertBefore(set, target); btn_delete.disabled = false; } /*スキルエリアのセレクトボックスセットの削除*/ function skill_selectDel(){ var targets = document.getElementsByClassName("skill_select"); var btn_delete = document.getElementById("skill_select_btnDel"); if (targets.length === 2) { btn_delete.disabled = true; } targets[1].parentNode.removeChild(targets[targets.length - 1]);//最後の要素を削除 } </script> <form action="" method="post"> <tr id="skill_select" class="skill_select"> <td> <select name="programs1_[]"> <?php echo Programmerskill::getSkill(); ?> </select> </td> <td> <select name="programs_year1_[]"> <?php echo Skillyear::getYear(); ?> </select> </td> </tr> <tr id="skill_selectAdd"> <td colspan="2"> <input type="button" value="追加" onClick="skill_selectAdd()"> <input type="button" value="削除" onClick="skill_selectDel()" id="skill_select_btnDel" disabled="true"> </td> </tr> <input type="submit" name="submit" value="プレビュー"> </form>
↓preview.php
セレクトボックスで選択した3セット分(6件)の内容が表示されます。
<?php session_start(); ?> ・ ・ ・ <form action="thanks.php" method="post"> <tr> <td> <?php $arr = $_SESSION['join2']['programs1_']; for($i=0;$i < count($arr);$i++ ) { echo h($arr[$i]).'<br />'; } ?> </td> <td> <?php $arr = $_SESSION['join2']['programs_year1']; for($i=0;$i < count($arr);$i++ ) { echo h($arr[$i]).'<br />'; } ?> </td> </tr> <input type="submit" name="submit" value="確定"> </form>
↓thanks.php
DBへ登録します。
<?php session_start(); $dsn = 'mysql:dbname=test;host=localhost;charset=utf8'; $user = 'root'; $password = ''; $option = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION); $dbh = new PDO($dsn, $user, $password, $option); $stmt = $pdo->prepare("INSERT INTO user_skill() VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); $stmt->execute([ $_SEESION['join2']['programs1_1'], $_SEESION['join2']['programs_year1_1'], $_SEESION['join2']['programs1_2'], $_SEESION['join2']['programs_year1_2'], $_SEESION['join2']['programs1_3'], $_SEESION['join2']['programs_year1_3'], $_SEESION['join2']['programs1_4'], $_SEESION['join2']['programs_year1_4'], $_SEESION['join2']['programs1_5'], $_SEESION['join2']['programs_year1_5'], $_SEESION['join2']['programs1_6'], $_SEESION['join2']['programs_year1_6'] ]); session_destroy(); ?>
execute内に記述してますが、なんか違う気がします。
preview.phpでは
$arr = $SESSION['join2']['programs1'];
としてループさせているから記述量がすくないのですが、
echo $_SEESION['jion2']['programs1_1'];
echo $_SEESION['jion2']['programs_year1_1'];
・
・
・
・
・
・
・
・
・
・
とやろうと思えばできます。
でも、追加がどれくらい押されるか分からないので
「ある分」だけを表示させています。
これはthanks.phpにも同じことがいえて、
「ある分」だけを登録するようにしたい(そうすることで記述もスマートになる?)
のですが、どうすればよろしいでしょうか?
すいません、なんかごっちゃになってきて
確認画面では確認だから「ある分」だけを表示させればいいんですが
DB登録処理はあるない関わらず、「ない分」も用意しておかないといけませんね...
というのは、ユーザーがもう一個追加を押したら確認画面には追加分も表示されるでしょうが、
DB登録処理には
$_SEESION['join2']['programs1_7'],
$_SEESION['join2']['programs_year1_7']
を追加しなくてはなりませんから
そういう意味で「ない分」も記述しておく必要がありそうですね...
素人思考だと、
「ない分」を記述しておくのは非常に気持ち悪くて
それなら、preview.phpみたいに
$arr = $SESSION['join2']['programs1'];
というふうにしてせめてスマートな記述にしたいなと思って質問してみたのですが今回は無理がありそうですかね...?
回答2件
あなたの回答
tips
プレビュー