簡體   English   中英

防止雙重預訂 PHP/MYSQL

[英]Prevent Double Booking PHP/MYSQL

您好,我在使用預約數據庫時遇到問題。 我已經堅持了 3 天,我不知道該怎么做。 我有各種長度的約會,我使用 PHP POST 從表單中檢索這些約會。 然后我嘗試用我收到的值更新數據庫。 我想阻止用戶重復預訂約會和預訂約會,而另一個約會正在進行。

這是我的數據庫MYSQL 數據庫

課程日期時間字段采用 DATETIME 格式,最大值為 6。

表格代碼

<form method="post" name="update" action="dtupp.php" /> 
    Email:<br>
    <input type="text" name="email" /><br>
    Lesson Length:<br>   
    <input type="text" name="length" /><br> 
    Start Date<br> 
    <input type="text" name="date"/><br>
    <input type="submit" name="Submit" value="update" /> 
</form> 

我傳遞到表單中的值是

開始日期:2014-11-30 12:41:00

課程長度:60

對於電子郵件:Fake@aol.com

我的處理器聲明

<?php 
$mins = $_POST["length"];
$date_start = $_POST["date"];
$date_end   = date("Y-m-d H:i:s", strtotime("$date_start + $mins minute"));
$emails = $_POST['emails']; 
mysql_connect("localhost", "dk1", "root1") or die("Connection Failed"); 
mysql_select_db("usersignup")or die("Connection Failed"); 
$query = " UPDATE bookings SET email = '$emails' WHERE lesson_date_time BETWEEN CAST('$date_start' AS DATETIME) AND CAST('$date_end' AS DATETIME) ";
if(!mysql_query($query)){
    die('Could not update data: ' . mysql_error());
}
else{
}
?>

出於某種原因,我無法將值放入數據庫。 MYSQL 不返回任何錯誤。 我通過錯位引號檢查錯誤報告是否有效,MYSQL 立即標記我。 它不會返回任何錯誤,但也不會將任何內容發布到數據庫中。

您在這里缺少的關鍵是有一個條件可以防止覆蓋以前的預訂。 在目前的情況下,將采取以下形式:

UPDATE bookings SET ... WHERE email IS NULL

這假定email最初應該是NULL 避免將其設置為諸如'none'或空字符串之類'none'鈍化內容。

請注意,您需要避免違反零、一或無窮大規則並遵守適當的數據庫規范化規則:創建一個代表進行預訂的個人的表。 即使這個表最初只包含電子郵件地址,這也是朝着擁有適當的數據庫完整性邁出的一大步。

然后你會插入user_id ,它指的是你的users表中的一條記錄。 這樣,如果用戶更改了他們的email地址,您只需更新一行,而不是知道有多少個表的 N 行。

這在用戶和預訂之間建立了適當的“一對多”關系。 從那里你可以構建一個非常健壯的應用程序。

也許您的 WHERE 語句沒有行。 如果您的 WHERE 語句返回任何內容,請使用 SELECT 進行調試檢查。

您還可以使用mysql_affected_rows()檢查語句中受影響的行。

我還想提一下,您應該了解 sql 注入!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM