【问题标题】:Ajax dynamic S_SESSION generating doesnt update the SESSION valuesAjax 动态 S SESSION 生成不会更新 SESSION 值
【发布时间】:2014-03-08 22:13:48
【问题描述】:

我对搜索相关产品的搜索字段有 ajax 自动完成功能。为了不显示已与该产品关联的产品,我制作了此功能:

function getRelatedProducts($pid){
$str='SELECT distinct related_id FROM related_products WHERE product_id="'.$pid.'" ';
$result=mysql_query($str) or die('Mysql Error:'.mysql_error().'<br /> Query:'.$query);
$num_rows=mysql_num_rows($result);
$str='';
for($i=0;$i<$num_rows;$i++){
    $row=mysql_fetch_row($result);
    if($i==0) $str=$row[0];
    else $str.=','.$row[0];
}
return $str;
}    
$_SESSION['related_products']=getRelatedProducts($_GET['id']);      

这样,我存储了已经与产品关联的产品 ID 的新数组值。 之后是自动完成搜索查询:

$query = "SELECT id,bg_product_name,model FROM products WHERE     
(bg_product_name LIKE '%".$q."%' or model LIKE '%".$q."%') AND        
active='1' and id NOT IN ('".$_SESSION['related_products']."') group by id LIMIT 11";    

但查询总是显示相同的产品 - 即使它们已经与产品相关联..请帮助我找出我错在哪里.. 提前谢谢你

【问题讨论】:

  • 我在这里没有看到 jquery,也没有 ajax,也没有看到它与问题的关系
  • @RoyalBg 他通过 AJAX 从 jQuery UI 自动完成调用这个 PHP 函数。
  • 我是否应该复制案件中涉及的所有3个文件以证明它使用jquery和ajax?问题出在复制的查询中,这就是为什么我将您的注意力集中在它们上的原因..
  • @thecore7 没有,但是当问题不相关时,就不要提及它,或者不要把它放在高优先级。您的摘要以 ajax 开头

标签: php jquery sql ajax autocomplete


【解决方案1】:

您在整个 related_products 列表周围加上引号,因此它不会将其视为要排除的事物列表,它只是一个值。假设related_id 是一个整数,使用:

$query = "SELECT id,bg_product_name,model 
          FROM products 
          WHERE     
            (bg_product_name LIKE '%".$q."%' or model LIKE '%".$q."%') 
            AND        
            active='1' and id NOT IN (".$_SESSION['related_products'].") 
          group by id 
          LIMIT 11";    

【讨论】:

  • Barmar,我改成了你的,下面是查询的样子:SELECT id,bg_product_name,model FROM products WHERE (bg_product_name LIKE '%new%' or model LIKE '%new%') AND active ='1' and id NOT IN () group by id LIMIT 11 - 这是错误的,因为 not in 不包含 id 数组。 ?
  • 你的PHP中有session_start()吗?
  • 是的,它在文件的顶部,但即使没有它,SESSION 在文件中也是可见的
  • 这是我的查询的样子,但返回错误的结果:SELECT id,bg_product_name,model FROM products WHERE (bg_product_name LIKE '%new%' or model LIKE '%new%') AND active=' 1' 和 id NOT IN ('752,753,754') 按 id LIMIT 11 分组
  • 如您所见,数字列表周围有引号,因此它只是一个要比较的值,而不是列表。我不明白为什么您在删除引号时会得到一个空列表。应该是完全一样的,除了752,753,754周围没有引号。
猜你喜欢
  • 2017-10-16
  • 2017-12-17
  • 1970-01-01
  • 1970-01-01
  • 2015-07-25
  • 2015-02-15
  • 2016-03-21
  • 2013-04-01
  • 2021-04-04
相关资源
最近更新 更多