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

时间:2017-06-25 20:23:21

标签: php html 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");
        }

    ?>

2 个答案:

答案 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}'