前提・実現したいこと
簡易的な予約サイトを作っています。
ログインしたshopユーザーがreserveテーブルのreserve_shop_idとshopテーブルのshop_idで結びついた自分のshopの予約のみ見れるようにしたいのですが、ほかのshop_idの予約データも一緒にすべて表示されてしまいます。
教えて頂けると助かります。
よろしくお願いいたします。
shopテーブル:ショップ情報
userテーブル:ユーザー情報
reserveテーブル:予約が入る
エラー Notice: Undefined index: reserve_shop_id in C:\xampp\htdocs\reserve\shop\shop_home.php on line 20 Notice: Undefined index: count in C:\xampp\htdocs\reserve\shop\shop_home.php on line 21 Notice: Undefined index: time in C:\xampp\htdocs\reserve\shop\shop_home.php on line 22 Notice: Undefined index: reserve_comment in C:\xampp\htdocs\reserve\shop\shop_home.php on line 23 Notice: Undefined index: reserve_time in C:\xampp\htdocs\reserve\shop\shop_home.php on line 24 Notice: Undefined index: reserve_tel in C:\xampp\htdocs\reserve\shop\shop_home.php on line 25
該当のソースコード
<?php error_reporting(E_ALL); ini_set("display_errors",1); define('PAGE_LIMIT', 2); try { session_start(); $pdo = new PDO('mysql:host=localhost;dbname=reserve;charset=utf8','root','',); $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); if(!isset($_SESSION['user'])) { header("Location: shop_index.php"); } // sshop_idからshop名を取り出す $query = "SELECT * FROM shop WHERE shop_id=:shop_id"; $stmt = $pdo->prepare($query); $stmt->bindValue(':shop_id', $_SESSION['user'], PDO::PARAM_INT); $stmt->execute(); while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { $shop_name = $row['shop_name']; $shop_id = $row['shop_id']; } // reserve_shop_idと結びついたshop_idからログインしたアカウントのshop名を取り出す $reserve_query = "SELECT * FROM reserve WHERE reserve_shop_id=:shop_id"; $reserve_stmt = $pdo->prepare($reserve_query); $reserve_stmt->bindValue(':shop_id', $shop_id, PDO::PARAM_INT); $reserve_stmt->execute(); //var_dump($shop_id); ->int(4) // 予約情報の取り出し $arr_reserve = []; while ($rows = $reserve_stmt->fetchAll(PDO::FETCH_ASSOC)) { $arr_reserve[] = [ 'reserve_shop_id' => $rows['reserve_shop_id'], 'count' => $rows['count'], 'time' => $rows['time'], ]; } // リクエストパラメータの取得(ページング用) $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); $reserve_comment = filter_input(INPUT_GET, 'reserve_comment', FILTER_SANITIZE_SPECIAL_CHARS); $reserve_time = filter_input(INPUT_GET, 'reserve_time', FILTER_SANITIZE_SPECIAL_CHARS); $reserve_tel = filter_input(INPUT_GET, 'reserve_tel', FILTER_SANITIZE_SPECIAL_CHARS); // 取得開始位置 $offset = $p * PAGE_LIMIT; $sql = $pdo->prepare('select SQL_CALC_FOUND_ROWS * from reserve '.$whereSql.' order by reserve_time desc 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(); } ?> <!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> <div class="main"> <div class="container" style=""> <div class="row"> <div class="col-xl-8" style="margin-bottom:200px;"> <div class="main-left"> <?php if ( $all['total'] > 0 ) : ?> <p class="alert alert-success" style="text-align:center;">予約数<?= number_format($all['total']) ?>件</p> <table class="table table-striped"> <thead> <tr> <th>人数</th> <th>時間</th> </tr> </thead> <tbody> <?php foreach($result as $key => $value): ?> <tr> <td><?= htmlspecialchars($value['count'], ENT_QUOTES, 'UTF-8'); ?></td> <td><?= htmlspecialchars($value['time'], ENT_QUOTES, 'UTF-8'); ?></td> <tr> <?php endforeach; ?> </tbody> </table> <!-- ページネーション --> <div class="paging_left" style="float:left;"> <?php if ( $p > 0 ) : ?> <a href="shop_home.php?reserve_shop_id=<?= $value['reserve_shop_id'] ?>search=1&count=<?= $count ?>&time=<?= $time ?>&p=<?= $p-1 ?>" class="pull-left">戻る</a> <?php else : ?> <span class="pull-left" >最新</span> <?php endif; ?> </div> <div class="paging_right" style="float:right;"> <?php if ( $all['total'] - (PAGE_LIMIT * $p ) > PAGE_LIMIT ) : ?> <a href="shop_home.php?reserve_shop_id=<?= $value['reserve_shop_id'] ?>search=1&count=<?= $count ?>&time=<?= $time ?>&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> </div> <div class="col-xl-4" style=""> <div class="main-right"> <div class="container" > <div class="yesno" style="background-color:;border-radius:10px;border:1px solid black;padding:20px 0;text-align:center;"> <p style=""><?php echo htmlspecialchars($shop_name, ENT_QUOTES, 'UTF-8'); ?> ログイン中</p> <a href="shop_logout.php?logout" style="">ログアウト</a> </div> </div> </div> </div> </div> </div> </div> </body> </html>
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。