Ga naar inhoud

Aanbevolen berichten

Geplaatst:

Hallo, ik heb een compleet nieuw reservatie script maar ik zit met een laatste probleem wat ik en mijn klasgenoten niet lukken.

namelijk het volgende.

Datum 1 20-05-2010 tot 28-05-2010

Datum 2 19-05-2010 tot 29-05-2010

Datum 3 21-05-2010 tot 30-05-2010

Datum 1 is mijn eerste ingevoerde datum deze schijft hij weg naar de database wat klopt, maar als ik daarna datum 2 invoer en wil reserveren dan schrijft hij deze ook weg naar de database terwijl deze invoer incorrect is aangezien datum 1 tussen datum 2 valt, en als ik datum 3 invoer dan krijg ik de melding dat het huisje al bezet is wat ook klopt aangezien datum 1 er tussen valt.

Hier mijn php code

<form method="post" action="<?php echo ($_SERVER["PHP_SELF"]);?>"
<?php
include("mysqlconnect2.php");
if ($_SESSION['huis'] <> TRUE) {echo "Kies a.u.b. een vakantie woning";}
else {
$huis = $_SESSION['huis'];
$huisplaats = $_SESSION['huisplaats'];
$JAAR = date ("Y");
if (!empty($_POST)){
$adag = $_POST["adag"];
$amaand = $_POST["amaand"];
$ajaar = $_POST["ajaar"];
$vdag = $_POST["vdag"];
$vmaand = $_POST["vmaand"];
$vjaar = $_POST["vjaar"];
if ($adag == NULL){echo "<p> U heeft geen datum ingevult.<br><input type='Button' value='Ga Terug' onClick='javascript:history.back();'> </p>";}
else{
if ($vdag == NULL){echo "<p> U heeft geen datum ingevult.<br><input type='Button' value='Ga Terug' onClick='javascript:history.back();'> </p>";}
else {
if ($amaand == NULL){echo "<p> U heeft geen datum ingevult.<br> <input type='Button' value='Ga Terug' onClick='javascript:history.back();'> </p>";}
else {
if ($vmaand == NULL){echo "<p> U heeft geen datum ingevult.<br> <input type='Button' value='Ga Terug' onClick='javascript:history.back();'> </p>";}
}}
if (is_numeric($adag) == true){if (is_numeric($amaand) == true){$adatum = "TRUE";};};
if (is_numeric($vdag) == true){if (is_numeric($vmaand) == true){$vdatum = "TRUE";};};
if ($adatum <> TRUE){echo "<p>De datums zijn niet goed ingevult.<br> <input type='Button' value='Ga Terug' onClick='javascript:history.back();'> </p>";}
else {
if ($vdatum <> TRUE){echo "<p>De datums zijn niet goed ingevult.<br> <input type='Button' value='Ga Terug' onClick='javascript:history.back();'> </p>";}
else {
$aankomstdatum = "$adag/$amaand/$ajaar";
$vertrekdatum = "$vdag/$vmaand/$vjaar";
$aankomstdatum2 = "$amaand/$adag/$ajaar";
$vertrekdatum2 = "$vmaand/$vdag/$vjaar";
$myinput=$aankomstdatum2;
$sqldate=date('Y-m-d',strtotime($myinput));
$myinput2=$vertrekdatum2;
$sqldate2=date('Y-m-d',strtotime($myinput2));
$myinput3=$day;
$sqldate3=date('Y-m-d',strtotime($myinput3));
function dateDiff($dformat, $endDate, $beginDate)
{
$date_parts1=explode($dformat, $beginDate);
$date_parts2=explode($dformat, $endDate);
$start_date=gregoriantojd($date_parts1[0], $date_parts1[1], $date_parts1[2]);
$end_date=gregoriantojd($date_parts2[0], $date_parts2[1], $date_parts2[2]);
return $end_date - $start_date;
}
$Dagen = dateDiff("/", $vertrekdatum2, $aankomstdatum2);
if ($Dagen < 0){echo "<p>De aankomst- en vertrek data zijn niet goed ingevult!<br> <input type='Button' value='Ga Terug' onClick='javascript:history.back();'> </p>";}
else{
$check = TRUE;
$checksql="SELECT aankomst_datum, vertrek_datum  
        FROM reserveren
        WHERE huis =$huis";
        $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" ) );}
}}  
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{
        $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.";
}}}}}}
else {
$query=" SELECT * FROM huisjes
        WHERE huis = $huis";
        $sql=mysql_query($query) or die ("FOUT ; " .mysql_error());
        while($data=mysql_fetch_array($sql))

      $afbeelding=$data['afbeelding']; 
   $huisplaats= $_SESSION['huisplaats'];
      $prijs = $_SESSION['prijs'];

echo ("<p><img src='$afbeelding' alt='Vakantiehuis' width='200' height='160' /><br><br>
<p> U heeft gekozen voor  $huisplaats . <br>
De kosten zijn €$prijs,- per dag. </p><br>
<p>
Boeking:<br />
Gewenste aankomst datum:
<input size='2' type='text' name='adag'> - <input size='2' type='text' name='amaand'> - <input size='4' type='text' name='ajaar' value='$JAAR'><br>
Gewenste vertrek datum :
<input size='2' type='text' name='vdag'> - <input size='2' type='text' name='vmaand'> - <input size='4' type='text' name='vjaar' value='$JAAR'><br>
<input type='submit' name='submit' value='Reserveer Nu!'>
");
}}
?>
</form>

Hopenlijk kunnen jullie mij helpen met dit laaste probleem

  • 2 weken later...
Geplaatst:

Ik moet zeggen, slecht geprogrammeerd. Ik kom er totaal geen wijs uit!

Ik snap je probleem wel.

je kan het op 2 manieren doen.

Je zorgt dat je een soort agenda krijgt (figuurlijk). Elke dag is een nieuwe rij.

01-01-2010 = rij 1

02-01-2010 = rij 2

enz enz

niet dat je een begin en een einddatum in 1 rij stopt.

In dezelfde rij zet je ook een klantennummer en een bestelnummer.

Deze kun je weer koppelen aan een andere tabel met klantgegevens, en bestellingsgegevens.

Je kan controleren aan de hand van een lus van je formulier of er in je database al iets zit op die datum. Zo ja? return false; en ga door met de volgende dag uit je lus. (automatisch) Dit is de snelste manier lijkt mij.

Er is nog een manier, en dat is zoals je database er nu al uit ziet. Maar dan moet je elke "bestelling" uitlezen en controleren of de geselecteerde datum voorkomt tussen een begin en een eind. Dit is omslachtig omdat je HEEEL veel gaat moeten programmeren. De eerste mogelijkheid is het beste. Je moet dan wel van alles omgooien, maar het zal werken!.

Ik weet niet hoe het te importeren in jouw code, want ik kom er echt TOTAAL geen wijs uit. Heel veel onnodige sessions, en heel veel doorverwijzingen van variabele naar variabele.

Ook geen nette controle of het formulier al verzonden is of niet en slechte benamingen voor je variabelen.

$sql, $data2, enz enz (wat doet het?) dat moet je zelf gaan uitzoeken.

Als je over een paar weken deze code terug bekijkt, weet je niet meer welke variabele waar voor staat. Ik ben zo ook begonnen, maar heb nu al wat jaartjes PHP ervaring opgedaan. En leer elke dag nog van dingen die ik tegenkom.

Ik hoop dat het je lukt.

Groeten,

Leroy

×
×
  • Nieuwe aanmaken...

Belangrijke informatie

We hebben cookies geplaatst op je toestel om deze website voor jou beter te kunnen maken. Je kunt de cookie instellingen aanpassen, anders gaan we er van uit dat het goed is om verder te gaan.