ただいま、アイテム一覧を表示させるサイトを稼働中です。
この度は、ページング機能を追加しようと思いましたが、inputボックスのテキストで入力したものを1件ずつ検索条件に合った分全てを表示させるシステムを組み込んでいますが、2ページ目以降がどうしても全件表示になってしまい、できそうにありません。
どのようにすれば、inputボックスのテキストで入力したものを1件ずつ2ページ目以降も正常に表示されるのでしょうか?
お知恵を貸してください。
php
1//データベースの接続処理のPHPファイルを読み込む 2require('test/connecttest.php'); 3 4//5件ずつブラウザに表示させる 5define('COMMENTS_PER_PAGE', 5); 6 7 8 9try { 10 $dbh = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset=utf8', DB_USER, DB_PASSWORD); 11 $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 12 13} catch (PDOException $e) { 14 echo $e->getMessage(); 15 exit; 16} 17 18//ページ 19if (filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT) > 0) { 20 $page=filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT,["options"=>["default"=>1,"min_range"=>1]]); 21 //var_dump($page); 22} else { 23 $page = 1; 24} 25var_dump($page); 26 27$offset=(int)COMMENTS_PER_PAGE *($page-1); 28//var_dump($offset); 29 30 31$arrParams = []; 32$sql = "select * from items "; 33 34if (filter_input(INPUT_POST, 'itemName') != '') { 35 $sql .= "WHERE item LIKE :item "; 36 $arrParams[':item'] = "%" . addcslashes(filter_input(INPUT_POST, 'itemName') , '\_%') . "%"; 37} 38 39 40// 検索条件で行を返す 41$limit = sprintf("limit %d, %d", $offset, COMMENTS_PER_PAGE); 42$stmt = $dbh->prepare($sql . $limit); 43$stmt->execute($arrParams); 44var_dump($arrParams); 45// 同じ検索条件で全件数を返す 46//var_dump($sql); 47$total_sql = "select count(*) as total from items"; 48$row_total = $dbh->query($total_sql)->fetch(); 49$total = $row_total['total']; 50var_dump($total_sql); 51 52$totalPages = ceil($total / COMMENTS_PER_PAGE); 53var_dump($totalPages); 54 55?>
html
1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="utf-8"> 5 <title>コメント一覧</title> 6</head> 7<body> 8<h1>コメント一覧</h1> 9<form method="post"> 10<input type="text" name="itemName"> 11<input type="submit" name="search" value="検索"> 12</form> 13<ul> 14 15 <?php while($result = $stmt->fetch(PDO::FETCH_ASSOC)) : ?> 16 <li><?php echo htmlspecialchars($result['item'],ENT_QUOTES,'UTF-8'); ?></li> 17 <?php endwhile; ?> 18 19</ul> 20<!--何故かここから先がブラウザに表示されなくなりました --> 21<?php if($page >1): ?> 22<a href="?page=<?php echo $page-1; ?>">前へ</a> 23<?php endif; ?> 24<?php for ($i = 1; $i <= $totalPages; $i++) :?> 25 <a href="?page=<?php echo $i; ?>"><?php echo[リンク内容](https://i.gyazo.com/885ea7a761f12306bea8ddf392e56d44.gif) $i ?></a> 26<?php endfor; ?> 27<?php if($page < $totalPages): ?> 28<a href="?page=<?php echo $page+1; ?>">次へ</a> 29<?php endif; ?> 30</body> 31
$total_sql文にas totalを追加しました。
追加したことにより、全体表示のページリンクが回復できました。
実行結果
こちらからお願いします
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/04/11 16:38
退会済みユーザー
2018/04/11 16:41
退会済みユーザー
2018/04/11 16:43 編集
2018/04/12 00:19
退会済みユーザー
2018/04/12 00:20 編集
2018/04/12 00:38
2018/04/12 00:51
2018/04/12 01:56
2018/04/12 02:09
2018/04/12 11:51
2018/04/13 00:01