希望有人能帮忙。
我目前在我的网站上的各个产品页面中有一个"添加到购物车"选项,它将"pid"作为变量发送到购物车页面并且运行良好。 我的购物车页面上采用 pid 的代码如下:
if (isset($_POST['pid'])) {
$pid = $_POST['pid'];
但是,由于不想重写新代码,我只想更改获取$pid的方式,因为我知道它在代码的其余部分中都有效,我认为这将是答案:
if (isset($_POST['product_code'])) {
$prodAdd = $_POST['product_code'];
$pid = mysql_query("SELECT id FROM products WHERE product_name='$prodAdd' LIMIT 1'");
谁能看到任何明显的东西? 如果我强制将$pid分配为产品名称,它可以正常工作,我可以回显$prodAdd所以我只能假设这是我的查询有问题,我一生都无法弄清楚我试图改变我能想到的一切!
哦,如果有人可以提供帮助,我实际上更喜欢这个术语是 LIKE 而不是 =,但任何工作代码都足够了。
非常感谢,乔
好吧,我假设您的product_code
没有存储在product_name
列中:
$pid = mysql_query("SELECT id FROM products WHERE product_code='$prodAdd' LIMIT 1'");
我们假设您随后正确获取了该行。 ($pid
只是一个结果资源...
请保护您的数据库免受SQL注入!您的代码在当前形式下非常容易受到攻击:
if (isset($_POST['product_code'])) {
// At a minimum, escape $prodAdd with mysql_real_escape_string()
// This is NOT OPTIONAL! YOU MUST DO THIS!
$prodAdd = mysql_real_escape_string($_POST['product_code']);
$pid = mysql_query("SELECT id FROM products WHERE product_code='$prodAdd' LIMIT 1'");
if (!$pid) {
// query error
echo mysql_error();
}
else {
// All results into $products (though you limited it to 1)
$products = array();
while ($row = mysql_fetch_assoc($pid)) {
$products[] = $row;
}
// If you expect exactly one result, no need for a loop
// $product = mysql_fetch_assoc($pid);
// Get the value you need:
var_dump($products);
}
}
如果你想把它作为一个LIKE
,只需连接%
:
$pid = mysql_query("SELECT id FROM products WHERE product_name LIKE '%$prodAdd%' LIMIT 1'");
mysql_query返回一个结果资源以供以后处理 购买其他 MySQL 函数,如 mysql_num_rows, mysql_fetch_array
等。 尝试将以下行添加到代码中:
$pid = mysql_fetch_assoc($pid);
$pid = $pid[0]['id'];
如果你的mysql_query语法正确,你应该得到你的pid。如果仍然不起作用,请尝试echo mysql_error();
看看到底出了什么问题。
除了 sql 注入问题之外,您遇到的问题是查询在成功时不返回 id,而是返回资源。
您可能希望将其更改为类似(并添加错误处理...
$result = mysql_query("SELECT id FROM products WHERE product_name='$prodAdd' LIMIT 1'");
if ($row = mysql_fetch_assoc($result)) {
$pid = $row['id'];
}