PHP&MYSQL - 不插入相同的数据

问题描述:

我需要你的帮助。我陷入了一个难以想象的地步,那就是如何阻止产品每天在网络表单上被预订两次。PHP&MYSQL - 不插入相同的数据

我有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

你有明目张胆的SQL注入,如果这都不会连接到你必须逃脱,你用它来建立一个SQL字符串之前,从$ _REQUEST得到任何输入真正的互联网的服务器上运行。我逃避了一切,而且效果很好。自动机器人会发现这一点,吃早餐的网站。 – wedstrom

在两列之间的表上创建一个UNIQUE KEY约束。

ALTER TABLE lstclient ADD CONSTRAINT `pg_no_date` UNIQUE (pg_no, date) 

然后,当您尝试插入违反此约束的行时,mysql将引发错误。你应该捕捉到这个MySQL错误并且回应正确的错误。

if(mysqli_errno() == 1062) { 
    // Duplicate key error 
} 
+0

感谢phpd和ryan,你们真的帮了我。 –

+0

感谢 - phpd和ryan的帮助。 多一个问题,你能告诉我如何解决 - 回声“已经预订请选择另一个日期
”; –

像ryan建议的那样向您的lstclient表中添加一个唯一键。另外,你的检查查询有语法错误,它应该如下所示。

SELECT * FROM lstclient WHERE pg_no='{$pg_no}' AND Date='{$date}'