繁体   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