0

希望有人可以帮助解决这个问题。

我目前在我的网站上的各个产品页面中有一个“添加到购物车”选项,它将“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 而不是 =,但任何工作代码都足够了。

非常感谢,乔

4

3 回答 3

0

好吧,我假设您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'");
于 2012-04-17T14:21:14.700 回答
0

mysql_query 返回一个结果资源以供以后处理购买其他 mysql 函数,如mysql_num_rows, mysql_fetch_array等。尝试将这些行添加到您的代码中:

$pid = mysql_fetch_assoc($pid);
$pid = $pid[0]['id'];

如果你的 mysql_query 在语法上是正确的,你应该得到你的 pid。如果它仍然不起作用,请尝试echo mysql_error();查看到底出了什么问题。

于 2012-04-17T14:25:57.747 回答
0

除了sql 注入问题之外,您遇到的问题是查询不返回 id 而是成功时返回资源。

您可能希望将其更改为类似(并添加错误处理...):

$result = mysql_query("SELECT id FROM products WHERE product_name='$prodAdd' LIMIT 1'");
if ($row = mysql_fetch_assoc($result)) {
    $pid =  $row['id'];
}
于 2012-04-17T14:27:28.283 回答