Покинул форум
Сообщений всего: 26
Дата рег-ции: Март 2015
Помог: 0 раз(а)
Доброго времени суток! Не пинайте слишком сильно)
Не давно возникла такая задача, требуется написать сайт для гостиницы.
С задачей я справился, но хотелось бы получить конструктивную критику, уверен что можно было бы как то проще сделать, если не сложно откликнитесь, не очень давно учусь php, учителей ни каких не было, поэтому хотелось бы услышать ваше мнение
Грубо говоря имеется 6 номеров и пользователь может заброниронировать себе номер, исходя из даты, он указывает дату заезда, и дату съезда, ну и соответственно мне нужно проверить какие номера свободны на эти даты. Предоставить пользователю выбор и записать его данные в БД.
создал БД с таблицами:
users - поля: id, name, surname и т.д.
oneRooms - поля: id, date1, date2, id_user, id number. (Просто предполагается что будут одно-двух-трехкомнатные номера, но пока написал для однокомнатных)
numbers - поля: id_number, adress, kvadrature, about_number (здесь просто храняться данные о каждом номере)
далее приступил к самой реализации:
функция которая проверяет попадает не пересекаются ли даты:
все работает, я рад что получилось, но так же понимаю что это "все работает" до поры до времени, потому что в теории таблица будет oneRooms будет увеличиваться и при 1-100-1000 записях будет работать все медленнее,в планах сделать, что бы скрипт сравнивал и текущюю дату с датой сьезда, и если текущая дата больше, то удалял эту запись из БД. Ну вот вроде все) жду критики
вообще непонятно зачем с начало переводить в формат 'd-m-Y', используя притом функцию strtotime($d1), а потом нигде не использовав переменные переводить опять в timestamp, первые две строчки вообще не нужны!
потом читая дальше еще увидел, что и сама функция как бы не очень и нужна, так как ее функционал можно полностью переложить в запрос к БД.
SELECT * FROM вот так вот вообще не правильно писать! вместо * возьмите за правило писать имена столбцов, которые нужны, и вообще можно, даже я бы сказал нужно было все проверки занят/свободен, дублированные номера/не дублированные, сортировку и т.д. перенести в запрос к БД, а не дергать всю базу данных, а потом фильтровать ее средствами php!
потом не понятно зачем нужны первые вот эти две строчки
в function bron_form()! вернее сказать они там вообще не нужны так как не используются потом в функции
потом не понятно зачем постоянно дергать всю БД! Раз уже и дернули всю БД, то сохранили бы ее в каком то массиве, и передавали потом удобным вам способом!
И на последок библиотека mysql давно уже устарела, и в следующей версии php будет удалена! Так что если есть желание дальше изучать этот язык, то нужно переходить с mysql на mysqli или pdo!
Xenox
Отправлено: 04 Марта, 2015 - 01:16:49
Новичок
Покинул форум
Сообщений всего: 26
Дата рег-ции: Март 2015
Помог: 0 раз(а)
Спасибо большое! Буду исправляться!
Цитата:
потом читая дальше еще увидел, что и сама функция как бы не очень и нужна, так как ее функционал можно полностью переложить в запрос к БД.
Если не сложно хотелось бы увидеть как примерно должен выглядеть такой запрос, чисто для саморазвития.
Цитата:
вообще непонятно зачем с начало переводить в формат 'd-m-Y', используя притом функцию strtotime($d1), а потом нигде не использовав переменные переводить опять в timestamp, первые две строчки вообще не нужны!
за этот ответ отдельное спасибо) только сейчас понял, раньше думал для того что бы сравнить 2 даты их нужно привести к одинаковому формату т.е. d-m-Y и только потом перевести в метку времени Unix
Покинул форум
Сообщений всего: 425
Дата рег-ции: Февр. 2015
Помог: 14 раз(а)
можно как то так, но это если date1,date2 храниться в формате date, и соответственно $_POST[date] тоже надо с начало проверить на корректность, а потом перевести в Y-m-d
INNER JOIN Numbers n ON o.id = n.id_number WHERE (o.date1<=".$_POST['date2']." AND o.date2>=".$_POST['date2'].") OR (o.date2>=".$_POST['date1']." AND o.date1<=".$_POST['date1'].") OR (o.date1>=".$_POST['date1']." AND o.date2<=".$_POST['date1'].") GROUP BY n.id_number ORDER BY "поле по какому сортировать"
и вместо того что бы создавать таблицы на каждую oneRooms, можно было сделать колонку rooms, и указывать там количество комнат!
Покинул форум
Сообщений всего: 26
Дата рег-ции: Март 2015
Помог: 0 раз(а)
Благодарствую!! Сам бы такой запрос не составил. Я просто подумал что стоит разбить на несколько таблиц, потому что если все в одной будет храниться то она будет слишком большая...
RickMan
Отправлено: 04 Марта, 2015 - 10:53:24
Участник
Покинул форум
Сообщений всего: 1033
Дата рег-ции: Май 2012
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.