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