防止双重预订PHP / MYSQL

时间:2015-07-06 20:26:10

标签: php mysql post mysqli

您好我在预约预约数据库时遇到问题。我被困在这3天了,我不知道该怎么办。我有各种长度的约会,我使用PHP POST从表单中检索。然后我尝试用我收到的值更新数据库。我希望阻止用户进行双重预约和预约,而另一个预约。

这是我的数据库  MYSQL DB

lesson_date_time字段采用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立即标记我。它不会返回任何错误,但也不会将任何内容发布到数据库中。

2 个答案:

答案 0 :(得分:2)

您在此处缺少的关键是有一个条件可以防止覆盖以前的预订。在当前状态下将采取以下形式:

UPDATE bookings SET ... WHERE email IS NULL

这假定email最初应为NULL。避免将其设置为钝'none'或空字符串。

注意,您要避免违反Zero, One or Infinity Rule并遵守正确的database normalization规则:创建一个代表预订个人的表格。即使该表最初仅包含电子邮件地址,它也是实现数据库完整性的重要一步。

然后,您可以插入user_id,而不是users表中的记录。这样,如果用户更改了他们的email地址,您只需要更新一行,而不是知道有多少表的N行。

这建立了一个适当的&#34;一对多&#34;用户和预订之间的关系。从那里你可以构建一个非常强大的应用程序。

答案 1 :(得分:-1)

您的WHERE语句可能没有行。如果您的WHERE语句返回任何内容,则使用SELECT进行调试。

您还可以使用mysql_affected_rows()检查声明中受影响的行。

我还想提一下你应该注意sql注射!