Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自定义php从搜索字符串添加到购物车_Php_Mysql - Fatal编程技术网

自定义php从搜索字符串添加到购物车

自定义php从搜索字符串添加到购物车,php,mysql,Php,Mysql,希望有人能帮上忙 我目前有一个“添加到购物车”选项,从我的网站上的各个产品页面,它发送“pid”作为一个变量到购物车页面,并完美地工作。我的购物车页面上采用pid的代码位如下: if (isset($_POST['pid'])) { $pid = $_POST['pid']; 然而,为了不想重新编写新代码,我只想改变$pid的获取方式,因为我知道它在代码的其余部分都起作用,我想这就是答案: if (isset($_POST['product_code'])) { $prodAdd = $_PO

希望有人能帮上忙

我目前有一个“添加到购物车”选项,从我的网站上的各个产品页面,它发送“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而不是=,但是任何工作代码都可以


非常感谢,Joe

好吧,我假设您的
产品\u代码
未存储在
产品\u名称
列中:

$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);
  }
}
如果您想将其作为类似于的
,只需在
%
上串联即可:

$pid = mysql_query("SELECT id FROM products WHERE product_name LIKE '%$prodAdd%' LIMIT 1'");

mysql\u query返回一个要稍后处理的结果资源购买其他mysql函数,如
mysql\u num\u rows、mysql\u fetch\u array
等。尝试将以下行添加到代码中:

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

如果您的mysql_查询语法正确,您应该获得pid。如果仍然不起作用,请尝试
echo mysql_error()
查看到底出了什么问题。

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

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


美好的享受你的数据库垃圾。@MarcB有时我只想退出PHP,走开。只要互联网从不丢弃垃圾教程,这是一场失败的战斗。只要在毫无意义/无用的页面上销售广告赚钱,网络上就会有垃圾。那么,有没有指向任何有用而非垃圾资源的指针?@user1266648好的PHP教程很少。php.net上的函数文档始终是开始的地方。对于核心PHP功能,官方文档几乎总是有很好的示例来演示良好的实践。不过,请注意下面评论中用户提供的示例。谢谢,我对php的理解显然比我想象的要少得多。这是一个封闭的网站,通过htaccess进行密码转换,然后通过“用户”数据库进行密码转换,因此,如果有人可怜到攻击它,我至少会知道它是谁谢谢你,可能是我实现了错误,但我从mysql获得了无效的资源错误。\u fetch\u assoctock感谢你的响应和解释。它似乎与mysql_fetch_数组配合使用,但显然我的全部代码都毫无价值
$result = mysql_query("SELECT id FROM products WHERE product_name='$prodAdd' LIMIT 1'");
if ($row = mysql_fetch_assoc($result)) {
    $pid =  $row['id'];
}