2011-11-03 51 views
1

是否有检测到重复表单提交的PHP?PHP中的简单重复单词检查器

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

唯一的问题是,当用户提交这样的内容:“Google”。它会被提交,尽管已经有一个包含“Google”的记录。

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

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

那么我该如何解决这个问题?有没有好的脚本?

+1

如果您正在寻找完全匹配,则可以使用等号进行字符串比较。 – hafichuk

+1

因为你说'它得到了一票',我得出结论它是关于投票的话,如果我没有错,那么在这里要避免的一件事是拥有相同的用户投票两次或更多。要管理这个,你必须将每个投票与一个特定的用户相关联,这意味着如果一个单词已经存在并且你必须进行投票,你必须检查该用户是否已经投票过。这可以通过在投票表上使用user_id字段作为外键来完成,因此每次用户想要对现有单词投票时都要检查该字段。该单词不存在的情况在此处已经被其他用户提及。 – Melsi

回答

1

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

当前输入栏的限制是什么。你会期望用户使用标点符号,数字和其他一般的非字母字符吗?

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

如果是这样的话我就你一个preg_replace或正则表达式,以消除任何的这些不必要的字符。因此消除问题是源头。

一旦你验证/洁净你可以使用一个简单的SQL插入,像这样输入:帮助一个小

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

希望。

+0

好的...只是寻找这个答案!它没有告诉任何事情,但我现在可以处理它:)接受它。 – Akos

+0

如果您需要更多帮助,请在此回复,我会尽我所能! –

+0

您还需要确保无论您尝试检查重复项是否在表格中定义为KEY。 –

1

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

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

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