【发布时间】:2010-07-13 09:55:09
【问题描述】:
关于防止在我的简单网络表单中重复输入的问题。
我的表格记录来自网络表单的用户输入,并按日期区分,例如日期()。如何防止同名用户在一个日期内输入两次信息,例如同一个用户名不能在同一日期输入两次,但可以在其他日期输入?
【问题讨论】:
关于防止在我的简单网络表单中重复输入的问题。
我的表格记录来自网络表单的用户输入,并按日期区分,例如日期()。如何防止同名用户在一个日期内输入两次信息,例如同一个用户名不能在同一日期输入两次,但可以在其他日期输入?
【问题讨论】:
你的桌子应该有这些:
create table tablename (
...
user_id bigint, -- or whatever
date_created date,
unique key(user_id, date_created)
...
);
【讨论】:
show create table tablename 并发布结果。
您可以简单地创建复合主键。对于您的情况,这意味着您的主键必须由日期字段和用户名字段组成。
【讨论】:
以多种方式。
首先,您可以在表上创建索引。 (我以简单的表格为例)。
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 方式 :))。
【讨论】:
在用户和日期列上创建唯一键
【讨论】: