0

我有 2 张桌子:reservations_clienttables_clients

reservation_client3 个字段:

id, name_client, date,table

table_clients2 个字段:

id,name_table

当一个客户想要预订时,他们输入了他的名字,日期,并选择了一张桌子,但是有一个问题:2个客户不能使用同一张桌子。

我需要的是仅在日期不同时将数据插入数据库。如果日期相同(即有人已经在使用该表),它应该发送一个错误;

我尝试使用唯一键,但即使日期不同,它也会向我发送错误。

我的PHP代码:

$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
  $insertSQL = sprintf("INSERT INTO reservations_clients (user, number_person, table, date) VALUES (%s, %s, %s, %s)",
                       GetSQLValueString($_POST['user'], "text"),
                       GetSQLValueString($_POST['number_person'], "int"),
                       GetSQLValueString($_POST['table'], "int"),
                       GetSQLValueString($_POST['date'], "text"),

  mysql_select_db($database_conexionbdd, $conexionbdd);
  $Result1 = mysql_query($insertSQL, $conexionbdd) or die(mysql_error());

mysql_select_db($database_conexionbdd, $conexionbdd);
$query_table = "SELECT * FROM tables";
$table = mysql_query($query_table, $conexionbdd) or die(mysql_error());
$row_table = mysql_fetch_assoc($table);
$totalRows_tables = mysql_num_rows($table);

客户填写的表格:

      <form method="post" name="form1" action="<?php echo $editFormAction; ?>">
      <table align="center">
          <tr valign="baseline">
            <td nowrap align="right">Number_person:</td>
            <td><input type="text" name="Number of persons" value="" size="32"></td>
          </tr>
          <tr valign="baseline">
            <td nowrap align="right">table:</td>
            <td><select name="numero_mesa">
              <?php
do {  
?>
              <option value="<?php echo $row_table['idtable']?>" <?php if (!(strcmp($row_tables['idtable'], $row_table['idtable']))) {echo "SELECTED";} ?>><?php echo $row_table['name_table']?></option>
              <?php
} while ($row_table = mysql_fetch_assoc($table));
?>
            </select></td>
          <tr>
          <tr valign="baseline">
            <td nowrap align="right">date:</td>
            <td><input type="text" name="fecha"  size="32" id="datepicker" /></td>

          </tr>
<tr>          
  <td nowrap align="right">&nbsp;</td>
            <td><input type="submit" value="Enviar"></td>
          </tr>
        </table>
        <input type="hidden" name="user" value="<?php echo $row_user['user']; ?>">
        <input type="hidden" name="MM_insert" value="form1">
      </form>
      <p>&nbsp;</p>
4

4 回答 4

0

如果您使用的是 php,请将日期发送到服务器端。然后,如果您需要逐秒准确性,您可以将它们作为字符串进行比较

if($dateFromDB==date("Y-m-d H:i:s"))
{
// go ahead and do your business
}

但是,如果您希望有 2 个不同的日子,您可以使用以下

$today=explode(" ",date("Y-m-d H:i:s"));

$today=$today[0];

$dateFromDB=explode(" ",$dateFromDB);

$dateFromDB=$dateFromDB[0];

if($dateFromDB==$today)
    {
    // go ahead and do your business
    }
于 2013-08-12T04:02:05.840 回答
0

我对您如何使用数据库设置感到困惑;似乎唯一的问题是reservation_client桌子。

看起来,当您设置唯一约束时,您只包含table作为唯一键而不是同时包含tableand date。一个在一列上设置唯一键,一个在列的组合上设置它。与一列相比,这种组合非常重要。要解决此问题,请转到您正在使用的数据库,删除reservation_clientand 中的所有唯一键:

ALTER TABLE `reservation_client` ADD UNIQUE (`table`, `date`);

本质上,这意味着为了插入一个条目,不能有任何行具有相同的tabledate值。它本质上是设置一个唯一的组合而不是唯一的键。您将要确保处理返回的错误,无论这意味着在 PHP 中捕获它还是ON DUPLICATE KEY在查询中设置某种操作。我不确定确切的情况,所以你必须玩弄它。

于 2013-08-12T04:00:00.500 回答
0

您可以先查询表和日期是否存在于数据库中。

 Select * From reservation_clients Where Date = $date And table = $table

如果结果为空,则可以继续插入数据。

于 2013-08-12T03:55:18.630 回答
0

你为什么不使用这样的 where 条件

$q_num = mysql_query('select * from reservations_client where date = "the date the  client chose" and table = "the table the client chose"');
$r_num = mysql_num_rows($q_num);

如果 $r_num > 0 则创建条件然后发送错误,否则插入数据

于 2013-08-12T03:56:21.623 回答