2011-08-08 32 views
1

我有这个问题了一会儿,构建网址无项目ID并获得正确的项目

让我们说我们有一个电影网站

而且我们有一个名为Test-movies123!数据库中的电影,

现在我想要做的是做一个网址watch/test-movie123-{$id}/,然后用ID查询数据库,

现在的问题是,ID不应该在那里,我该如何解决这个问题? 如果我从URL中test-movie123和搜索它,我不会找到它,因为它没有!,除非我用LIKE但那不是很可靠的......

任何人都可以提出什么吗?将不胜感激

回答

4

那么,你可以创建一个规则,采取电影标题,并把它变成一个slu。。所以,你会知道你总是将标题缩小,删除了除字母,数字和破折号以外的任何东西,并将空格转换为单个短划线。

然后将其存储在数据库的另一列中,并确保您强制唯一。采取网址并从中搜索该列。

从这一点,你只需要处理发生的情况,如果你有第二个视频上传,产生完全相同的slug。这里有很多选项...追加一个随机数slu,,增加一个数字并追加它等等。

+0

我看,谢谢,任何想法或我可以用来正确剥离它的PHP代码示例? –

+0

'$ slug = preg_replace('/ \ s + /',' - ',preg_replace('/ [^ A-Za-z0-9 \ s] /','',strtolower($ original)));' –

+0

我使用'$ original ='测试了我的电影-123!';'并且将它转换为'test-my-move123'。对不起,一起运行它;我的测试用例在三条线上打破了mods,但由于我们不能在评论中插入换行符,因此我按照上面的格式对它进行了格式化。 –

2

要做到这一点,你可能在你的数据库中有类似于primary_key的东西 “test-movies123 ”。

想象一下,您有一个控制面板,您可以在表单中插入电影。 然后使用标题测试Movies123!将它保存在类似这样的例子数据库:

ID:AUTO_INCREMENT NUMBER 键名:sanityTitle( “测试Movies123!”)< - 这应该救 “测试movies123” 标题: “测试Movies123!” 东西:“blablabla”

注意sanityTitle()将您的函数从标题中准备友好的URL。

那么你的URL看起来像 手表/测试movie123 /使用的URL 或 手表正则表达式控制/?ID =测试movie123原料

你将要被索引或主键搜索“键名“在表格中,它会输出1行,包含所有的东西。