[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проверка скрипта
Remka
Доброго времени суток всем!
сразу к сути:
есть скрипт для резервирования столиков
в нем можно выбрать на какое время будет заказан стол
если мы допустим выбираем с 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 в промежуток нельзябыло резервировать?

Спустя 1 минута, 31 секунда (12.06.2010 - 03:36) Remka написал(а):
Цитата (KaFe @ 12.06.2010 - 00:33)
Цитата
<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>


замените циклом а то как то даже смешно

весь 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 в периоды укзаные в таблице.

Спустя 2 дня, 11 минут, 5 секунд (14.06.2010 - 11:55) Basili4 написал(а):
Всю ночь думал и придумал. если есть начало времени резервирования столиков и конец
условие для отбора будет следующим

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 - итог пашол на.. rolleyes.gif
незнаю уже что придумать
может форму которая будет выдовать время только то каторое еще не задействованно?

Спустя 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 = правда
то увы досвиданья!


Подскажите не геморно ли делать такой алгаритм
и как собственно легче было бы его сделать?



Спустя 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)

Если не выполняеться можно бронировать!

Спустя 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 написал(а):
там роверка только вот это
    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 написал(а):
все теперь догнал спасибо большое!!!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.