boot reserveringscript
maar ik wil niet dat een boot door 2 mensen kan worden gehuurd.
alleen ik kom er niet echt uit...
ik weet niet of ik het wel goed doe..:(
maar wat hulp zou echt handig zijn.
tot nu toe heb ik dit:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?
// de datums uit de database
// op deze dagen is er al een reservering
$datum1=mktime(0, 0, 0, 21, 08, 2008);
$datum2=mktime(0, 0, 0, 25, 08, 2008);
// checken of je op deze datums kan huren
$datum3=mktime(0, 0, 0, 21, 08, 2008);
$datum4=mktime(0, 0, 0, 29, 08, 2008);
if($datum1 == $datum3 || $datum3 > $datum1 && $datum4 < $datum2 || $datum4 == $datum2 ){
echo 'U kunt niet reserveren.';
}
?>
// de datums uit de database
// op deze dagen is er al een reservering
$datum1=mktime(0, 0, 0, 21, 08, 2008);
$datum2=mktime(0, 0, 0, 25, 08, 2008);
// checken of je op deze datums kan huren
$datum3=mktime(0, 0, 0, 21, 08, 2008);
$datum4=mktime(0, 0, 0, 29, 08, 2008);
if($datum1 == $datum3 || $datum3 > $datum1 && $datum4 < $datum2 || $datum4 == $datum2 ){
echo 'U kunt niet reserveren.';
}
?>
Gewijzigd op 01/01/1970 01:00:00 door Afg
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
// Datums dat de boot verhuurd is:
$dagenverhuurd = array('21-8-2008','23-8-2008','25-8-2008');
// Datum Nu:
$datum = date('d-m-Y');
// How wacht! Controlle!
if(in_array($datum, $dagenverhuurd))
{
// ai, Das jammer boot is al verhuurd!.
echo 'Deze boot is al verhuurd.';
} else {
// Boot is vrij! Jippie!.
echo '<a href="#">klik hier om de boot vast te leggen.</a>';
}
?>
// Datums dat de boot verhuurd is:
$dagenverhuurd = array('21-8-2008','23-8-2008','25-8-2008');
// Datum Nu:
$datum = date('d-m-Y');
// How wacht! Controlle!
if(in_array($datum, $dagenverhuurd))
{
// ai, Das jammer boot is al verhuurd!.
echo 'Deze boot is al verhuurd.';
} else {
// Boot is vrij! Jippie!.
echo '<a href="#">klik hier om de boot vast te leggen.</a>';
}
?>
ik zal morgen ernaar kijken..maar alvast bedankt
dan moet ik dat allemaal in een array zetten..maar dat is niet de probleem
ik haal die datums uit de database..hoe zorg ik ervoor dat dit automatisch gebeurd?..
Waarom controleer je het dan niet in de database?
Gewijzigd op 01/01/1970 01:00:00 door afg
er zijn 5 verschillende boten
hoe controleer ik dat in de database dan?
datum1 is de begindatum, datum2 is de einddatum, I presume. Dito voor tijd1 en 2.
Aangezien je zowel datum als tijd nodig hebt, kan je evengoed 1 datetime gebruiken.
Ik heb het gevoel dat je de tijden opslaat in Unix time (seconden sinds 1 januari 1970, GMT). Vergis ik me?
Het zou beter zijn twee velden aan te maken van het type datetime.
Ik zal eens een voorbeeldje schrijven.
offtopic: idd je was het vergeten..:P
ontopic
dus zo?:
tabel kalender:
naamboot varchar 255
begintijd date
eindtije date
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
CREATE TABLE reservering (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
boot INT NOT NULL ,
klant INT NOT NULL ,
begin DATETIME NOT NULL ,
einde DATETIME NOT NULL
) ENGINE = InnoDB
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
boot INT NOT NULL ,
klant INT NOT NULL ,
begin DATETIME NOT NULL ,
einde DATETIME NOT NULL
) ENGINE = InnoDB
Dan kan je verder nog een tabel maken waarin je de informatie zet over de boot, en nog een tabel waar je de informatie zet over de klant.
dus dat niet iemand anders die boot op die tijdstip heeft...
minuutje, ik ben er mee bezig.
BETWEEN kun je checken of de begin- of einddatum/-tijd tussen die van een van de reeds bestaande reserveringen valt.
Voorbeeldje:
Piet heeft boot 1 gereserveerd op 25-08-2008 van 13:00 tot 15:00.
Jan heeft boot 1 gereserveerd op 25-08-2008 van 17:00 tot 18:00.
Nu komt Kees, die wil de boot ook reserveren. Hij geeft op dat hij op 25-08-2008 van 14:00 tot 16:00 boot 1 wil reserveren. Het systeem checkt of het begintijdstip en het eindtijdstip niet tussen de tijdstippen van de reserveringen van Piet en Jan ligt:
Als deze query resultaten geeft (wat bij Kees het geval zou zijn), betekent dit dat de boot al gereserveerd is op het tijdstip waarvoor Kees de boot wil reserveren.
Met MySQL's Voorbeeldje:
Piet heeft boot 1 gereserveerd op 25-08-2008 van 13:00 tot 15:00.
Jan heeft boot 1 gereserveerd op 25-08-2008 van 17:00 tot 18:00.
Nu komt Kees, die wil de boot ook reserveren. Hij geeft op dat hij op 25-08-2008 van 14:00 tot 16:00 boot 1 wil reserveren. Het systeem checkt of het begintijdstip en het eindtijdstip niet tussen de tijdstippen van de reserveringen van Piet en Jan ligt:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
SELECT id
FROM reserveringen
WHERE bootnummer = 1
AND (
<de begintijd van Kees> BETWEEN begintijd AND eindtijd
OR <de eindtijd van Kees> BETWEEN begintijd AND eindtijd
)
FROM reserveringen
WHERE bootnummer = 1
AND (
<de begintijd van Kees> BETWEEN begintijd AND eindtijd
OR <de eindtijd van Kees> BETWEEN begintijd AND eindtijd
)
Als deze query resultaten geeft (wat bij Kees het geval zou zijn), betekent dit dat de boot al gereserveerd is op het tijdstip waarvoor Kees de boot wil reserveren.
Code (php)
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
29
30
31
32
33
34
35
36
37
38
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
29
30
31
32
33
34
35
36
37
38
<?php
function reserveer ($boot, $klant, $start , $stop )
{
////////////
// db connectie, zie zelf maar hoe je dit normaal doet
list($databank, $server, $gebruikersnaam, $wachtwoord) = getDbConfig();
$con = mysql_connect($server, $gebruikersnaam, $wachtwoord) ;
mysql_select_db ($databank);
////////////
$sql = " SELECT (begin BETWEEN '". $start ."' AND '". $stop ."') AS begin_conflict
, (einde BETWEEN '". $start ."' AND '". $stop ."') AS einde_conflict
FROM reservering
WHERE boot='". $boot ."'";
$result = mysql_query($sql);
while($row = mysql_fetch_array($result) )
{
if ($row['begin_conflict'] == 1 || $row['einde_conflict'] == 1 )
{
mysql_close($con);
return false;
}
}
$sql = ' INSERT INTO reservering (boot, klant, begin, einde) VALUES ('. $boot .','. $klant .',"'. $start .'","'. $stop .'") ';
$result = mysql_query($sql);
mysql_close($con);
return $result;
}
// voorbeeld
$boot = 1;
$klant = 3;
$start = '2008-08-18 14:21:00';
$stop = '2008-08-19 14:21:00';
$result = reserveer ($boot, $klant, $start , $stop );
echo $result;
?>
function reserveer ($boot, $klant, $start , $stop )
{
////////////
// db connectie, zie zelf maar hoe je dit normaal doet
list($databank, $server, $gebruikersnaam, $wachtwoord) = getDbConfig();
$con = mysql_connect($server, $gebruikersnaam, $wachtwoord) ;
mysql_select_db ($databank);
////////////
$sql = " SELECT (begin BETWEEN '". $start ."' AND '". $stop ."') AS begin_conflict
, (einde BETWEEN '". $start ."' AND '". $stop ."') AS einde_conflict
FROM reservering
WHERE boot='". $boot ."'";
$result = mysql_query($sql);
while($row = mysql_fetch_array($result) )
{
if ($row['begin_conflict'] == 1 || $row['einde_conflict'] == 1 )
{
mysql_close($con);
return false;
}
}
$sql = ' INSERT INTO reservering (boot, klant, begin, einde) VALUES ('. $boot .','. $klant .',"'. $start .'","'. $stop .'") ';
$result = mysql_query($sql);
mysql_close($con);
return $result;
}
// voorbeeld
$boot = 1;
$klant = 3;
$start = '2008-08-18 14:21:00';
$stop = '2008-08-19 14:21:00';
$result = reserveer ($boot, $klant, $start , $stop );
echo $result;
?>
Indien er een conflict is, geeft de functie false weer. Indien er geen conflict is, wordt de reservatie in de db geïnsert. Indien dat lukt, zou je een true (of 1) moeten terug krijgen.
Gewijzigd op 01/01/1970 01:00:00 door Emmanuel Delay