сразу к сути:
есть скрипт для резервирования столиков
в нем можно выбрать на какое время будет заказан стол
если мы допустим выбираем с 12:00 До 14:00 все работает стол заказывается
но если следом другой пользователь заказывает тот же стол с 12:30 до 14:00 то стол заказывается второй раз. А так нельзя=)))
вот скрипт:
<?php
if (is_loged()) {
$result = mysql_query("SELECT * FROM stols WHERE stol='".@mysql_escape_string($_REQUEST["id"])."' ")
or die ("Error: ".mysql_error());
$show=mysql_fetch_array($result);
$data = "". $_POST["year"] ."-". $_POST["month"] ."-". $_POST["day"] ." ". $_POST["hours"] .":". $_POST["min"] .":00";
$data2 = "". $_POST["year"] ."-". $_POST["month"] ."-". $_POST["day"] ." ". $_POST["hour"] .":". $_POST["mi"].":00";
?>
<form method="post">
Столик №<?
echo $show[stol];?><br>
забронировать столик с
<select NAME="hours"><option selected> <? echo date("H");?> </option>
<option value=00> 00 </option><option value=01> 01 </option><option value=02> 02 </option><option value=03> 03 </option>
<option value=04> 04 </option><option value=05> 05 </option><option value=06> 06 </option><option value=07> 07 </option>
<option value=08> 08 </option><option value=09> 09 </option><option value=10> 10 </option><option value=11> 11 </option>
<option value=12> 12 </option><option value=13> 13 </option><option value=14> 14 </option><option value=15> 15 </option>
<option value=16> 16 </option><option value=17> 17 </option><option value=18> 18 </option><option value=19> 19 </option>
<option value=20> 20 </option><option value=21> 21 </option><option value=22> 22 </option><option value=23> 23 </option>
</select>
<select NAME="min">
<option value=00> 00 </option><option value=15> 15 </option><option value=30> 30 </option><option value=45> 45 </option>
</select><br>
<select NAME="year"><option selected> <? echo date("Y");?> </option>
<option value=2010> 2010 </option><option value=2011> 2011 </option><option value=2012> 2012 </option>
<option value=2013> 2013 </option><option value=2014> 2014 </option><option value=2015> 2015 </option>
</select>
<select NAME="month"><option selected> <? echo date("m");?> </option>
<option value=01> January </option><option value=02> February </option><option value=03> March </option>
<option value=04> April </option><option value=05> May </option><option value=06> June </option>
<option value=07> July </option><option value=08> August </option><option value=09> September </option>
<option value=10> October </option><option value=11> November </option><option value=12> December </option>
</select>
<select NAME="day"><option selected> <? echo date("d");?> </option>
<option value=00> 00 </option><option value=01> 01 </option><option value=02> 02 </option><option value=03> 03 </option>
<option value=04> 04 </option><option value=05> 05 </option><option value=06> 06 </option><option value=07> 07 </option>
<option value=08> 08 </option><option value=09> 09 </option><option value=10> 10 </option><option value=11> 11 </option>
<option value=12> 12 </option><option value=13> 13 </option><option value=14> 14 </option><option value=15> 15 </option>
<option value=16> 16 </option><option value=17> 17 </option><option value=18> 18 </option><option value=19> 19 </option>
<option value=20> 20 </option><option value=21> 21 </option><option value=22> 22 </option><option value=23> 23 </option>
<option value=24> 24 </option><option value=25> 25 </option><option value=26> 26 </option><option value=27> 27 </option>
<option value=28> 28 </option><option value=29> 29 </option><option value=30> 30 </option><option value=31> 31 </option>
</select>
<br>
до
<select NAME="hour"><option selected> <? echo date("H");?> </option>
<option value=00> 00 </option><option value=01> 01 </option><option value=02> 02 </option><option value=03> 03 </option>
<option value=04> 04 </option><option value=05> 05 </option><option value=06> 06 </option><option value=07> 07 </option>
<option value=08> 08 </option><option value=09> 09 </option><option value=10> 10 </option><option value=11> 11 </option>
<option value=12> 12 </option><option value=13> 13 </option><option value=14> 14 </option><option value=15> 15 </option>
<option value=16> 16 </option><option value=17> 17 </option><option value=18> 18 </option><option value=19> 19 </option>
<option value=20> 20 </option><option value=21> 21 </option><option value=22> 22 </option><option value=23> 23 </option>
</select> час(а) и
<select NAME="mi">
<option value=00> 00 </option><option value=15> 15 </option><option value=30> 30 </option><option value=45> 45 </option>
</select> минут <br>
<p><input type='hidden' value='0' name='add'><input type="submit" value="Забронировать"></p>
</form>
<?
if (isset($_POST['add']))
{
if (($data >= $show['data_up']) && ($data < $show['data_down']) && ($data2 >= $show['data_up']) && ($data2 < $show['data_down']))
{echo "<script>alert('Столик занят, выберите другое время.');</script>";}
else
{
mysql_query("INSERT INTO stols (stol, login, data_up, data_down) VALUES ('".$show[stol]."', '".$_SESSION['login']."', '".$data."', '".$data2."')");
echo '<meta http-equiv="refresh" content="0;index.php?a=stol&id='.$show[stol].'">';
echo "<script>alert('Столик забронирован.');</script>";
}
}
} else {
echo '<meta http-equiv="refresh" content="0;index.php?v=stol>';
echo "<script>alert('Для того чтобы заказать столик, нужно сначало авторизоватся\зарегистрироватся.');</script>";
}
?>
как быть?
Спустя 28 минут, 31 секунда (12.06.2010 - 03:05) FatCat написал(а):
Лочить скрипт на одного пользователя?
При запуске первым пользователем создается файл контроля, который удаляется в конце работы скрипта. Если во время работы одного пользователя входит второй, скрипт видит наличие лок-файла, и отвергает второго пользователя.
При запуске первым пользователем создается файл контроля, который удаляется в конце работы скрипта. Если во время работы одного пользователя входит второй, скрипт видит наличие лок-файла, и отвергает второго пользователя.
Спустя 27 минут, 51 секунда (12.06.2010 - 03:33) KaFe написал(а):
Цитата |
<option value=00> 00 </option><option value=01> 01 </option><option value=02> 02 </option><option value=03> 03 </option> <option value=04> 04 </option><option value=05> 05 </option><option value=06> 06 </option><option value=07> 07 </option> <option value=08> 08 </option><option value=09> 09 </option><option value=10> 10 </option><option value=11> 11 </option> <option value=12> 12 </option><option value=13> 13 </option><option value=14> 14 </option><option value=15> 15 </option> <option value=16> 16 </option><option value=17> 17 </option><option value=18> 18 </option><option value=19> 19 </option> <option value=20> 20 </option><option value=21> 21 </option><option value=22> 22 </option><option value=23> 23 </option> |
замените циклом а то как то даже смешно
Спустя 1 минута, 38 секунд (12.06.2010 - 03:34) Remka написал(а):
так не в этом дело
допустим я зарезервировал стол с 12 до 14
вышел с сайта
потом зашел другой человек и зарезервировал с 12:30 до 14:00
как сделать так чтобы если я зарезервировал с 12 до 14 в промежуток нельзябыло резервировать?
допустим я зарезервировал стол с 12 до 14
вышел с сайта
потом зашел другой человек и зарезервировал с 12:30 до 14:00
как сделать так чтобы если я зарезервировал с 12 до 14 в промежуток нельзябыло резервировать?
Спустя 1 минута, 31 секунда (12.06.2010 - 03:36) Remka написал(а):
Цитата (KaFe @ 12.06.2010 - 00:33) | ||
замените циклом а то как то даже смешно |
весь html это временно.
Спустя 4 часа, 56 минут, 2 секунды (12.06.2010 - 08:32) NoCash написал(а):
а что разве нельзя выдернуть записи из базы с условием на день и время и сделать проверку занято оно или нет?
Спустя 3 часа, 10 минут, 14 секунд (12.06.2010 - 11:42) Remka написал(а):
Цитата (NoCash @ 12.06.2010 - 05:32) |
а что разве нельзя выдернуть записи из базы с условием на день и время и сделать проверку занято оно или нет? |
Так вот именно это я и не могу сделать!
Я незнаю как и пришел сюда за помощью.
проверку то я привяжу но вот чтобы он проверял именно время не просто 12:00 и 14:00 а с12:00 до 14:00
Я не могу понять как делать именно эту проверку
Спустя 1 минута, 39 секунд (12.06.2010 - 11:44) Basili4 написал(а):
NoCash
Нетак все просто. Вот смотри если один чел занял с 12 до 14 а другой пытается знаять с 13 до 13.30 то каким условием можно проверить вхожднние периода от 13.00 до 13.00 в периоды укзаные в таблице.
Нетак все просто. Вот смотри если один чел занял с 12 до 14 а другой пытается знаять с 13 до 13.30 то каким условием можно проверить вхожднние периода от 13.00 до 13.00 в периоды укзаные в таблице.
Спустя 2 дня, 11 минут, 5 секунд (14.06.2010 - 11:55) Basili4 написал(а):
Всю ночь думал и придумал. если есть начало времени резервирования столиков и конец
условие для отбора будет следующим
startTime<=newStartTime and endTime>=newEndTime and desk=newdesk , где startTime поле в таблице начала резервирования стола newStartTime время на которое пытаешся зарегистировать стол (endTime,newEndTime) тоже самое только с концом времени регистрации
desk зарезервированый стол newdesk - стол который хотят резервировать если результатом запроса будет запись значит стол занят если null значит свободен на это время
условие для отбора будет следующим
startTime<=newStartTime and endTime>=newEndTime and desk=newdesk , где startTime поле в таблице начала резервирования стола newStartTime время на которое пытаешся зарегистировать стол (endTime,newEndTime) тоже самое только с концом времени регистрации
desk зарезервированый стол newdesk - стол который хотят резервировать если результатом запроса будет запись значит стол занят если null значит свободен на это время
Спустя 12 часов, 41 минута, 21 секунда (15.06.2010 - 00:36) Remka написал(а):
Цитата (Basili4 @ 14.06.2010 - 08:55) |
Всю ночь думал и придумал. если есть начало времени резервирования столиков и конец условие для отбора будет следующим startTime<=newStartTime and endTime>=newEndTime and desk=newdesk , где startTime поле в таблице начала резервирования стола newStartTime время на которое пытаешся зарегистировать стол (endTime,newEndTime) тоже самое только с концом времени регистрации desk зарезервированый стол newdesk - стол который хотят резервировать если результатом запроса будет запись значит стол занят если null значит свободен на это время |
ну смотри стоилк уже заказан допустим тобой с 21.00 до 22.00 а я пытаюсь заказать с 18.00 до 20.00
endTime>=newEndTime
22.00 >= 20.00 - итог пашол на..

незнаю уже что придумать
может форму которая будет выдовать время только то каторое еще не задействованно?
Спустя 10 минут, 56 секунд (15.06.2010 - 00:47) Ice написал(а):
if( newEndTime > startTime ) { //error }
Так ж надо, не?
Так ж надо, не?
Спустя 5 часов, 37 минут, 41 секунда (15.06.2010 - 06:25) Remka написал(а):
ок
думал опять пол ночи
что если сделать что то на подобии алогритма
допустим
если
startTime > newStartTime = правда
то идем дальше
если startTime > newEndTime = правда
то пишем в базу
также
если startTime > newStartTime = не правда
то проверяем дальше
если startTime < newStartTime = правда
то идм дальше
если EndTime > newStartTime = правда
то увы досвиданья!
Подскажите не геморно ли делать такой алгаритм
и как собственно легче было бы его сделать?
думал опять пол ночи
что если сделать что то на подобии алогритма
допустим
если
startTime > newStartTime = правда
то идем дальше
если startTime > newEndTime = правда
то пишем в базу
также
если startTime > newStartTime = не правда
то проверяем дальше
если startTime < newStartTime = правда
то идм дальше
если EndTime > newStartTime = правда
то увы досвиданья!
Подскажите не геморно ли делать такой алгаритм
и как собственно легче было бы его сделать?
Спустя 3 часа, 28 минут, 49 секунд (15.06.2010 - 09:54) tomash написал(а):
А если такое условие:
(newStartTime > startTime AND newStartTime < EndTime) OR
(newEndTime > startTime AND newEndTime < EndTime) OR
(newStartTime < startTime AND newEndTime > EndTime)
Если не выполняеться можно бронировать!
(newStartTime > startTime AND newStartTime < EndTime) OR
(newEndTime > startTime AND newEndTime < EndTime) OR
(newStartTime < startTime AND newEndTime > EndTime)
Если не выполняеться можно бронировать!
Спустя 10 часов, 55 минут, 48 секунд (15.06.2010 - 20:49) Remka написал(а):
<?php
echo '
<form method="post" action="index.php" onsubmit="return checkform(this)">
<table width="700px">
<tr>
<td width="300px">Начало резервирования</td>
<td width="400px"><input size="29" type="text" name="StartTime">StartTime</td>
</tr>
<tr>
<td width="300px">Конец резервирования</td>
<td width="400px"><input size="29" type="text" name="EndTime">EndTime</td>
</tr>
<tr>
<td width="300px">Начало нового резервирования</td>
<td width="400px"><input size="29" type="text" name="NewStartTime">NewStartTime</td>
</tr>
<tr>
<td width="300px">Конец нового резервирования</td>
<td width="400px"><input size="29" type="text" name="NewEndTime">NewEndTime</td>
</tr>
</table>
<input type="submit" value="Расчитать ">
</form><hr>
';
echo 'StartTime '. ($_POST["StartTime"]) .' <br>
EndTime '. ($_POST["EndTime"]) .' <br>
NewStartTime '. ($_POST["NewStartTime"]) .'<br>
NewEndTime '. ($_POST["NewEndTime"]) .'<br><hr>
';
$a = ($_POST["StartTime"]);
$b = ($_POST["EndTime"]);
$c = ($_POST["NewStartTime"]);
$d = ($_POST["NewEndTime"]);
echo '$a = ';
echo $a;
echo '<br>$b = ';
echo $b;
echo '<br>$c = ';
echo $c;
echo '<br>$d = ';
echo $d;
echo '<hr>';
if($c < $d)
{
echo '<b><font color="#cc0000">Первый алгоритм</font></b><br>$c < $d <b>Верно</b>';}
else{
echo '<br>$c < $d <b>Не верно</b>';
}
if($c < $a)
{
echo '<br>$c < $a <b>Верно</b>';}
else{
echo '<br>$c < $a <b>Не верно</b>';
}
if($d <= $a)
{
echo '<br>$d <= $a <b>Верно</b>';}
else{
echo '<br>$d <= $a <b>Не верно</b>';
}
echo '<br><br><font color="#cc0000">Если есть хотябы одно значение False то переходим ко второй проверке если все значения True то открываем резервирование</font><br>';
if($с < $d)
{
echo '<br><b><font color="#cc0000">Второй алгоритм</font></b><br>$с < $d <b>Верно</b>';}
else{
echo '<br><br>$с < $d <b>Не верно</b>';
}
if($c >= $b)
{
echo '<br>$с < $d <b>Верно</b><br><br>';}
else{
echo '<br>$c >= $b <b>Не верно</b><br><br><hr>';
}
if($c < $d)
{
if($c < $a && $d <= $a)
echo 'Резерв находится до предыдущего резерва';
elseif($с < $d && $c >= $b)
echo 'Резерв находится после предидущего резерва';
else
echo 'В резервировании столика отказанно!';
}
?>
Вот если вот так сделанно
нормально?
Прошу понять меня и помоч
Я всего лиш учусь PHP и многих вещей пока что не в силах понять
Помогите сделать ту же самую проверку
только чтобы он брал масив из базы
с номером столика на выбранный день
допустим в базе
id StartTime EndTime StolId Date User
и надо сделать чтобы скрипт при проверке
брал выбранную дату
после чего брал выбранный столик и выводил масив из базы
заказанных столиков на выбранную дату и выбранный номер стола
после чего по порядку проверял данным способом каждый столик
Буду очень благодарен!!!
после чего выложу готовый скрипт может кому еще понадобится
Спустя 46 минут, 6 секунд (15.06.2010 - 21:35) tomash написал(а):
Много проверок! Оптимизировать срочно! Я выше написал условие вроде должно работать!
где-то так!
$res = mysql_query("SELECT * FROM table WHERE Date = ".$date." AND StolID = ".$stolid) OR die(mysql_error);
while ($row_stol = mysql_fetch_assoc($res))
{
$new_start_time = row_stol['StartTime'];
$new_end_time = row_stol['EndTime'];
$err = check_order($new_start_time, $new_end_time, $start_time, $end_time); //это наша функция проверки столика
if ($err == 'В резервировании столика отказанно!') breake;
}
echo $err;
где-то так!
Спустя 1 день, 19 часов, 32 минуты, 22 секунды (17.06.2010 - 17:08) Remka написал(а):
там роверка только вот это
а в вашем примере я половину понял
но до сих пор не пойму если у нас на данный день первый стол заказан уже 2 раза и мы заказываем его в третий раз как сделать чтобы эта функция как бы брала масив из базы и проверяла сначала 1 стол потом второй и если все нормально то резервировал бы 3
if($c < $d)
{
if($c < $a && $d <= $a)
echo 'Резерв находится до предыдущего резерва';
elseif($с < $d && $c >= $b)
echo 'Резерв находится после предидущего резерва';
else
echo 'В резервировании столика отказанно!';
}
а в вашем примере я половину понял
но до сих пор не пойму если у нас на данный день первый стол заказан уже 2 раза и мы заказываем его в третий раз как сделать чтобы эта функция как бы брала масив из базы и проверяла сначала 1 стол потом второй и если все нормально то резервировал бы 3
Спустя 13 минут, 11 секунд (17.06.2010 - 17:21) tomash написал(а):
Так я же написал в предыдущем посте... мы делаем выборку из БД по столу, а потом в цикле while функция check_order проверяет не занят ли столик!
Спустя 4 часа, 50 минут, 51 секунда (17.06.2010 - 22:12) Remka написал(а):
все теперь догнал спасибо большое!!!