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_dateとreservation_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をもっと改善しないとダメだけど、自分の備忘録としては十分なので、、、
あとで「どうやってたっけ?」ってなったら、このページを見返す予定!
