login  Naam:   Wachtwoord: 
Registreer je!
 Forum

PHP/MySql - Reservatie Script (Opgelost)

Offline PatrickS - 20/09/2010 12:49 (laatste wijziging 20/09/2010 13:01)
Avatar van PatrickSNieuw lid Hallo,

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...

Plaatscode* 140003

Hopenlijk kunnen jullie mij helpen want ik zie door de bomen het bos niet meer 

Mvg,

Patrick

16 antwoorden

Gesponsorde links
Offline prienstra - 20/09/2010 14:33 (laatste wijziging 20/09/2010 14:36)
Avatar van prienstra MySQL interesse 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.
Offline PatrickS - 20/09/2010 14:38 (laatste wijziging 20/09/2010 14:44)
Avatar van PatrickS Nieuw lid oke dan zal ik zoon soort krijgen?

  1. $checksql="SELECT * FROM reserveren WHERE aankomst_datum, vertrek_datum BETWEEN '$aankomst_datum' AND '$vertrek_datum' AND huis =$huis";
Offline pinquin - 20/09/2010 14:45
Avatar van pinquin HTML interesse Hoi patrickS,

Dit zou je misschien kunnen helpen:
2010-10-16 = aankomstdatum
2010-10-25 = vertrekdatum
12 = huisnummer
  1. SELECT * FROM reserveren
  2. WHERE huis = 12 AND ( ( '2010-10-16' BETWEEN aankomst_datum AND vertrek_datum OR '2010-10-25' BETWEEN aankomst_datum AND vertrek_datum )
  3. OR ( aankomst_datum BETWEEN '2010-10-16' AND '2010-10-25' OR vertrek_datum BETWEEN '2010-10-16' AND '2010-10-25' ) );


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.

gr,
Offline PatrickS - 20/09/2010 14:47
Avatar van PatrickS Nieuw lid @pinquin,

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 ??
Offline pinquin - 20/09/2010 14:53 (laatste wijziging 20/09/2010 14:53)
Avatar van pinquin HTML interesse
PatrickS schreef:
@pinquin,

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:
  1. SELECT * FROM reserveren
  2. WHERE huis = '$huis' AND ( ( '$aankomst_datum' BETWEEN aankomst_datum AND vertrek_datum OR '$vertrek_datum' BETWEEN aankomst_datum AND vertrek_datum )
  3. OR ( aankomst_datum BETWEEN '$aankomst_datum' AND '$vertrek_datum' OR vertrek_datum BETWEEN '$aankomst_datum' AND '$vertrek_datum' ) );

Offline PatrickS - 20/09/2010 14:56 (laatste wijziging 20/09/2010 15:01)
Avatar van PatrickS Nieuw lid oke ik heb dit stuk er nu uit gehaald en vervangen voor jouwn stuk

o en btw ik werk met twee huisjes niet ééntje.

  1. $check = TRUE;
  2. // hier wordt de query gecontroleerd op het gekozen huis
  3. $checksql="SELECT aankomst_datum, vertrek_datum FROM reserveren WHERE huis =$huis";
  4. //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.
  5. $sql2=mysql_query($checksql) ;
  6. while($data2=mysql_fetch_array($sql2))
  7. {
  8. $aankomst_datum=$data2['aankomst_datum'];
  9. $vertrek_datum=$data2['vertrek_datum'];
  10.  
  11.  
  12. while ($aankomst_datum <> $vertrek_datum) {
  13.  
  14. if ($aankomst_datum == $sqldate)
  15. {$check = false; $aankomst_datum = $vertrek_datum;}
  16. else {$aankomst_datum = date( "Y-m-d", strtotime( "$aankomst_datum +1 day" ) );}
  17. }
  18. While ($aankomst_datum <> $vertrek_datum) {
  19.  
  20. IF ($aankomst_datum == $sqldate2)
  21. {$check = False; $aankomst_datum = $vertrek_datum;}
  22. Else {$aankomst_datum = date( "Y-m-d", strtotime( "$aankomst_datum +1 day" ) );}
  23. }}
  24. // als het gekozen datums wel tussen andere gekozen datums vallen wordt dat hier vermeld.
  25. 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>";}
  26. else{
  27. // zo niet wordt hier alles weg geschreven naar de database velden.
  28. $klantnummer = $_SESSION['klantnummer'];
  29. $insert ="INSERT INTO reserveren(klantnummer, huis, aankomst_datum, vertrek_datum)
  30. VALUES ('".$klantnummer."', '".$huis."', '".$sqldate."', '".$sqldate2."')";
  31.  
  32. $result = mysql_query($insert)or die ("INSERT FOUT: " .mysql_error());
  33. echo "<p>De reservering is succesvol verlopen,<br> Uw aankomstdatum is : $aankomstdatum <br>uw verterkdatum is : $vertrekdatum.";
  34. }}}}}}
Offline pinquin - 20/09/2010 15:02
Avatar van pinquin HTML interesse En werkt het ook?
Offline PatrickS - 20/09/2010 15:06
Avatar van PatrickS Nieuw lid Nee, werkt niet hij schrijf nu alles weg naar de database
Offline pinquin - 20/09/2010 15:07
Avatar van pinquin HTML interesse
PatrickS schreef:
Nee, werkt niet hij schrijf nu alles weg naar de database

Zou je de code die je nu hebt kunnen laten zien?!
Offline PatrickS - 20/09/2010 15:08
Avatar van PatrickS Nieuw lid De link naar plaatscode.be

http://www.plaatscode.be/140004/
Offline pinquin - 20/09/2010 15:18 (laatste wijziging 20/09/2010 15:18)
Avatar van pinquin HTML interesse
  1. // hier wordt de controle uitgevoerd als er geen overlappende datums zijn.
  2. $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 ) ".
  3. "OR ( aankomst_datum BETWEEN '$aankomst_datum' AND '$vertrek_datum' OR vertrek_datum BETWEEN '$aankomst_datum' AND '$vertrek_datum' ) );";
  4.  
  5. $check_result = mysql_query($check_query);
  6. $check_rows = mysql_num_rows($check_result);
  7.  
  8. if( $check_rows === 0 ) {
  9. //Het huisje is vrij en kan worden opgeslagen in de database
  10. } else {
  11. //Het huisje is niet vrij
  12. }


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.

succes
Offline PatrickS - 20/09/2010 15:19
Avatar van PatrickS Nieuw lid Oke vriendelijk bedankt pinquin, ik ga weer verder stoeien je hoort vanzelf wel als het me weer niet lukt   
Offline pinquin - 20/09/2010 16:22
Avatar van pinquin HTML interesse
PatrickS schreef:
Oke vriendelijk bedankt pinquin, ik ga weer verder stoeien je hoort vanzelf wel als het me weer niet lukt   

Graag ook laten weten als het wel gelukt is  
Offline PatrickS - 21/09/2010 11:24 (laatste wijziging 21/09/2010 11:25)
Avatar van PatrickS Nieuw lid Werkt nog niet pinquin, ik zal de code even posten zoals die nu is.

Plaatscode* 140008

Hij plaatst gewoon alles in de database hij controleerd niet...

Ook heb ik de melding boven in de site staan van

  1. 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


Groeten,
patrick
Offline pinquin - 21/09/2010 11:47
Avatar van pinquin HTML interesse Hoi Patrick,

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.

gr,
Bedankt door: PatrickS
Offline PatrickS - 21/09/2010 13:14 (laatste wijziging 21/09/2010 14:20)
Avatar van PatrickS Nieuw lid 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.

  1. $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 ) ".
  2. "OR ( aankomst_datum BETWEEN '$ajaar/$amaand/$adag' AND '$vjaar/$vmaand/$vdag' OR vertrek_datum BETWEEN '$ajaar/$amaand/$adag' AND '$vjaar/$vmaand/$vdag' ) );";
  3.  
  4. $check_result = mysql_query($check_query);
  5. $check_rows = mysql_num_rows($check_result);
  6.  
  7. if( $check_rows === 0 ) {
  8. //Het huisje is vrij en kan worden opgeslagen in de database
  9. $gebruikersnaam = $_SESSION['gebruikersnaam'];
  10. $boekingsnummer = $_SESSION['boekingsnummer'];
  11. $insert ="INSERT INTO reserveren(gebruikersnaam, boekingsnummer, huis, aankomst_datum, vertrek_datum)
  12. VALUES ('".$gebruikersnaam."', '".$boekingsnummer."', '".$huis."', '".$sqldate."', '".$sqldate2."')";
  13.  
  14. $result = mysql_query($insert)or die ("INSERT FOUT: " .mysql_error());
  15.  
  16. echo "<p>De reservering is succesvol verlopen,<br> Uw aankomstdatum is : $aankomstdatum <br>uw verterkdatum is : $vertrekdatum.";
  17. echo "$check_query";
  18. } else {
  19. //Het huisje is bezet en er kan niemand in
  20. 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>";
  21. }}}}}}


Nogmaals heel hartelijk dank  
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.217s