- Автор темы
- #1
Здравствуйте. Пишу скрипт для бронирования номеров в гостинице.
Есть две вот такие таблицы:
allnomer, где указаны все номера. В гостинице есть 3 номера lux: 301, 302 и 303
и main, где указаны все брони
Я пытаюсь сделать скрипт, который будет проверять номера на занятость, и в случае нахождения свободного номера, выдаёт брони этот номер.
Чуть подробнее. У меня есть дата заезда и дата выезда новой брони: 2016-11-28 и 2016-11-30. Это диапазон дат. То есть 28, 29 и 30 числа в гостинице собираются жить люди. В гостинице уже забронированы два номера. Первый (301) на даты с 2016-11-29 по 2016-12-01, второй (302) на даты с 2016-12-01 по 2016-12-02. Человек не может заехать в 301 номер, так как 29 и 30 числа этот номер будет занят. У нас остаётся два номера: 302 и 303. 302 номер занят только 01 и 02. Ни одна дата не пересекается и поэтому нам 302 номер подходит. Переменная $namenomer принимает значение 302 и подставляется в скрипт.
Вот такой у меня сейчас скрипт:
Подскажите, как сделать проверку на свободность номера, чтобы, в случае хотя бы одного совпадения, проверялся следующий номер? Вероятность того, что на этом этапе не найдётся ни одного свободного номера исключена. До этого этапа уже есть скрипт, который проверяет все номера на свободность. Однако он проверяет все номера. Этот же скрипт нужен для проверки определённых номеров.
P.S. Я уже создавал похожую тему с проверкой дат, но там была немного другая проверка. Изменить ту проверку дат на эту у меня не вышло. Поэтому прошу вашей помощи.
Есть две вот такие таблицы:
allnomer, где указаны все номера. В гостинице есть 3 номера lux: 301, 302 и 303
и main, где указаны все брони
Я пытаюсь сделать скрипт, который будет проверять номера на занятость, и в случае нахождения свободного номера, выдаёт брони этот номер.
Чуть подробнее. У меня есть дата заезда и дата выезда новой брони: 2016-11-28 и 2016-11-30. Это диапазон дат. То есть 28, 29 и 30 числа в гостинице собираются жить люди. В гостинице уже забронированы два номера. Первый (301) на даты с 2016-11-29 по 2016-12-01, второй (302) на даты с 2016-12-01 по 2016-12-02. Человек не может заехать в 301 номер, так как 29 и 30 числа этот номер будет занят. У нас остаётся два номера: 302 и 303. 302 номер занят только 01 и 02. Ни одна дата не пересекается и поэтому нам 302 номер подходит. Переменная $namenomer принимает значение 302 и подставляется в скрипт.
Вот такой у меня сейчас скрипт:
PHP:
<?php
$nnomer = "lux"; // тип номера
$newdatestart = "2016-11-28"; // дата заезда
$newdateend = "2016-11-30"; // дата выезда
// Константа. Запрос в таблицу allnomer
const SQL_GET_NAME_NOMER = '
SELECT nomer FROM allnomer WHERE type = :type
';
// Константа. Запрос в таблицу main
const SQL_GET_MAIN = '
SELECT namenomer, datestart, dateend, numbernomer FROM main WHERE namenomer = :namenomer
';
// Константа. Добавление в таблицу main
const SQL_INSERT_MAIN = '
INSERT INTO main (namenomer, datestart, dateend, numbernomer) values (?, ?, ?, ?)
';
// PDO
try{
$pdo = new PDO($dsn, $user, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Запрос в allnomer
$ftmt = $pdo->prepare(SQL_GET_NAME_NOMER);
$fres = $ftmt->execute([':type' => $nnomer]);
$frow = json_encode($ftmt->fetchAll(PDO::FETCH_OBJ));
// frow сейчас равен [{"nomer":"301"},{"nomer":"302"},{"nomer":"303"}]
// Запрос в main
$stmt = $pdo->prepare(SQL_GET_MAIN);
$sres = $stmt->execute([':namenomer' => $nnomer]);
$srow = json_encode($stmt->fetchAll(PDO::FETCH_OBJ)); // row сейчас равен
// srow сейчас равен [{"namenomer":"lux","datestart":"2016-11-29","dateend":"2016-12-01","numbernomer":"301"},{"namenomer":"lux","datestart":"2016-12-01","dateend":"2016-12-02","numbernomer":"302"}]
// Вот здесь должена быть проверка ответа от main переменной $srow на совпадение диапазона дат $newdatestart и $newdateend
$numbernomer = "" // Здесь присваивается свободный номер. В нашем случае 302
// Добавление в таблицу main
$addmt = $pdo->prepare(SQL_INSERT_MAIN);
$add = $addmt->execute([$nnomer, $datestart, $dateend, $numbernomer]);
} catch (PDOExeption $e) {
exit($e->getMessage());
}
Подскажите, как сделать проверку на свободность номера, чтобы, в случае хотя бы одного совпадения, проверялся следующий номер? Вероятность того, что на этом этапе не найдётся ни одного свободного номера исключена. До этого этапа уже есть скрипт, который проверяет все номера на свободность. Однако он проверяет все номера. Этот же скрипт нужен для проверки определённых номеров.
P.S. Я уже создавал похожую тему с проверкой дат, но там была немного другая проверка. Изменить ту проверку дат на эту у меня не вышло. Поэтому прошу вашей помощи.