予約システムの構築(PHP)

PHPを使った予約システムの構築についての備忘録

1. 基本設計(ざっくり概要)

予約システムは以下の機能を持つように設計

  • ユーザーが日時を選択して予約できるフォーム
  • 管理者が予約状況を確認できるページ
  • 予約データを保存するデータベース(MySQL)

2. 必要な環境

  • PHP(7.4以上推奨)
  • MySQL(MariaDBでもOK)
  • Apache または Nginx(ローカル開発ならXAMPPとか便利)
  • HTML/CSS/JavaScript(フロントエンド部分の装飾用)

3. データベース設計

テーブルは1つでシンプルにする。

CREATE TABLE reservations (
id INT AUTO_INCREMENT PRIMARY KEY,
user_name VARCHAR(255) NOT NULL,
user_email VARCHAR(255) NOT NULL,
reservation_date DATE NOT NULL,
reservation_time TIME NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

ポイント:

  • reservation_datereservation_time で日時を分けて管理。
  • created_at はいつ予約が入ったか確認できるように。

4. ユーザー側のフォーム(HTML)

予約フォームの見た目はこんな感じ:

<form action="reserve.php" method="POST">
<label for="user_name">お名前:</label>
<input type="text" id="user_name" name="user_name" required>

<label for="user_email">メールアドレス:</label>
<input type="email" id="user_email" name="user_email" required>

<label for="reservation_date">予約日:</label>
<input type="date" id="reservation_date" name="reservation_date" required>

<label for="reservation_time">予約時間:</label>
<input type="time" id="reservation_time" name="reservation_time" required>

<button type="submit">予約する</button>
</form>

5. PHPで予約データを保存(バックエンド)

reserve.php ファイルを作成して以下の処理を記述:

<?php
// データベース接続
$host = 'localhost';
$dbname = 'your_database';
$username = 'your_username';
$password = 'your_password';

try {
    $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // フォームデータを取得
    $name = $_POST['user_name'];
    $email = $_POST['user_email'];
    $date = $_POST['reservation_date'];
    $time = $_POST['reservation_time'];

    // データを挿入
    $stmt = $pdo->prepare("INSERT INTO reservations (user_name, user_email, reservation_date, reservation_time) VALUES (?, ?, ?, ?)");
    $stmt->execute([$name, $email, $date, $time]);

    echo "予約が完了しました!";

} catch (PDOException $e) {
    echo "エラー: " . $e->getMessage();
}
?>

6. 管理画面で予約状況を確認

簡易的な管理画面を作って予約状況を一覧表示する。

admin.php ファイル:

<?php
// データベース接続
$host = 'localhost';
$dbname = 'your_database';
$username = 'your_username';
$password = 'your_password';

try {
    $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // データを取得
    $stmt = $pdo->query("SELECT * FROM reservations ORDER BY reservation_date, reservation_time");
    $reservations = $stmt->fetchAll();

    echo "<h1>予約状況一覧</h1>";
    echo "<table border='1'>";
    echo "<tr><th>ID</th><th>名前</th><th>メール</th><th>日付</th><th>時間</th><th>登録日時</th></tr>";

    foreach ($reservations as $row) {
        echo "<tr>";
        echo "<td>" . htmlspecialchars($row['id']) . "</td>";
        echo "<td>" . htmlspecialchars($row['user_name']) . "</td>";
        echo "<td>" . htmlspecialchars($row['user_email']) . "</td>";
        echo "<td>" . htmlspecialchars($row['reservation_date']) . "</td>";
        echo "<td>" . htmlspecialchars($row['reservation_time']) . "</td>";
        echo "<td>" . htmlspecialchars($row['created_at']) . "</td>";
        echo "</tr>";
    }

    echo "</table>";

} catch (PDOException $e) {
    echo "エラー: " . $e->getMessage();
}
?>

7. 注意点

  • バリデーションは必須!特に日時のチェック。
  • CSRF対策も導入したほうがいい。
  • データベースの接続情報($username$password)は環境変数にするのがベスト。

最後に

あくまで最低限の機能しか持ってないので、実際に使うには、セキュリティとかUI/UXをもっと改善しないとダメだけど、自分の備忘録としては十分なので、、、
あとで「どうやってたっけ?」ってなったら、このページを見返す予定!