Ik moet een PHP Informatie systeem maken van school, nou heb ik alles al klaar ik krijg alleen één klein stukje in het reservatie script niet voor elkaar.
Namelijk wanneer huisje 1 huur op de datum van 20-10-2010 tot 25-10-2010 word hij weg geschreven in de database wat klopt.
maar wil ik daarna huisje 1 weer ophuren op datum van 19-10-2010 tot 25-10-2010 en dan word hij ook weg geschreven in de database maar dit mag namelijk niet omdat huisje 1 al verhuurd is op 20-10-2010 tot 25-10-2010, hier kom ik niet uit...
Gaat het om een script met 1 huisje? Zet voor elke datum dat het huisje bezet is (for each date between aankomst en vertrek - 1), de datum in een database. Check bij het opvragen van een nieuwe reservering of de datum al voorkomt in de database (wederom for each date between aankomst en vertrek - 1), komt de datum al voor --> error, komt de datum nog niet voor --> kan verder.
SELECT * FROM reserveren
WHERE huis = 12 AND ( ( '2010-10-16' BETWEEN aankomst_datum AND vertrek_datum OR '2010-10-25' BETWEEN aankomst_datum AND vertrek_datum )
OR ( aankomst_datum BETWEEN '2010-10-16' AND '2010-10-25' OR vertrek_datum BETWEEN '2010-10-16' AND '2010-10-25' ) );
SELECT*FROM reserveren
WHERE huis =12AND(('2010-10-16'BETWEEN aankomst_datum AND vertrek_datum OR'2010-10-25'BETWEEN aankomst_datum AND vertrek_datum )
Hiermee controleer je of de aankomst / vertrek datum tussen een al eerder geboekte reservering ligt of dat er een overlapping is met een andere boeking.
Als er geen resultaten terug komen (kan met mysql_num_rows() === 0) dan is het huisje dus nog vrij, als er 1 terug wordt gegeven, dan is het huisje dus al geboekt, als er 2 of meer terug komt, dan is er een al dubbele boeking.
Als ik het doe zoals jij zegt zou ik de vaste waardes die jij gegeven hebt moeten omzetten in variabelen want daar werk ik mee.. maar dan zal ik toch geen 2010-10-16 enz kunnen veranderen naar $aankomst_datum en $vertrek_datum ??
Als ik het doe zoals jij zegt zou ik de vaste waardes die jij gegeven hebt moeten omzetten in variabelen want daar werk ik mee.. maar dan zal ik toch geen 2010-10-16 enz kunnen veranderen naar $aankomst_datum en $vertrek_datum ??
Ja, je kan de aankomst en vertrekdatum die ik heb gegeven omzetten naar variablen, dus dan krijg je:
SELECT * FROM reserveren
WHERE huis = '$huis' AND ( ( '$aankomst_datum' BETWEEN aankomst_datum AND vertrek_datum OR '$vertrek_datum' BETWEEN aankomst_datum AND vertrek_datum )
OR ( aankomst_datum BETWEEN '$aankomst_datum' AND '$vertrek_datum' OR vertrek_datum BETWEEN '$aankomst_datum' AND '$vertrek_datum' ) );
SELECT*FROM reserveren
WHERE huis ='$huis'AND(('$aankomst_datum'BETWEEN aankomst_datum AND vertrek_datum OR'$vertrek_datum'BETWEEN aankomst_datum AND vertrek_datum )
$check = TRUE;
// hier wordt de query gecontroleerd op het gekozen huis
$checksql="SELECT aankomst_datum, vertrek_datum FROM reserveren WHERE huis =$huis";
//De gekozen datums van het gekozen vakantiehuis worden door gecontrolleerd als de aankomst_datum en vertrek_datum niet al ergens anders tussen vallen of gekozen zijn.
$sql2=mysql_query($checksql) ;
while($data2=mysql_fetch_array($sql2))
{
$aankomst_datum=$data2['aankomst_datum'];
$vertrek_datum=$data2['vertrek_datum'];
while ($aankomst_datum <> $vertrek_datum) {
if ($aankomst_datum == $sqldate)
{$check = false; $aankomst_datum = $vertrek_datum;}
else {$aankomst_datum = date( "Y-m-d", strtotime( "$aankomst_datum +1 day" ) );}
}
While ($aankomst_datum <> $vertrek_datum) {
IF ($aankomst_datum == $sqldate2)
{$check = False; $aankomst_datum = $vertrek_datum;}
Else {$aankomst_datum = date( "Y-m-d", strtotime( "$aankomst_datum +1 day" ) );}
}}
// als het gekozen datums wel tussen andere gekozen datums vallen wordt dat hier vermeld.
if ($check <> TRUE){echo "<p> Onze exucesses maar het huisje op $huisplaats is al verhuurt tussen deze data. <br> <input type='Button' value='Ga Terug' onClick='javascript:history.back();'> </p>";}
else{
// zo niet wordt hier alles weg geschreven naar de database velden.
$klantnummer = $_SESSION['klantnummer'];
$insert ="INSERT INTO reserveren(klantnummer, huis, aankomst_datum, vertrek_datum)
VALUES ('".$klantnummer."', '".$huis."', '".$sqldate."', '".$sqldate2."')";
$result = mysql_query($insert)or die ("INSERT FOUT: " .mysql_error());
echo "<p>De reservering is succesvol verlopen,<br> Uw aankomstdatum is : $aankomstdatum <br>uw verterkdatum is : $vertrekdatum.";
}}}}}}
$check=TRUE;
// hier wordt de query gecontroleerd op het gekozen huis
$checksql="SELECT aankomst_datum, vertrek_datum FROM reserveren WHERE huis =$huis";
//De gekozen datums van het gekozen vakantiehuis worden door gecontrolleerd als de aankomst_datum en vertrek_datum niet al ergens anders tussen vallen of gekozen zijn.
// als het gekozen datums wel tussen andere gekozen datums vallen wordt dat hier vermeld.
if($check<>TRUE){echo"<p> Onze exucesses maar het huisje op $huisplaats is al verhuurt tussen deze data. <br> <input type='Button' value='Ga Terug' onClick='javascript:history.back();'> </p>";}
else{
// zo niet wordt hier alles weg geschreven naar de database velden.
$klantnummer=$_SESSION['klantnummer'];
$insert="INSERT INTO reserveren(klantnummer, huis, aankomst_datum, vertrek_datum)
// hier wordt de controle uitgevoerd als er geen overlappende datums zijn.
$check_query = "SELECT * FROM reserveren WHERE huis = '$huis' AND ( ( '$aankomst_datum' BETWEEN aankomst_datum AND vertrek_datum OR '$vertrek_datum' BETWEEN aankomst_datum AND vertrek_datum ) ".
"OR ( aankomst_datum BETWEEN '$aankomst_datum' AND '$vertrek_datum' OR vertrek_datum BETWEEN '$aankomst_datum' AND '$vertrek_datum' ) );";
$check_result = mysql_query($check_query);
$check_rows = mysql_num_rows($check_result);
if( $check_rows === 0 ) {
//Het huisje is vrij en kan worden opgeslagen in de database
} else {
//Het huisje is niet vrij
}
// hier wordt de controle uitgevoerd als er geen overlappende datums zijn.
$check_query="SELECT * FROM reserveren WHERE huis = '$huis' AND ( ( '$aankomst_datum' BETWEEN aankomst_datum AND vertrek_datum OR '$vertrek_datum' BETWEEN aankomst_datum AND vertrek_datum ) ".
"OR ( aankomst_datum BETWEEN '$aankomst_datum' AND '$vertrek_datum' OR vertrek_datum BETWEEN '$aankomst_datum' AND '$vertrek_datum' ) );";
//Het huisje is vrij en kan worden opgeslagen in de database
}else{
//Het huisje is niet vrij
}
Met deze code kan je bepalen of het wel of niet naar de database geschreven moet worden. Je zal alleen zelf even moeten uitvinden hoe en waar je het neer moet zetten.
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\xampp\xampp\htdocs\nieuwe_reservering.php:1) in C:\xampp\xampp\htdocs\nieuwe_reservering.php on line 2
Warning:session_start()[function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\xampp\xampp\htdocs\nieuwe_reservering.php:1) in C:\xampp\xampp\htdocs\nieuwe_reservering.php on line 2
De foutmelding komt, doordat er op regel 47 nog een keer session_start() staat, deze moet weg.
Verder kan je het beste de $check_query even echo'en, zodat je precies kan zien hoe deze eruit ziet, en dan (b.v. phpmyadmin) direct uitvoeren in de database, dan kan je zien wat de uitkomst is. Ik kan namelijk zonder je database niet controleren waar het fout gaat en misschien heb ik wel een foutje gemaakt, waardoor er altijd 0 wordt terug gegeven.
Heel hartelijk dank het script werkt naar behoren ik heb de code die jij mij hebt gegeven nog een klein beetje aangepast van $aankomst_datum naar $ajaar/$amaand/$adag aangezien hij die ook apart inleest maar hij doet het nu helemaal ik zal voor de duidelijkheid jouwn code aangepast hier ook plaatsen zodat mischien iemand anders er ook nog wat aan heeft, want ik heb me kapot gezocht naar oplossingen en iedereen wist het maar had de oplossing er niet staan.
$check_query = "SELECT * FROM reserveren WHERE huis = '$huis' AND ( ( '$ajaar/$amaand/$adag' BETWEEN aankomst_datum AND vertrek_datum OR '$ajaar/$amaand/$adag' BETWEEN aankomst_datum AND vertrek_datum ) ".
"OR ( aankomst_datum BETWEEN '$ajaar/$amaand/$adag' AND '$vjaar/$vmaand/$vdag' OR vertrek_datum BETWEEN '$ajaar/$amaand/$adag' AND '$vjaar/$vmaand/$vdag' ) );";
$check_result = mysql_query($check_query);
$check_rows = mysql_num_rows($check_result);
if( $check_rows === 0 ) {
//Het huisje is vrij en kan worden opgeslagen in de database
$gebruikersnaam = $_SESSION['gebruikersnaam'];
$boekingsnummer = $_SESSION['boekingsnummer'];
$insert ="INSERT INTO reserveren(gebruikersnaam, boekingsnummer, huis, aankomst_datum, vertrek_datum)
VALUES ('".$gebruikersnaam."', '".$boekingsnummer."', '".$huis."', '".$sqldate."', '".$sqldate2."')";
$result = mysql_query($insert)or die ("INSERT FOUT: " .mysql_error());
echo "<p>De reservering is succesvol verlopen,<br> Uw aankomstdatum is : $aankomstdatum <br>uw verterkdatum is : $vertrekdatum.";
echo "$check_query";
} else {
//Het huisje is bezet en er kan niemand in
echo "<p> Onze exucesses maar het huisje op $huisplaats is al verhuurt tussen deze data. <br> <input type='Button' value='Ga Terug' onClick='javascript:history.back();'> </p>";
}}}}}}
$check_query="SELECT * FROM reserveren WHERE huis = '$huis' AND ( ( '$ajaar/$amaand/$adag' BETWEEN aankomst_datum AND vertrek_datum OR '$ajaar/$amaand/$adag' BETWEEN aankomst_datum AND vertrek_datum ) ".
"OR ( aankomst_datum BETWEEN '$ajaar/$amaand/$adag' AND '$vjaar/$vmaand/$vdag' OR vertrek_datum BETWEEN '$ajaar/$amaand/$adag' AND '$vjaar/$vmaand/$vdag' ) );";
echo"<p> Onze exucesses maar het huisje op $huisplaats is al verhuurt tussen deze data. <br> <input type='Button' value='Ga Terug' onClick='javascript:history.back();'> </p>";