[英]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.