【问题标题】:Adding multiple products into one shopping cart将多个产品添加到一个购物车
【发布时间】:2014-04-18 16:32:20
【问题描述】:

嘿,我正在尝试将来自不同产品页面的产品添加到一个购物车中,例如,如果我从华硕页面选择了一个产品,从 acer 页面选择了另一个产品,它会将它们都显示在一个购物车中,但现在我得到了一个错误说

select name from asus where serial=1

字段列表中的列“名称”不明确

我为每个产品创建了不同的表

CREATE TABLE asus ( serial int(11), name varchar(20), price float(), picture varchar(80) );

CREATE TABLE acer ( serial int(11), name varchar(20), price float(), picture varchar(80) );

CREATE TABLE lenovo ( serial int(11), name varchar(20), price float(), picture varchar(80) );

这是获取名称和价格的函数:

function get_product_name($pid){
    $result=mysql_query("select name from asus,acer,lenovo
    where serial=$pid") or die("select name from products where serial=$pid"."<br/><br/>".mysql_error());
    $row=mysql_fetch_array($result);
    return $row['name'];
}




 function get_price($pid){
    $result=mysql_query("select price from  asus,acer,lenovo where serial=$pid") or die("select name from products where serial=$pid"."<br/><br/>".mysql_error());
    $row=mysql_fetch_array($result);
    return $row['price'];
}

这是添加到购物车的功能,产品存在并获得总数:

function get_order_total(){
    $max=count($_SESSION['cart']);
    $sum=0;
    for($i=0;$i<$max;$i++){
        $pid=$_SESSION['cart'][$i]['productid'];
        $q=$_SESSION['cart'][$i]['qty'];
        $price=get_price($pid);
        $sum+=$price*$q;
    }
    return $sum;
}

function addtocart($pid,$q){
    if($pid<1 or $q<1) return;

    if(is_array($_SESSION['cart'])){
        if(product_exists($pid)) return;
        $max=count($_SESSION['cart']);
        $_SESSION['cart'][$max]['productid']=$pid;
        $_SESSION['cart'][$max]['qty']=$q;
    }
    else{
        $_SESSION['cart']=array();
        $_SESSION['cart'][0]['productid']=$pid;
        $_SESSION['cart'][0]['qty']=$q;
    }
}




function product_exists($pid){
    $pid=intval($pid);
    $max=count($_SESSION['cart']);
    $flag=0;
    for($i=0;$i<$max;$i++){
        if($pid==$_SESSION['cart'][$i]['productid']){
            $flag=1;
            break;
        }
    }
    return $flag;
}

这是每个产品页面中的添加到购物车按钮:

 <button type="button" title="Add to Cart" class="button btn-cart"onclick="addtocart(<?php echo $row['serial']?>)" />

购物车页面:

<?php
        if(is_array($_SESSION['cart'])){
        $max=count($_SESSION['cart']);
            for($i=0;$i<$max;$i++){
                $pid=$_SESSION['cart'][$i]['productid'];
                $q=$_SESSION['cart'][$i]['qty'];
                $pname=get_product_name($pid);
                $price=get_price($pid);

                if($q==0) continue;
        ?>
                <tr bgcolor="#FFFFFF"><td><?php echo $i+1?></td><td>
                <?php echo $pname?>

                </td>
                <td>RM 
                <?php echo $price?> 

【问题讨论】:

  • 您没有使用带有serialnamepricepicturebrand 的表是否有原因?
  • 不是答案,但作为仅供参考,最好不要使用保留关键字,例如列或表名称中的“名称”。它会导致各种各样的问题。想一想,这可能是答案。试试“select [name] from asus where serial=1”看看是否能解决问题。
  • 不,不是真的没有想过...但是如果我要使用品牌,我将如何称呼它
  • 我在上面的评论,该语法适用于 sql server。请参阅此代替 MySql - 从选择查询中转义保留字...:stackoverflow.com/questions/3993465/…

标签: php mysql sql


【解决方案1】:

在此处查看答案: SQL Query From 2 Tables Using Multiple Aliases

我建议将所有三个表组合成一个组合的产品表,并带有一个标志,表明它是什么类型的产品。

如果没有,则需要使用表别名。

function get_product_name($pid){
    $result=mysql_query("select isnull(isnull(a.name, c.name), l.name) as name from asus a,acer c,lenovo l
    where(a.serial=$pid OR c.serial=$pid OR l.serial=$pid) ") or die("select name from products where serial=$pid"."<br/><br/>".mysql_error());
    $row=mysql_fetch_array($result);
    return $row['name'];
}

【讨论】:

  • 谢谢你,但它给出了这个错误 select name from products where serial=1 Incorrect parameter count in call to native function 'isnull'
猜你喜欢
  • 1970-01-01
  • 2020-01-14
  • 1970-01-01
  • 2017-11-19
  • 2012-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多