在我的简单网络表单中防止重复输入的问题。
我的表记录了来自网络表单的用户输入,并按日期区分,例如日期()。如何防止具有相同名称的用户在一个日期内输入两次信息,例如相同的用户名不能在同一天输入两次,但可以在其他日期输入吗?
答案 0 :(得分:9)
你的桌子应该有这些:
create table tablename (
...
user_id bigint, -- or whatever
date_created date,
unique key(user_id, date_created)
...
);
答案 1 :(得分:1)
您可以简单地创建复合主键。对于您的情况,这意味着您的主键必须包含日期字段和用户名字段。
答案 2 :(得分:1)
以多种方式。
首先,您可以在表格上创建索引。 (我使用简单的表格作为例子。)
CREATE TABLE `test` (
`id` INT NOT NULL ,
`name` VARCHAR( 255 ) NOT NULL ,
`date` DATE NOT NULL ,
PRIMARY KEY ( `id` )
) ENGINE = MYISAM;
ALTER TABLE `test` ADD UNIQUE (
`name` ,
`date`
);
这是MySQL方式。
您还应该在PHP中进行检查,尽管您可以在插入时执行此操作(MySQL将返回错误并且您可以检查它)。但是在插入(SELECT * from test WHERE name=USER AND date=DATE
)之前可以进行额外的SELECT并检查记录计数。如果它大于0,则显示错误。
保存时,您很少需要担心一个额外的SQL。如果你应该,只需检查MySQL语句的错误(MySQL方式:))。
答案 3 :(得分:0)
在用户和日期列上创建唯一键