在PHP上更改GET参数并使用mod_rewrite

时间:2013-10-09 21:59:51

标签: php apache .htaccess mod-rewrite

我是一个非常新手试图完成一份工作,所以让我在这里解释一下这个问题:

我有一个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。

我怎么到达那里?谢谢你的帮助!

3 个答案:

答案 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_nameretailer_url_name

值(示例)

43 The Awesome Supermarketawesome-supermarket

使用正则表达式模式检查$_GET['rid']以检查字母和-字符并与数据库中的retailer_url_name匹配?

// check for letters and -
if (preg_match('/^[a-z\-]+$/', $_GET['rid']) {
// do stuff here
} else {
// invalid ID
}