PHP中的简单重复单词检查器

时间:2011-11-03 14:27:26

标签: php forms duplicates duplicate-data

有没有用PHP检测重复表单提交?

我有一个用于在其中输入单字短语的文本字段(例如“Google”)。当用户按下提交按钮时,将提交包含该文本字段的表单。 之后 - 在PHP处理页面上 - 从数据库中选择一些数据。如果提交的单词不存在,则会将其插入到db中。但如果它已经存在,那么现有的就会投票。这可能有点复杂,但我认为这是可以理解的。

唯一的问题是当用户提交类似这样的内容时:“Google”。它已被提交,但已有包含“Google”的记录。

我的问题很简单: 我该如何检查重复项?

[我已经尝试过mysql函数:LIKE,但它没有真正起作用,因为当有人提交这样的东西时:“高飞”它中包含“Goo”,它已经在单词中了“Google” - >已经插入。 ]

那么我怎么能解决这个问题呢?有什么好的剧本吗?

4 个答案:

答案 0 :(得分:1)

您可以将数据库的name列设置为唯一索引,这意味着不会写入任何重复项,您可以在插入SQL中检查该错误。

但是在处理页面中更容易做一个SELECT 'submittedword' FROM table - 如果没有结果,那么你知道它是一个新单词,你可以进行插入。如果它返回结果,那么你执行增量函数。

答案 1 :(得分:1)

这似乎是INSERT ... ON DUPLICATE KEY UPDATE的一个很好的应用,其中您的密钥是unique密钥,而您的更新是数字列。

答案 2 :(得分:1)

This thread should help you

它提供了两个解决方案,它们都应该工作,取决于你是想修改你的sql查询还是用php做逻辑。

$result = mysql_query("update test set col='test' where col_id='1';");       
if (mysql_affected_rows()==0) {
    $result = mysql_query("insert into test (col_id, col) values ('1','test');");
}

您还应该考虑在不想重复的列上设置唯一索引。

它还提供:INSERT ON DUPLICATE KEY UPDATE

答案 3 :(得分:1)

虽然我同意@Dustin关于使用INSERT ... ON DUPLICATE KEY UPDATE的问题,但您可能希望在提交期间使用javascript或PHP在用户输入级别解决此问题,而不是让SQL尝试匹配字符串。

目前输入字段有哪些限制。您是否希望用户使用标点符号,数字和其他常规非字母字符?

example of non-alpha: 1234567890-=()!@#$%^&*_+,./<>?;':"|\

如果是这种情况,我会preg_replace或regExp删除任何这些不需要的字符。因此消除问题的来源。

验证/清理输入后,可以使用如下的简单SQL插入:

INSERT INTO table (string, count) VALUES (1,2)
   ON DUPLICATE KEY UPDATE count=count+1;

希望有所帮助。