我是一个非常新手试图完成一份工作,所以让我在这里解释一下这个问题:
我有一个chasback网站,数据库上有零售商,我的链接是:
a href="/view_retailer.php?rid=<?php echo $tops_row['retailer_id']; ?>"
显示内容的php页面包含:
if (isset($_GET['rid']) && is_numeric($_GET['rid']))
{
$retailer_id = (int)$_GET['rid'];
}
else
{
header ("Location: index.php");
exit();
}
我的网址上显示:/ view_retailer?rid = 8
我想将其更改为/ view_retailer?rid = retailer-title
我无法理解为什么它不起作用,我在我的数据库中的列零售商名称和标题。
然后我需要通过mod_rewrite从/ view_retailer?rid = retailer-title更改为/ loja / retailer-title。
我怎么到达那里?谢谢你的帮助!
答案 0 :(得分:2)
我可以回答第一位
a href="/view_retailer.php?rid=<?php echo $tops_row['retailer_id']; ?>"
需要:
<a href="/view_retailer.php?rtitle=<?php echo $tops_row['retailer_title']; ?>"
和
if (isset($_GET['rtitle']) && is_string($_GET['rtitle']))
{
$retailer_title = (string)$_GET['rtitle'];
}
else
{
header ("Location: index.php");
exit();
}
如果您打算用它来查询数据库,您还应该清理来自GET / POST的任何内容,以确保它是安全的。
至于mod_rewrite。非常垃圾,所以我无法帮助解决这个问题。
答案 1 :(得分:0)
在零售商表中添加名为“slug”的列或类似的东西。然后你必须修改你的查询,因此你不是在寻找id但是某些字符串(slug)。确保你的slugs只包含适合网址的标志:没有空格,非拉丁字母等。
说到代码,它可能看起来像这样:
if (!empty($_GET['title']))
{
$title = someSanitizeFunc($_GET['title']);
$retailer = db()->queryOne("SELECT id FROM retailers where slug = '".$title."');
}
这只是一个例子,你必须将它调整到你的cms或你使用的任何东西。
答案 2 :(得分:0)
如何在数据库中使用3个表?
retailer_id
retailer_name
和retailer_url_name
值(示例)
43
The Awesome Supermarket
和awesome-supermarket
使用正则表达式模式检查$_GET['rid']
以检查字母和-
字符并与数据库中的retailer_url_name
匹配?
// check for letters and -
if (preg_match('/^[a-z\-]+$/', $_GET['rid']) {
// do stuff here
} else {
// invalid ID
}