2015-04-28 1 views
0

У меня есть форма для бронирования, где пользователи могут забронировать определенный объект в определенную дату и в два раза. Я пришел к тому моменту, когда мой PHP-код будет препятствовать тому, чтобы пользователь заказывал один и тот же шаг в одну и ту же дату и с того же самого начала или окончания.Проверить ценность двух раз в моей базе данных php

Однако пользователь может пойти между временем и забронировать тот же объект в тот же день, что и другой пользователь. например если один пользователь забронировал с 9 по 12 мая 1 мая, другой пользователь может зайти и заказать 10 или 11 слотов.

Есть ли способ предотвратить использование пользователем времени между тем, как другой пользователь уже забронировал ???

<?php 
     include "config.php"; 
     //Booking point 
     if(isset($_POST['booking'])) 
     { 
      //get values for variables 
      $pitchID = $_POST['pitchID']; 
      $start_date = $_POST['start_date']; 
      $start_hour = $_POST['start_hour']; 
      $end_hour = $_POST['end_hour']; 
      $booking_age = $_POST['booking_age']; 
      $pitch_size = $_POST['pitch_size']; 
      $light_tokens = $_POST['light_tokens']; 


/*   $q = $db->prepare("SELECT * FROM booking WHERE start_date = ?, start_hour = ?, end_hour=?, pitchID=?"); 
      $query = $q->execute(array($start_date, $start_hour, $end_hour, $pitchID)); 
      $count = $q->rowCount(); */ 
       $q = $db->prepare("SELECT * FROM booking WHERE start_date = ? AND start_hour = ? AND pitchID = ?"); 
       $query = $q->execute(array($start_date, $start_hour, $pitchID)); 
       $count = $q->rowCount(); 

       if($count == 0){ 

        $query = $db->prepare("INSERT INTO booking SET pitchID = ?, start_date = ?, start_hour = ?, end_hour = ?, booking_age = ?, pitch_size = ?, light_tokens = ?, userID='$userID'"); 
        $query = $query->execute(array($pitchID,$start_date,$start_hour,$end_hour,$booking_age,$pitch_size,$light_tokens)); 

        if($query){ 
         echo "Your booking has been made"; 
         header("Location:home2_template.html"); 
         return; 
        } else { 
         echo "Fail"; 
        } //else fail 
       } else { 
        echo "This booking already exists"; 
       } //else count 
     } //if booking 
    ?> 
+0

чем вопрос? – cske

+0

Есть ли способ предотвратить использование пользователем времени между тем, как еще один пользователь уже забронировал ??? – Stuart

+0

Вы можете использовать между функцией PF mysql – LTasty

ответ

1

Если вы только можете заказать один день, попробуйте этот

select * from booking 
where (start_date='new_date' 
     and ( 
       (start_hour <='new_start_hour' and end_hour>='new_start_hour') 
       or 
       (start_hour<= 'new_end_hour' and end_hour>='new_end_hour') 
      ) 
    ) and pitchID = ? 
+0

комментарий к OP: вам нужно использовать таблицы innodb и транзакции для предотвращения проблем с параллелизмом (несколько пользователей получают один и тот же временной интервал, потому что оба они записывают в тот же момент времени и). –

+0

Извините jpintor, который, похоже, не работает для меня, он все еще принимает заказы между другим временным интервалом бронирования. Нужно ли вставлять new_start_hour в любом месте моего PHP-кода, кроме выражения select – Stuart

+0

, пожалуйста, покажите мне фактический код и объясните немного больше, в каких случаях не удается выполнить сейчас – jpintor

Смежные вопросы