2016-04-15 48 views
0

我有一個訂購頁面,當你可以訂購汽車。我有2個功能,1到1來檢查。檢查兩個日期之間的可用性不起作用

我的訂單功能:

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); 
    } 
} 

我檢查功能:

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; 
    } 
} 

但我在我的代碼中的缺陷。當有人從2001-01-01到2001-01-15訂購時,它會被正確插入。當有人從2001-01-02到2001-01-14訂購時,它也被插入。我認爲這會起作用。我已經嘗試了SQL BETWEEN,但也不起作用。

所以我的問題是,我該如何做一個正確的檢查呢?我沒有錯誤。

我的表設置:

Table

+0

數據庫表日期什麼是您使用的數據類型呢? (請不要說你使用的是varchar) –

+0

不,我使用的日期@MarkBaker –

回答

0

當有人從訂單到2001-01-01 2001-01-15它被正確插入

我們有

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

現在看看你的查詢,它檢查保留ñ

WHERE resvan >= ? AND restot <= ? 

當有人從訂單到2001年1月2日2001年1月14日它被插入藏漢

所以發生這種情況時,你的查詢變得

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

這不會返回重複,因爲不存在這樣的記錄。您現有的記錄的日期從一月一日開始,而不是一月二日。

解決方法非常簡單,您不希望在已預訂的日期對預訂車進行雙倍預訂,因此只需提供1個日期而不是兩者匹配。即使1場比賽沒有重新預訂

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

現在,與那些嘗試這些新的日期

+0

哦,是的,這是真的。但是,我會如何讓它與衆不同呢?什麼是這個解決方案? –

+0

查看更新。 –

+0

它無法正常工作。它甚至給出了一個已經存在的日期,甚至沒有預訂。而且你仍然可以在兩個日期之間預訂。 –

相關問題