Versio

2 uur tussen de reserveringen zetten

Overzicht Reageren

Reshadd farid
Redacteur

reshadd farid

01/02/2012 10:05:22
Quote Anchor link
hallo ik heb een script waarbij ik kan reserveren.. alleen wil ik dat als er vandaag om 6 uur voor tafel 1 gereserveerd is er pas om 8 uur weer gereserveerd kan worden.. ik had wat geschreven maar dan kon ik alleen om 6 uur niet reserveren als die tafel om 6 uur al gereserveerd was en om 6:15 kan ik weer reserveren op dezelfde tafel

(je kan reserveren om de 15 minuten) dus 6, 6:15. 6:30 etc )

ik heb tot nu toe zoiets

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php


$sql
= ("SELECT tijd FROM reservering
WHERE tijd ='"
. $tijd . "' AND tafel='" . $tafel . "' AND (datum1 BETWEEN STR_TO_DATE('". $datum1 ."', '%d-%m-%Y') AND
STR_TO_DATE('"
. $datum1 ."', '%d-%m-%Y'))");

$result = mysql_query($sql);

 if  (mysql_num_rows($result) > 0)
 
 
 {

     echo "de tafel is al bezet op dit tijdstip";
    
     }


?>


hoe kan ik nu regelen dat ik pas na 2 uur weer kan reserveren?
 
PHP hulp

PHP hulp

23/05/2012 15:05:16
Gesponsorde koppelingen:
 
Jordy -

Jordy -

01/02/2012 10:11:32
Quote Anchor link
Wat is het verschil tussen je velden 'tijd' en 'datum1'?
 
Erwin H

Erwin H

01/02/2012 10:12:16
Quote Anchor link
Waar je volgens mij dan op moet controleren is of er een starttijd is binnen 2 uur voor de reservering en 2 uur na de reservering. Dus als iemand om 6.15 wilt reserveren zal je moeten kijken of er een reservering start tussen 4.15 en 8.15.
 
Reshadd farid
Redacteur

reshadd farid

01/02/2012 10:39:28
Quote Anchor link
de reserveringen kunnen pas om 6 uur beginnen ( 18:00 ) tot en met 23:00,

@jordy tijd is de uren (hoelaat) en datum1 is de datum,

@erwin hoe doe ik dit het beste? de tijd wordt weggeschreven in een TIME in mijn DB en de datum in DATE, de date pakt hij en het uur waarin al gereserveerd is ook zoals je ziet in de sql ... kan ik dit nu met een while functie ofzo controleren?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
$tijd
= $_POST['tijd'];

$tijd += 2;

while (count($tijd < ietss ... ){

ga door met reserveren

}

else {

echo " tafel bezet op deze tijdstip";

}


?>
 
Kobar Secret

Kobar Secret

01/02/2012 11:04:28
Quote Anchor link
voeg een bestand toe, chek.php ofzo, chmod deze, en wanneer het reserveren geslaagd is, en hij dus de datum in de db vastlegd, laat je je script chek.php aanpassen
Zet in chek.php de tijden, en wanneer reserveren is gelukt. laat je je script de tijd + (reserveertijd) uit de tijd-opties in chek.php halen...
Wanneer mensen dan de tijden bekijken, en je hebt chek.php geinclude zoude de tijden weg moeten zijn?
om te voorkomen dat er 2 mensen dan tegelijkertijd op dezelfde tijd reserveren zou je ook een automatische refresh over de site kunnen laten gaan na het reserveren

meschien heb je er iets aan probeer alleen mee te denken ben geen pro dus meschien is het niet slim maar zo zou ik het proberen iig
 
Erwin H

Erwin H

01/02/2012 11:05:19
Quote Anchor link
Je kan alleen die records selecteren die op die dag en tussen de bepaalde tijden liggen. Dus als iemand om 6.15 wilt reserveren dan selecteer je alle records tussen 4.15 en 8.15 (ook al kan je niet voor 6 uur reserveren, dat maakt niet uit).
De tijden kan je ofwel in php al bepalen ofwel in MySQL (met de functie ADDTIME()).

Je select statement wordt dan zoiets als dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
SELECT id
FROM reservering
WHERE tafel = 'tafel_id'
AND datum = 'datum'
AND tijd BETWEEN 'starttijd' AND 'eindtijd';

Als je hier een of meer records uit krijgt dan kan je dus niet reserveren.

Uiteraard nog zelf de waardes invullen. Bij select heb je maar een veld nodig want je wil alleen weten OF er records gevonden worden, niet wat daar in staat. Eventueel kan je er zelfs een LIMIT 1 aan meegeven zodat je altijd maximaal 1 record terugkrijgt. Dan weet je namelijk al genoeg.
 
Reshadd farid
Redacteur

reshadd farid

01/02/2012 11:24:00
Quote Anchor link
ik snap helemaal wat je bedoelt, tot en met

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
AND tijd BETWEEN 'starttijd' AND 'eindtijd';


hoe zet ik met addtime dan 2 uur ervoor/achter?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
SELECT ADDTIME ('$tijd' + ' 60*60'); ofzo?
 


Toevoeging op 01/02/2012 13:22:08:

ik snap niet hoe ik starttijd en eindtijd ermee bereken of hoe ik dat ergens uit haal.. ik heb even rondgegoogled en zag dingen met strtotime heb wat geprobeerd maar volgens mij heb ik iets fout, ik krijg geen foutmeldingen dus weet niet wat er fout is of het uberhaupt wel zo kan...

dit heb ik
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
$sql = (
        "SELECT tijd
         FROM reservering
         WHERE tijd ='" . $tijd . "'
         AND tafel='" . $tafel . "'
         AND (datum1 BETWEEN STR_TO_DATE('". $datum1 ."', '%d-%m-%Y')
         AND STR_TO_DATE('". $datum1 ."', '%d-%m-%Y'))
         AND (begintijd BETWEEN '".Y-m-d."','".strtotime."'('".$tijd."')
         AND (eindtijd '".Y-m-d."','".strtotime('+2 hours')."')
          ");

$result = mysql_query($sql);

 if (mysql_num_rows($result) > 0){
    
         echo "tafel reeds bezet bezet";
        
         }
    
     else {
    
     { $insert = mysql_query("INSERT INTO reservering (datum1, tijd, aantal, tafel, gerecht, gerecht2, gerecht3, gerecht4, gerecht5, gerecht6, gerecht7, gerecht8) VALUES (STR_TO_DATE('".$datum1."', '%d-%m-%Y'), '$tijd', '$aantal', '$tafel', '$gerecht', '$gerecht2', '$gerecht3', '$gerecht4', '$gerecht5', '$gerecht6', '$gerecht7', '$gerecht8')") or die (mysql_error());
    
    {
        echo "uw reservering is geplaatst";
        
    }
    }
Gewijzigd op 01/02/2012 11:24:33 door reshadd farid
 
Jordy -

Jordy -

01/02/2012 14:05:51
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
$query
="SELECT id
FROM reservering
WHERE tafel = '"
.$tafel_id."'
AND datum = '"
.$datum."'
AND tijd<CURDATE()+INTERVAL 2 HOUR"
;
$result = mysql_query($query);
if(mysql_num_rows($result)>0)
    echo "Tafel is vrij!";
}

?>


zoiets?
Gewijzigd op 01/02/2012 14:06:06 door Jordy -
 
Erwin H

Erwin H

01/02/2012 14:09:58
Quote Anchor link
Jordy - op 01/02/2012 14:05:51:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
AND tijd<CURDATE()+INTERVAL 2 HOUR";
?>


zoiets?

Ja, behalve dat het niet om CURDATE gaat (de huidige tijd), maar om een opgegeven tijd, namelijk de tijd van reservering. Dus als je die tijd van reservering neemt en in de query stopt geformateerd als tijd die MySQL kan lezen dan zou het moeten lukken.
 
Reshadd farid
Redacteur

reshadd farid

01/02/2012 14:31:20
Quote Anchor link
ehm de tijd worde geschreven als HH:MM in de database met een TIME aanduiding uiteraard... dus 18:00

@erwin moet ik dan zoiets hebben ?

$sql = (
"SELECT tijd
FROM reservering
WHERE tijd ='" . $tijd . "'
AND tafel='" . $tafel . "'
AND (datum1 BETWEEN STR_TO_DATE('". $datum1 ."', '%d-%m-%Y')
AND STR_TO_DATE('". $datum1 ."', '%d-%m-%Y'))
AND tijd<tijd+INTERVAL 2 HOUR
");

$result = mysql_query($sql);

if (mysql_num_rows($result) > 0){

echo "tafel reeds bezet bezet";

}
 
Ger van Steenderen

Ger van Steenderen

01/02/2012 14:55:17
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$sql
=  "SELECT id FROM reservering
    WHERE
    tafel='"
. $tafel_id . "' AND
    datum='"
. $datum . "' AND
    tijd BETWEEN ADDTIME('"
. $tijd . "', '-02:00') AND
    ADDTIME('"
. $tijd . "', '02:00')";
?>
 
Reshadd farid
Redacteur

reshadd farid

01/02/2012 15:02:28
Quote Anchor link
i tried @ger maar helaas geen resultaat hij blijft zeggen reservering gelukt ... kan het misschien komen omdat ik tijd er normaal inzet? dus niet zoals bij datum str_to_date, moet ik dan bij de tijd ook niet iets als str_to_time doen?
 
Ger van Steenderen

Ger van Steenderen

01/02/2012 16:11:21
Quote Anchor link
Nee, kan heel goed zo. Zolang $tijd maar in het goede formaat is. STR_TO_DATE gebruik alleen maar als de datum niet in het juiste formaat staat.
Anders moet je je query gewoon eens hard coderen en dan uit proberen.
 
Reshadd farid
Redacteur

reshadd farid

01/02/2012 17:00:33
Quote Anchor link
de tijd voormaat is TIME, wat bedoel je met hard coderen?
 
Ger van Steenderen

Ger van Steenderen

01/02/2012 17:44:39
Quote Anchor link
Dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$sql
= "SELECT id
    FROM reservering
    WHERE
        datum=STR_TO_DATE('01-02-2012', '%d-%m-%Y')
    AND
        tafel=1
    AND
        tijd
        BETWEEN
            ADDTIME('20:00', '-02:00')
        AND
            ADDTIME('20:00', '02:00')"
;
?>

Dit is hoe de query er uiteindelijk uit zou moeten zien, kan je ook controleren door hem te echoen
Gewijzigd op 01/02/2012 17:46:15 door Ger van Steenderen
 
Reshadd farid
Redacteur

reshadd farid

01/02/2012 22:07:13
Quote Anchor link
ik heb dit hierboven in phpmyadmin uitgevoerd en toen kreeg ik inderdaad alle rijen die ik moet krijgen terug,, dus ik weet niet wat er nu fout is :S

edit:

ik heb het gefixt ger,

ik had eerst

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php

$sql
= (
        "SELECT tijd
         FROM reservering
         WHERE tijd ='"
. $tijd . "'
         WHERE tafel='"
. $tafel . "'
         AND (datum1 BETWEEN STR_TO_DATE('"
. $datum1 ."', '%d-%m-%Y')
         AND STR_TO_DATE('"
. $datum1 ."', '%d-%m-%Y'))
         AND (tijd BETWEEN ADDTIME('"
.$tijd."', '-02:00')
         AND ADDTIME('"
.$tijd."', '02:00')
          "
);

?>


maar toen heb ik het vervangen door wat jij precies zei en de hardcore code eruit gehaald en door mijn variabelen vervangen en hij doet het! echt top!
Gewijzigd op 01/02/2012 22:22:01 door reshadd farid
 



Overzicht Reageren