我需要你的帮助。我陷入了无法理解如何阻止产品在网络表单上每天预订两次的地步。
我每天有41种产品可以出租。
我的问题是:如果客户预订产品#4(pg_no)和日期26-06-2017,则另一个客户无法在同一时间段内预订同一产品。
如果客户选择相同的产品和日期,则会显示一条消息“已预订 - 请选择其他日期”
另外,我是否必须在数据库级别定义任何内容?
我们将非常感谢您的帮助。
请注意:此规则仅适用于产品#(pg_no),并且当天不允许使用日期字段。
<?php
//connecting string
include("dbconnect.php");
//assigning
$pg_no=$_REQUEST['pg_no'];
$name=$_REQUEST['Name'];
$tele=$_REQUEST['Tele'];
$city=$_REQUEST['City'];
$date=$_REQUEST['Date'];
//checking if pg_no and Date are same
$check=mysqli_query($db_connect,"SELECT * FROM lstclient WHERE pg_no='{$pg_no}', Date='{$date}'");
if(mysqli_fetch_row($check) ==0)
{
echo "Already booked please select another date<br/>";
}
//if not the insert data
else
{
$query=mysqli_query($db_connect,"INSERT INTO lstclient(pg_no,Name,Tele,City,Date) VALUES('$pg_no','$name','$tele','$city','$date')") or die(mysql_error());
}
mysqli_close($db_connect);
// messaging
if($query)
{
header("location:index.php?note=failed");
}
else
{
header("location:index.php?note=success");
}
?>
答案 0 :(得分:1)
在两列之间的表上创建UNIQUE KEY
约束。
ALTER TABLE lstclient ADD CONSTRAINT `pg_no_date` UNIQUE (pg_no, date)
然后当您尝试插入违反此约束的行时,mysql将抛出错误。您应该捕获此MySQL错误并以正确的错误进行响应。
if( mysqli_errno() == 1062) {
// Duplicate key error
}
答案 1 :(得分:0)
像ryan建议的那样为你的lstclient表添加一个唯一键。此外,您的检查查询有语法错误,它应该如下所示。
SELECT * FROM lstclient WHERE pg_no='{$pg_no}' AND Date='{$date}'