0

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

我有一个 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();
}

在我的 URL 上显示:/view_retailer?rid=8

我想将其更改为 /view_retailer?rid=retailer-title

我不知道为什么它不起作用,我的数据库中有列retailer_id 和title。

然后我需要通过 mod_rewrite 从 /view_retailer?rid=retailer-title 更改为 /loja/retailer-title。

我怎样才能到达那里?谢谢你帮助我!

4

3 回答 3

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。对此非常垃圾,所以我无法提供帮助。

于 2013-10-09T22:04:33.663 回答
0

在零售商表中添加名为“slug”或类似名称的列。然后你必须修改你的查询,因此你不是在寻找 id 而是在寻找某个字符串(slug)。确保您的 slug 仅包含适用于网址的符号:没有空格、非拉丁字母等。

当涉及到代码时,它可能看起来像这样:

if (!empty($_GET['title']))
{
    $title = someSanitizeFunc($_GET['title']);
    $retailer = db()->queryOne("SELECT id FROM retailers where slug = '".$title."');
}

这只是示例,您必须将其调整为您的 cms 或您使用的任何内容。

于 2013-10-09T22:11:51.793 回答
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
}
于 2013-10-09T22:14:11.893 回答