我正在创建一个预订活动的网站。我有3个中心。客户无法在不同的中心预订同一活动两次。我在mysql中使用一个表,我存储由客户提供的信息。有没有办法过滤或检查我的PHP代码,如果客户已经多次预订相同的活动并回显错误信息? 我的表(以及我正在询问的信息)包含以下列: ID(主) 名字 姓 电子邮件 联系电话 班级名称 周 强度 CentreName
$values = $_POST;
foreach ($values as &$value) {
$value = mysql_real_escape_string($value);
}
$sql1="INSERT INTO loan (loan_id)
VALUES ('$values[loan_id]')";
$result = mysql_query($sql1);
if (!$result) {
die('Invalid query: ' . mysql_error());
}
答案 0 :(得分:1)
创建表格时,将唯一属性添加到要阻止的字段中,如下所示
CREATE TABLE Persons
(
P_Id INT NOT NULL AUTO_INCREMENT,
LastName VARCHAR(255) NOT NULL,
FirstName VARCHAR(255),
Address VARCHAR(255),
City VARCHAR(255),
UNIQUE (P_Id)
)
如果您已经创建了表,只需像这样编辑它
ALTER TABLE Persons
ADD UNIQUE (P_Id)
答案 1 :(得分:0)
您需要在希望唯一的列上创建唯一(复合)索引。在制作唯一索引时,您可以忽略PK。在你的情况下你的SQL看起来像:
Alter table yourtablename
add unique index idx_unq(`LastName`, `FirstName`, `Email`, `ContactNumber` `ClassName`, `Week`, `Intensity`, `CentreName`);
然后执行INSERT IGNORE INTO而不是INSERT INTO。
这篇文章也可以帮到你。
"INSERT INTO .. ON DUPLICATE KEY UPDATE" Only inserts new entries rather than replace?
为了查看表中是否已存在记录,您必须先测试"查看表中是否存在该确切记录。这是在“插入IGNORE”之前完成的。在你的逻辑中。使用变量,您的代码将如下所示:
$testcount = "Select count(`LastName`, `FirstName`, `Email`, `ContactNumber` `ClassName`, `Week`, `Intensity`, `CentreName`)
from yourtablename
where
(LastName = '$LastName' AND FirstName= '$FirstName' AND Email= '$EMAIL' AND ContactNumber= '$ContactNumber' AND ClassName= '$ClassName' AND Week= '$Week' Intensity = '$Intensity' AND CentreName = '$CentreName' )";
此查询将返回(假设表中没有重复项)0或1并将其存储在$ testcount变量中。然后,可以使用它来确定基于将记录插入表中的值,或者向最终用户打印消息,通知它们已经存在。
我不确定你想如何构建php代码,但psuedocode看起来像:
If $testcount = 1 then do your insert.
else if $testcount = 0 then echo your message.
答案 2 :(得分:0)
希望这会对你有所帮助;如果您没有独特的ID,我相信这将最适合您的需求;请注意,这不是完整的代码;您需要在其他信息中添加一些以适合您的问题;
// Checks if the value already exist on the database
$query = SELECT EXISTS(SELECT column_name FROM table_name WHERE
condition LIMIT 1)
// If condition is not met it will proceed with save
if (mysql_num_rows(!$query) > 0) {
echo "Activity Booked";
} else { // If condition is met it will echo an error message
echo "Unable to booked activity"; }