0

我正在为一个大学项目开发​​一个购物车网站,需要一些帮助。

该网站目前正在制作中,网址为http://www.cutecupcak.es

目前,每个产品都有一个类似http://cutecupcak.es/product.php?id=11的网址,但我希望它是类似http://cutecupcak.es/product.php?id=巧克力蛋糕

这是我们为完成这项工作而获得的代码。

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

我需要改变什么才能让cake_nameto 显示而不是cake_id?

4

5 回答 5

2

您可以将名称放在 url 中,这应该很简单,因为您的数据库中有名称和 id,您可以搜索并使用两者。

name 和 id
但我建议不要这样做。产品名称可以稍作更改,更改它意味着旧链接将不再起作用。

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

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

或者更确切地说:

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

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

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

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

于 2012-11-12T22:29:24.693 回答
2

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

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

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

并且 - 显然 - 使用 mysqli 而不是不推荐使用的 mysql 函数。

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

于 2012-11-12T22:30:58.527 回答
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 注入风险。

于 2012-11-12T22:28:48.013 回答
0

我认为这只是更改为:

$result = mysql_query("SELECT * FROM `CAKE` WHERE `cake_name`=($id)"); 
于 2012-11-12T22:25:18.227 回答
0

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

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

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

于 2012-11-12T22:32:17.700 回答