2010-02-25 99 views
0

我需要做的是检查一个url是否已经在数据库中使用php提交。检查一个url是否已经在php数据库中提交

我有一个数据库表,我存储用户提交的URLs。但是我想在将数据库插入到数据库之前检查这些URL是否已经提交或者不在数据库中。 例如, 类似于http://www.example.com,http://www.example.com/,http://example.com和的URL应该返回false,如果它们中的任何一个已经插入数据库,因为它们都是相同的URL。 我想我们可以通过使用正则表达式来完成这项工作。但是我在正则表达式方面有点虚弱,所以需要你的帮助。 谢谢

编辑

你好,让我们假设,如果URL是在阵列不是数据库只是为了清楚。我知道唯一的键和匹配的网址与数据库的结果。但是,如果你仔细观察它,这里我有一个不同的问题

不同的问题。

$ urls = array('http://www.example.com/newpage.html','http://www.example.com/newpage.html');

case 用户提交一个url。假设http://example.com/newpage.html

现在,作为一个url http://www.example.com/newpage.html是$网址阵列和http://www.example.com/newpage.htmlhttp://example.com/newpage.html(userinput加www)提供的同一页,所以我需要一个函数进行检查,并返回false如果URL是阵列中可用。我希望我现在澄清我的自我。

所以它不检查域或在mysql表中为url字段创建唯一键,我认为迄今为止。我认为我们需要使用regExp。任何帮助?

+3

'www.example.com'和'example.com'不是*相同的URL。 – 2010-02-25 11:05:54

+0

但我想说,他们都是一样的,大部分时间都是一样的。 – Yalamber 2010-02-25 11:27:44

+0

在检查前试着去掉任何尾随的'/'。这会使'http:// www.example.com /'和'http:// www.example.com'匹配。至于'www'部分,本的权利。如果您确实假设'www'并且没有任何内容,请尝试在添加任何URL时将空白替换为空白。这样,您将拥有'example.com'而不是'www.example.com'作为数据库中的所有记录,让您能够正确匹配。 – casraf 2010-02-25 11:32:48

回答

0

不清楚你问题中的URL是什么。网址是资源。如果您的意思是提交通过GET方法发送的HTTP变量保存到数据库,您可以使用其中一个变量的值作为主键在数据库中进行搜索。

+0

请查看上面的编辑 – Yalamber 2010-02-25 11:49:43

0

就像本詹姆斯说的,www.example.com和example.com是不一样的。你的URL含义也有点含糊。

但是如果你想检查example.com是否已经存在。只需使用类似选项对您的数据库进行计数:

select count(*) from table where url like '%.example.com%'

其中example.com是从完整url中提取的。如果count> 0,则该域已在数据库中。你将不得不调整这个解决方案,但我应该使用这样的东西。

+0

'http://badexample.com'上的中断 – nickf 2010-02-25 11:19:52

+0

@nickf:基本上它破坏了很多,这就是为什么我提到了微调。为您的问题添加了一个小修复。 – 2010-02-25 11:26:47

+0

另外,example.com/test和example.com/blue应该一样吗?我想不是。将请求URI添加到支票应该有所帮助。所以'WHERE \'URL \'LIKE'%example.com/test%''。 – casraf 2010-02-25 11:29:07

0

数据库是您应用程序中的一个不同层。正则表达式在这里没有帮助,因为你必须首先检查数据库中的内容,才能在结果集上使用正则表达式。

但是,您可以使列存储URL UNIQUE并使用INSERT IGNORE

从MySQL手册

如果使用忽略关键字,在执行INSERT语句作为警告,而不是治疗发生的错误。例如,如果没有IGNORE,表中重复表中现有UNIQUE索引或PRIMARY KEY值的行会导致重复键错误,并且语句会中止。使用IGNORE时,该行仍未插入,但未发出错误。

这仍然会插入example.comwww.example.com但正如他们是真正不同的字符串。您可以使用parse_url在插入前检查并准备它们。

相关:

0

也许使得现场 “独有” 将有助于这样MySQL将检查该值。如果你得到一个1062的返回码,那么你就会知道它已经在数据库中了。

当然,如果您的帐户数量过多,这可能不是一个好主意。你应该用php来检查URL,你总是用相同的方式插入它们。 (如添加或删除'http://'或www)

相关问题