前提・実現したいこと
データベースから検索した結果を取得する機能をつくっています。
ページングのphp部分でlimitを5に設定していますが検索に該当するデータが全て表示されてしまいます。
検索結果の表示数を指定して、それ以降を次へのページに表示させたいのですが、
どこを直すべきなのかがわかりませんので、解決策を教えて頂きたいです。
宜しくお願い致します。
該当のソースコード
<?php //検索用 function getHostData($params){ if(!isset($params['search'])){ return[]; } $pdo = new PDO('mysql:host=localhost;dbname=mydb;charset=utf8','root','', array(PDO::ATTR_EMULATE_PREPARES => false)); $where = []; if(!empty($params['name'])){ $where[] = "name like '%{$params['name']}%'"; } if($where){ $whereSql = implode(' OR ', $where); $sql = 'select * from hosts where ' . $whereSql ; }else{ $sql = 'select * from hosts'; } $sql .= " order by post_id desc"; //SQL文を実行する $HostDataSet = $pdo->query($sql); //扱いやすい形に変える $result = []; while($row = $HostDataSet->fetch( PDO::FETCH_ASSOC )){ $result[] = $row; } return $result; } //ページング用 $p = isset($_GET['p']) ? intval($_GET['p']) : 0; $limit = 5; $v_page = $limit + 1; $offset = $p * $limit; $pdo=new PDO('mysql:host=localhost;dbname=mydb;charset=utf8','root',''); $sql=$pdo->prepare('select * from hosts order by post_id desc limit :limit offset :offset '); $sql->bindValue(":limit", $v_page, PDO::PARAM_INT); $sql->bindValue(":offset", $offset, PDO::PARAM_INT); $sql->execute(); $total_res=$sql->rowCount(); $next_num = $p+1; $prev_num = $p-1; $total_page= ceil($total_res / $limit); ?> <!DOCTYPE HTML> <html lang="ja"> <head> <meta charset="utf-8" > <title>トップページ</title> </head> <body> <h2>検索フォーム</h2> <div class="col-xs-6 col-xs-offset-3 well"> <form method="get"> <div class="form-group"> <label for="InputName">ホスト名</label> <input name="name" class="form-control" id="InputName" value="<?php echo isset($_GET['name'])? htmlspecialchars($_GET['name']) : '' ?>"> <button type="submit" class="btn btn-default" name="search">検索</button> </form> </div> <?php //検索結果表示 if(!empty($_GET)){ $hostData = getHostData($_GET);?> <div class="col-xs-6 col-xs-offset-3"> <?php if(isset($hostData) && count($hostData)): ?> <p class="alert alert-success"><?php echo count($hostData) ?>件見つかりました。</p> <table class="table"> <thead> <tr> <th>名前</th> </tr> </thead> <tbody> <?php foreach($hostData as $row){ echo '<tr>'; echo '<td>', htmlspecialchars($row['name']),'</td>'; echo '</tr>'; } ?> </tbody> </table> <?php else: ?> <p class="alert alert-danger">検索対象は見つかりませんでした。</p> <?php endif; ?> </div> <?php } ?> <br> <?php //ページング $tmp = $_GET; if($p > 0){ $tmp['p'] = $prev_num; echo '<a href="index.php?' . http_build_query($tmp) . '">前へ</a>','</td>'; } else { echo '最新'; } if($total_page-1 > $p){ $tmp['p'] = $next_num; echo '<a href="index.php?' . http_build_query($tmp) . '">次へ</a>','</td>'; } else { echo '末尾'; } ?> </body> </html>
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答3件
あなたの回答
tips
プレビュー