前提・実現したいこと
データベースから検索に該当したデータを取得する機能をつくってます。
検索からデータの取得はでき、次にページング機能を追加したいのですが上手くいきません。
検索結果のlimitを10とし、検索結果が15個ヒットし1ページ目は10個取得できているのですが、次へを押すと"検索対象は見つかりませんでした。"がでてしまいます。
問題個所の選定ができていないのですが、HTML内の結果表示の部分が間違えている気がします。
宜しくお願い致します。
該当のソースコード
<?php //--------------①検索用ここから------------------> function getHostData($params){ if(!isset($params['search'])){ return[]; } try{ $pdo = new PDO('mysql:host=localhost;dbname=mydb;charset=utf8','root','', array(PDO::ATTR_EMULATE_PREPARES => false)); } catch (PDOException $e) { exit(); } 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 = 10; $v_page = $limit + 1; $offset = $p * $limit; $pdo=new PDO('mysql:host=localhost;dbname=myhostlog_db;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(); $hostData=[]; //---------------②ページング用ここまで------------- ?> <!DOCTYPE HTML> <html lang="ja"> <head> <meta charset="utf-8" > <title>トップページ</title> </head> <body> <!-------------検索欄ここから---------------------> <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']) : '' ?>"> </div> <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 while ($row = $sql -> fetch(PDO::FETCH_ASSOC)){ 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 //----ページング用ここから------ $pdo=new PDO('mysql:host=localhost;dbname=mydb;charset=utf8','root',''); $sql=$pdo->query('select * from hosts'); $total_res=$sql->rowCount(); $next_num = $p+1; $prev_num = $p-1; $total_page= ceil($total_res / $limit); if($p > 0){ echo '<a href="2.php?p=', $prev_num, '">前へ</a>','</td>'; } else { echo '最新'; } if($total_page-1 > $p){ echo '<a href="2.php?p=', $next_num, '">次へ</a>','</td>'; } else { echo '末尾'; } //----ページング用ここまで------ ?> </body> </html>
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。