在url而不是id php中获取产品名称

时间:2012-11-12 22:21:03

标签: php mysql url

我正在大学项目的购物车网站上工作,需要一些帮助。

该网站目前正在http://www.cutecupcak.es生产。

目前,每个产品都有http://cutecupcak.es/product.php?id=11之类的网址,但我希望它类似于http://cutecupcak.es/product.php?id=chocolate_cupcake

这是我们为完成这项工作而给予的代码。

if(isset($_GET['id'])) {
$id = $_GET['id'];
$result = mysql_query("SELECT * FROM `CAKE` WHERE `cake_id`=($id)");    
}

我需要更改哪些内容才能显示cake_name而不是cake_id

5 个答案:

答案 0 :(得分:2)

您可以将名称放在网址中,这应该非常简单,因为您在数据库中同时拥有名称和ID,并且可以搜索并使用它们。

名称和身份
但我会反对它。产品名称可以稍微改变,更改它意味着旧链接不再有效。

我会创建一个这样的网址:

http://cutecupcak.es/product.php?id=11&name=chocolate_cupcake 

或者更确切地说:

http://cutecupcak.es/product/11/chocolate_cupcake

可以安全地索引这些网址。您保留数字ID,可用于查找数字。名称也在URL中,这对于可读性和SEO(搜索引擎优化)有好处,但名称没有实际意义。你可以安全地忽略它,因为你得到了这个号码。因此,更改名称后,所有以前编入索引和链接的网址都将保持有效。

我会选择在产品名称中使用破折号而不是下划线。我相信chocolate-cupcakechocolate+cupcake的索引都比chocolate_cupcake更好,但我对此主题的信息可能有点陈旧。

<强> MySQL的?参数!
我还建议您不再使用mysql_*,并开始使用PDOmysqli。两者都允许使用参数化查询。这允许您以安全透明的方式将id或名称传递给查询。比使用mysql_real_escape_string或类似功能更安全,更清洁,性能更好。它特别安全,因为一旦习惯了使用参数,就会开始将所有变量作为参数传递。虽然您可以忘记在当前查询中转义变量,但您不可能忘记转义变量,因为它不需要转义。

答案 1 :(得分:2)

通常,如果您想通过名称而不是ID引用您的产品 - 您应该使用UNIQUE键添加一个新列(我总是将其命名为“slug”)。然后,在添加或编辑产品时,根据其名称为slug列生成新值。例如 - 从“巧克力蛋糕”中你将创建“chocolate_cake”。然后你必须检查slug是否是唯一的 - 如果不是 - 以某种方式解决冲突(例如“chocolate_cake_1”)。

如果您完成了所有这些设置 - 只需通过独特的slug选择合适的产品:

$result = mysql_query("SELECT * FROM `CAKE` WHERE `slug`='" . mysql_real_escape_string($_GET['id']) . "'"); 

并且 - obviosuly - 使用mysqli而不是弃用的mysql函数。

http://php.net/manual/en/mysqli.query.php

答案 2 :(得分:1)

尝试这样的事情:

if(isset($_GET['id'])) {
   $id = $_GET['id'];
   $result = mysql_query("SELECT * FROM `CAKE` WHERE `cake_name`=(". mysql_real_escape_string($id). ")");    
}

注意:我还添加了mysql_real_escape_string,因为这样做不会造成巨大的SQL注入风险。

答案 3 :(得分:0)

我认为这只会改为:

$result = mysql_query("SELECT * FROM `CAKE` WHERE `cake_name`=($id)"); 

答案 4 :(得分:0)

以下是您必须做的事情的蓝图: 1-在表格中,您应将cake_name字段设置为唯一。 2-你的sql查询应该是:

$result = mysql_query("SELECT * FROM `CAKE` WHERE `cake_name`=($id)");    

3-更改找到的产品列表链接,以获取cake_name值而不是数字ID。