初めまして。
phpを独学で勉強中です。
phpの投稿フォームからMySQLへ保存し、一覧で書き出したり絞り込み検索ができるシステムを構築しています。
(Wordpressのブログのイメージです。ページャー機能も付けています)
絞り込み検索の部分が上手くいっておらず、下記で記述しましたが
条件を指定していなければ、テーブル「shop」内のすべてのフィールドを表示できますが、
検索フォームで条件を指定すると何も取得されない状態になってしまいます。
→※訂正 こちら自己解決しました
※訂正
下記修正し、絞り込み検索は機能しました。
ただ、今度はページャーが上手くいっておらず、
絞り込みしていようがいまいが、データベース内のデータがすべて入っている状態のページ数になってしまいます。
こちら修正方法等おわかりになりますでしょうか。
▼MySQL
テーブル名: shop
カラム1: ID(連番)
カラム2: s_name(テキスト)
▼検索フォーム
HTML
1 <form action="search.php" method="post"> 2 <dl><dt>キーワード検索</dt> 3 <dd><input type="text" name="sea_name"></dd></dl> 4 <dl><dd><input id="send" type="submit" value="送信する"></dd></dl> 5 </form>
▼一覧表示(search.php)
php
1<?php 2$sea_name = $_POST['sea_name']; 3 4$user = 'user'; 5$pass = 'pass'; 6$dsn = 'mysql:host=localhost;dbname=db'; 7$shop = new PDO($dsn, $user, $pass); 8 9if (isset($_GET['page'])) { 10 $page = (int)$_GET['page']; 11} else { 12 $page = 1; 13} 14 15if ($page > 1) { 16 // 例:2ページ目の場合は、『(2 × 10) - 10 = 10』 17 $start = ($page * 3) - 3; 18} else { 19 $start = 0; 20} 21 22 if(!empty($sea_name)) { 23 $sea_name = addslashes($sea_name); 24 $where = "s_name REGEXP '$sea_name' &"; 25 } 26 27 if(!empty($where)) { 28 $where = substr($where, 0, -1); 29 $where = "WHERE " . $where; 30 } 31 32$posts = $shop->prepare(" 33 SELECT * 34 FROM shop 35 {$where} 36 ORDER BY id DESC 37 LIMIT {$start}, 3 38"); 39 40$posts->execute(); 41$posts = $posts->fetchAll(PDO::FETCH_ASSOC); 42?> 43 44 <p>検索条件</p> 45 <p>フリーワード:<?php echo $sea_name; ?></p> 46 <p>検索結果</p> 47 <?php 48 foreach ($posts as $post) { 49 echo " 50 <li> 51 <h3>{$post['s_name']}</h3> 52 </li> 53 " 54 ;} 55 ?> 56 </ul> 57 <?php 58 $page_num = $shop->prepare(" 59 SELECT COUNT(*) id 60 FROM shop 61 "); 62 $page_num->execute(); 63 $page_num = $page_num->fetchColumn(); 64 65 $pagination = ceil($page_num / 3); 66 67 for ($x=1; $x <= $pagination ; $x++) { ?> 68 <a href="?page=<?php echo $x ?>"><?php echo $x; ?></a> 69 <?php } // End of for ?>