制作しているサイトの概要
以下の画像のようなサイトを制作しています。
入力フォームが複数あり、入力した情報を配列で確認画面に渡し、whileでループさせ表示しています。
実現したいこと、困っていること
$_POSTで受け取った配列を、確認画面で「購入者順」「名前順」にソートできるようにしたいです。
しかし、whileで一つ一つ表示したりDBに照合しているため
sqlの「ORFER BY」でソートするような方法が取れず困っています。
試したこと
(1)ソート用のセレクトボックスを選択すると$_POSTが確認画面(今いる画面)に送る。
(2)そのvalueの値によってif文でsqlの内容を書き換える。
しかし、上で書いたようにwhileで一つ一つ表示させているため、ソートでまとめて並び替える方法が
分かりません。
コード
h()はhtmlspecialcharsを実行する関数です。
オーダー画面
PHP
1 2<!--オーダー画面--> 3<form method="post" action="order_confirmation.php"> 4 <input type="submit" value="オーダー内容を確認する"> 5 <table border="1"> 6 <tr><th></th><th>購入者</th><th>商品</th><th>個数</th></tr> 7 <?php 8 //データを全て配列で取得 9 $array_number = 0; 10 $number = 1; 11 while($number<=15) : 12 ?> 13 <tr> 14 <td><?php echo $number ?></td> 15 <td> 16 <select name="person_code[<?php echo $array_number ?>]"> 17 <option value="">選択してください</option> 18 <option value="1">購入者1</option> 19 <option value="2">購入者2</option> 20 </select> 21 </td> 22 <td> 23 <select name="item_code[<?php echo $array_number ?>]"> 24 <option value="">選択してください</option> 25 <option value="1">商品名1</option> 26 <option value="2">商品名2</option> 27 </select> 28 </td> 29 </tr> 30 <?php 31 $number++; 32 $array_number++; 33 ?> 34 <?php endwhile; ?> 35 </table> 36</form> 37
確認画面
PHP
1<?php 2 3$person_code = $_POST['person_code']; 4$filter_person_code = count(array_filter($person_code)); 5$item_code = $_POST['item_code']; 6 7$count_number = 0; 8 9$p_sql = "SELECT person_name,person_code FROM person_data WHERE person_code = :person_code"; 10$i_sql = "SELECT item_name,item_code FROM item_data WHERE item_code = :item_code"; 11 12//こちらはソートのテスト 13$sort = null; 14if(isset($_POST['sort'])){ 15 $sort = $_POST['sort']; 16} 17if($sort == 'n'){ 18 echo '名前順にソート'; 19}elseif($sort == 'i'){ 20 echo '商品名順にソート'; 21 $i_sql = "SELECT item_name,item_code,price FROM item_data WHERE item_code = :item_code ORDER BY item_name DESC"; 22} 23 24?> 25 26<section class="common_wrapper"> 27 <h1>オーダー確認ページ</h1> 28 <div class="data_list_wrapper"> 29 <form method="post" action="order_confirmation.php" onchange="submit(this.form)"> 30 <select class="select_box" name="sort"> 31 <option value="n">名前順にソート</option> 32 <option value="i">商品名順にソート</option> 33 </select> 34 <?php while($count_number <= $filter_person_code) : ?> 35 <input type="hidden" name="person_code[]" value="<?php echo $person_code[$count_number] ?>"> 36 <input type="hidden" name="item_code[]" value="<?php echo $item_code[$count_number] ?>"> 37 <?php $count_number++; ?> 38 <?php endwhile; ?> 39 </form> 40 //$count_numberを初期化 41 <?php $count_number = 0; ?> 42 43 <table border="1" class="order_confirmation"> 44 <tr><th>購入者</th><th>商品</th><th>個数</th><th>金額</th></tr> 45 <?php while($count_number <= $filter_person_code) : ?> 46 <?php 47 $pdo = new pdo(DSN,DB_USER,DB_PASS); 48 //入居者データ 49 $p_data = $pdo->prepare($p_sql); 50 $p_data->bindParam(":person_code", $person_code[$count_number]); 51 $p_data->execute(); 52 $p_rows = $p_data->fetchAll(PDO::FETCH_ASSOC); 53 54 $i_data = $pdo->prepare($i_sql); 55 $i_data->bindParam(":item_code", $item_code[$count_number]); 56 $i_data->execute(); 57 $i_rows = $i_data->fetchAll(PDO::FETCH_ASSOC); 58 $pdo = ''; 59 ?> 60 <tr> 61 <td> 62 <?php 63 foreach($p_rows as $p) : 64 echo h(sprintf("%03d", $p['person_code'])) . ':' . h($p['person_name']); 65 endforeach; 66 ?> 67 </td> 68 <td> 69 <?php foreach($i_rows as $i) : 70 $item_name = $i['item_name']; 71 echo h($item_name); 72 endforeach; ?> 73 </td> 74 </tr> 75 <?php $count_number++; ?> 76 <?php endwhile; ?> 77 </table> 78 </div><!--/.data_list_wrapper --> 79 </section><!--/.common_wrapper --> 80
ご回答頂けると嬉しいです。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー