我正在大学项目的购物车网站上工作,需要一些帮助。
该网站目前正在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
?
答案 0 :(得分:2)
您可以将名称放在网址中,这应该非常简单,因为您在数据库中同时拥有名称和ID,并且可以搜索并使用它们。
名称和身份
但我会反对它。产品名称可以稍微改变,更改它意味着旧链接不再有效。
我会创建一个这样的网址:
http://cutecupcak.es/product.php?id=11&name=chocolate_cupcake
或者更确切地说:
http://cutecupcak.es/product/11/chocolate_cupcake
可以安全地索引这些网址。您保留数字ID,可用于查找数字。名称也在URL中,这对于可读性和SEO(搜索引擎优化)有好处,但名称没有实际意义。你可以安全地忽略它,因为你得到了这个号码。因此,更改名称后,所有以前编入索引和链接的网址都将保持有效。
我会选择在产品名称中使用破折号而不是下划线。我相信chocolate-cupcake
和chocolate+cupcake
的索引都比chocolate_cupcake
更好,但我对此主题的信息可能有点陈旧。
<强> MySQL的?参数!
我还建议您不再使用mysql_*
,并开始使用PDO
或mysqli
。两者都允许使用参数化查询。这允许您以安全透明的方式将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函数。
答案 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。