如果日期时间不同,则插入数据

时间:2013-08-12 03:49:43

标签: php sql database

我有2个表:reservations_clienttables_clients

reservation_client有3个字段:

  

idname_clientdatetable

table_clients有2个字段:

  

idname_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 个答案:

答案 0 :(得分:0)

如果表和日期存在于数据库中,您可以先查询。

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

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

答案 1 :(得分:0)

为什么不使用像这样的条件

$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是&gt;则成为条件0然后发送错误,否则插入数据

答案 2 :(得分:0)

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

看起来,当您设置唯一约束时,您只将table作为唯一键而不是tabledate。一个在一列上设置一个唯一键,一个在列的组合上设置。与一列相反,这种组合非常重要。要解决此问题,请转到您正在使用的数据库,删除reservation_client中的所有唯一键,然后执行以下操作:

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

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

答案 3 :(得分: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
    }