我有2个表:reservations_client
和tables_clients
reservation_client
有3个字段:
id
,name_client
,date
,table
table_clients
有2个字段:
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"> </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> </p>
答案 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
作为唯一键而不是table
和date
。一个在一列上设置一个唯一键,一个在列的组合上设置。与一列相反,这种组合非常重要。要解决此问题,请转到您正在使用的数据库,删除reservation_client
中的所有唯一键,然后执行以下操作:
ALTER TABLE `reservation_client` ADD UNIQUE (`table`, `date`);
基本上它的作用是说,为了插入一个条目,不能有任何具有相同table
和date
值的行。它实质上设置了一个独特的组合,而不是唯一的键。您将要确保处理返回的错误,无论是在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
}