2016-04-15 10 views
0

Ich habe eine Bestellseite, wenn Sie Autos bestellen können. Ich habe 2 Funktionen, 1 um 1 zu bestellen.Überprüfung der Verfügbarkeit zwischen 2 Daten nicht funktioniert

Meine Bestellung Funktion:

function reserveer($resvan,$restot,$autoid){ 
    $con = new Core(); 
    $con->connect(); 
    $sql = 'INSERT INTO reservering (resvan, restot,autoid) VALUES (?,?,?)'; 

    if ($stmt = $con->myconn->prepare($sql)) 
    { 
     $stmt->bind_param('ssi', $resvan, $restot,$autoid); 
     $stmt->execute(); 
     $stmt->close(); 
    } 
    else{ 
     die("errormessage: " . $con->myconn->error); 
    } 
} 

meine Prüffunktion:

function check($resvan, $restot,$autoid){ 
    $con = new Core(); 
    $con->connect(); 
    $errmsg = array(); 
    $sqlres = 'SELECT * FROM reservering WHERE resvan >= ? AND restot <= ? AND autoid=?'; 
    if($stmt = $con->myconn->prepare($sqlres)){ 
     $stmt->bind_param('ssi', $resvan, $restot,$autoid); 
     $stmt->execute(); 
     $stmt->store_result(); 
    } 
    if ($stmt->fetch()){ 
     $errmsg[] = "already exists!"; 
     return $errmsg; 
    } 
} 

Aber ich habe einen Fehler in meinem Code. Wenn jemand vom 01.01.2001 bis zum 15.01.2001 bestellt, wird er korrekt eingefügt. Und wenn jemand bestellt von 2001-01-02 bis 2001-01-14, wird er auch eingefügt. Ich dachte, das würde funktionieren. Ich habe den Sql BETWEEN aswell versucht, aber das funktioniert auch nicht.

Also meine Frage ist, wie kann ich eine korrekte Überprüfung dafür machen? Ich habe keine Fehler.

Meine Tabelle Setup:

Table

+0

Welche Datentyp verwenden Sie für Ihre Daten in der Datenbanktabelle? (Bitte sagen Sie nicht, dass Sie ein Varchar verwenden) –

+0

Nein Ich benutze Datum @MarkBaker –

Antwort

0

Wenn jemand Aufträge von 2001-01-01 bis 2001-01-15 es richtig

haben eingefügt wird Wir

resvan=2001-01-01 
restot=2001-01-15 

Nun sehen Sie sich Ihre Abfrage an, die die Reservierung überprüft n

WHERE resvan >= ? AND restot <= ? 

Und wenn jemand Aufträge von 2001.01.02 bis 2001.01.14 es also als gut

eingefügt wird, wenn das passiert Ihre Anfrage wird

WHERE resvan >= 2001-01-02 AND restot <= 2001-01-14 

Dies gibt kein Duplikat zurück, da kein solcher Datensatz existiert. Ihre bestehende Aufzeichnung hatte Datum beginnend am 1. Januar, nicht im zweiten Januar.

Die Lösung ist sehr einfach, Sie möchten nicht ein Auto an einem Datum buchen, für das es bereits gebucht ist, so geben Sie es nur 1 Datum und nicht beide zusammen. Auch wenn 1 Treffer erneut Buch nicht

WHERE (
2001-01-02 BETWEEN resvan AND restot 
OR 2001-01-14 BETWEEN resvan AND restot 
) 
AND autoid=? 

Jetzt mit denen versuchen, diese neuen Termine

+0

Oh ja, das stimmt. Aber wie würde ich es anders machen? Was wäre eine Lösung dafür? –

+0

Siehe das Update. –

+0

Es funktioniert nicht richtig. Es gibt sogar ein bereits vorhandenes Datum, an dem es nicht einmal eine Buchung gibt. Und Sie können immer noch zwischen 2 Daten buchen. –

Verwandte Themen