前提・実現したいこと
会員機能付きの予約サイトを作っています。
ページング機能をつけたいのですが、ページング用のリクエストパラメーターがNULLになってしまいます。
原因がわからず現状、登録店舗がすべて1ページに表示されています。
これを10ページずつ表示させたいです。
宜しくお願い致します。
userレコード ユーザーの登録情報
shopレコード 登録店舗情報
該当のソースコード
php <?php error_reporting(E_ALL); ini_set("display_errors",1); define('PAGE_LIMIT', 10); session_start(); session_regenerate_id(true); if(!isset($_SESSION["user"])) { header("Location: login.php"); } try { //db接続済み // ①ユーザーIDからユーザー名を取り出す $query = "SELECT * FROM users WHERE user_id=:user_id"; $user_stmt = $pdo->prepare($query); $user_stmt->bindValue(':user_id', $_SESSION['user'], PDO::PARAM_INT); $user_stmt->execute(); var_dump($_SESSION['user']);//int(1) $user_stmt->fetch(PDO::FETCH_ASSOC); $user_id = $_SESSION['user']; // ②ショップ情報取り出し $shop_query = "SELECT * FROM shop"; $shop_stmt = $pdo->query($shop_query); $row = []; $arr_shop = []; while ($row = $shop_stmt->fetch(PDO::FETCH_ASSOC)) { $arr_shop[] = [ 'shop_id' => $row['shop_id'], 'shop_name' => $row['shop_name'], ]; } // リクエストパラメータの取得 $search = filter_input(INPUT_GET, 'search'); $p = !is_numeric(filter_input(INPUT_GET, 'p')) ? 0 : filter_input(INPUT_GET, 'p'); $name = filter_input(INPUT_GET, 'name', FILTER_SANITIZE_SPECIAL_CHARS); $shop_id = filter_input(INPUT_GET, 'shop_id', FILTER_SANITIZE_SPECIAL_CHARS); var_dump($name);//NULLになってしまう // 取得開始位置 $offset = $p * PAGE_LIMIT; $sql = $pdo->prepare('select SQL_CALC_FOUND_ROWS * from shop limit :limit offset :offset'); $sql->bindValue(":offset", $offset, PDO::PARAM_INT); $sql->bindValue(":limit", PAGE_LIMIT, PDO::PARAM_INT); $sql->execute(); // Total件数 $totalRow = $pdo->query("SELECT FOUND_ROWS() as total"); $all = $totalRow->fetch(PDO::FETCH_ASSOC); } catch (PDOException $e) { var_dump($e); die(); } ?>
html <!DOCTYPE HTML> <html lang="ja"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>ユーザートップ</title> </head> <body> <main> <div class="reserve" > <?php if ( $all['total'] > 0 ) : ?> <p class="alert alert-success" style="text-align:center;">登録店舗数<?=htmlspecialchars($all['total']); ?>件</p> <thead> <tr> <th>店舗名</th> </tr> </thead> <tbody> <?php foreach($arr_shop as $key => $value) : ?> <tr> <th><?php echo htmlspecialchars($value['shop_name']);?></th> <?php endforeach; ?> </tbody> </table> <!-- ページネーション --> <div class="paging_left" > <?php if ( $p > 0 ) : ?> <a href="home.php?shop_id=<?= $value['shop_id'] ?>search=1&name=<?= $name ?>&shop_id=<?= $shop_id ?>&p=<?= $p-1 ?>" class="pull-left">戻る</a> <?php else : ?> <span class="pull-left" >最新</span> <?php endif; ?> </div> <div class="paging_right" > <?php if ( $all['total'] - (PAGE_LIMIT * $p ) > PAGE_LIMIT ) : ?> <a href="home.php?shop_id=<?= $value['shop_id'] ?>search=1&name=<?= $name ?>&shop_id=<?= $shop_id ?>&p=<?= $p+1 ?>" class="pull-right">次へ</a> <?php else : ?> <span class="pull-right" >末尾</span> <?php endif; ?> </div> <?php else : ?> <p class="alert alert-danger">予約はまだありません</p> <?php endif; ?> </div> </main> </body> </html>
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。