• 简单购物车


    利用session和数据库简单实现商品的添加;其中有用到smarty模板中的数据库连接类和数据库管理类;

    定义三个按钮,分别调用三个函数,参数为商品的id号(默认是10);代码如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
        <table>
            <tr>
              <input id="buy" name="buy" type="button" value="立即购买" class="buy" onclick="subbuycommo(10)" >
              <input id="allshow" name="allshow" type="button" value="查看详情" class="showinfo" onclick="openshowcommo(10)"/>
              <input id="buy" name="buy" type="button" value="加入购物车" class="buy" onclick="buycommo(10)" /></td>
            </tr>
        </table>
    </body>
    </html>
    

    三个JavaScript函数代码如下:

    <script>
    // 查看详情
        function openshowcommo(key){
            open('test.php?key='+key,'_blank',false);//test.php接收地址栏key(商品id) 另外处理不做讨论
        }
    // 加入购物车
        function buycommo(key){
            var url="test.php?key="+key;
            xmlhttp=new XMLHttpRequest();
            xmlhttp.open("GET",url,true);
            xmlhttp.onreadystatechange = function(){
            if(xmlhttp.readyState == 4 && xmlhttp.status==200){
                    var msg = xmlhttp.responseText;
                    if(msg == '2'){
                        alert('请您先登录');
                        return false;
                    }else if(msg == '3'){
                        alert('该商品已添加');
                        return false;
                    }
                }
            }
            xmlhttp.send(null);
        }
    
    // 商品详情---购买
    function subbuycommo(key){
        var url = "test.php?key="+key;
        xmlhttp=new XMLHttpRequest();
        xmlhttp.open("GET",url,true);
        xmlhttp.onreadystatechange = function(){
            if(xmlhttp.readyState == 4 && xmlhttp.status==200){
                    var msg = xmlhttp.responseText;
                    if(msg == '2'){
                        alert('请您先登录');
                        return false;
                    }else if(msg == '3'){
                        alert('该商品已添加');
                        // window.close();
                        return false;
                    }
                }
            }
            xmlhttp.send(null);
        }
    </script>
    

    下面是数据处理页test.php 代码;

    首先是smarty数据库连接类;代码如下:

    session_start(); 
    header ( "Content-type: text/html; charset=UTF-8" );                         //设置文件编码格式
    //数据库连接类
    class ConnDB{    
        var $dbtype;
        var $host;
        var $user;
        var $pwd;
        var $dbname;    
        //构造方法
        function ConnDB($dbtype,$host,$user,$pwd,$dbname){
            $this->dbtype=$dbtype;
            $this->host=$host;
            $this->user=$user;
            $this->pwd=$pwd;
            $this->dbname=$dbname;
        }
    
        //实现数据库的连接并返回连接对象
        function GetConnId(){         
            if($this->dbtype=="mysql" || $this->dbtype=="mssql"){
                $dsn="$this->dbtype:host=$this->host;dbname=$this->dbname";
            }else{
                $dsn="$this->dbtype:dbname=$this->dbname";
            }    
            try {
                $conn = new PDO($dsn, $this->user, $this->pwd);     //初始化一个PDO对象,就是创建了数据库连接对象$pdo
                $conn->query("set names utf8");
                return $conn;
            } catch (PDOException $e) {
                die ("Error!: " . $e->getMessage() . "<br/>");
            }         
        }    
    }

     然后是数据库连接管理类;代码如下:

    //数据库管理类
    class AdminDB{    
        function ExecSQL($sqlstr,$conn){        
            $sqltype=strtolower(substr(trim($sqlstr),0,6));
            $rs=$conn->prepare($sqlstr);        //准备查询语句
            $rs->execute();                    //执行查询语句,并返回结果集
            if($sqltype=="select"){
                $array=$rs->fetchAll(PDO::FETCH_ASSOC);        //获取结果集中的所有数据
                if(count($array)==0 || $rs==false)
                    return false;
                else
                    return $array;
            }elseif ($sqltype=="update" || $sqltype=="insert" || $sqltype=="delete"){            
                if($rs)
                    return true;
                else 
                    return false;    
            }
        }
    }
    

    最后是数据处理代码;如下:

    $connobj=new ConnDB("mysql","localhost","root","","db_business");//数据库连接类实例化
    $conn=$connobj->GetConnId();        //执行连接操作,返回连接标识
    $admindb=new AdminDB();//数据库操作类实例化
    
    /**
        *  1表示添加成功
        *  2表示用户没有登录
        *  3表示商品已添加过
        *  4表示添加时出现错误
        *  5表示没有商品添加
    */
    $reback = '0';
    if(empty($_SESSION['member'])){
        $reback = '2';//检测是否登陆
        // $_SESSION['member']="tang";
    }else{
        $key = $_GET['key'];//获取地址栏key 即是商品id
        if($key == ''){
            $reback = '5';
        }else{    
            $boo = false;//判断是否添加到数据库
            $sqls = "select id,shopping from tb_user where name = '".$_SESSION['member']."'";
            $shopcont = $admindb->ExecSQL($sqls,$conn);//从数据库取出商品id和商品数量 返回一个二维数组
            if(!empty($shopcont[0]['shopping'])){
                $arr = explode('@',$shopcont[0]['shopping']);//以@符号拆分 取出shopping数组中的商品id和数量
                foreach($arr as $value){
                    $arrtmp = explode(',',$value);//商品id和数量
                    if($key == $arrtmp[0]){//判断地址栏的key和数据库取出的id
                        $reback = '3';
                        $boo = true;
                        break;
                    }
                }
                if($boo == false){//添加商品id和数量到数据库
                    $shopcont[0]['shopping'] .= '@'.$key.',1'; //@分开 默认数量1
                    $update = "update tb_user set shopping='".$shopcont[0]['shopping']."' where name = '".$_SESSION['member']."'";
                    $shop = $admindb->ExecSQL($update,$conn);
                    if($shop){
                        $reback = 1;
                    }else{
                        $reback = '4';
                    }
                }
            }else{
                $tmparr = $key.",1";
                $updates = "update tb_user set shopping='".$tmparr."' where name = '".$_SESSION['member']."'";
                $result = $admindb->ExecSQL($updates,$conn);
                if($result){
                    $reback = 1;
                }else{
                    $reback = '4';
                }
            }
        }
    }
    echo $reback;
    ?>
    

     最后添加到数据库是这样子的

    以@符号分割商品id和数量 如24,5@40,1@50,1@60,1@10,1@100,1

    最后是从数据库取出数据;其中应用到数组的转换;代码如下:

    // 下面是从数据库取出数据的代码
    $select = "select id,shopping from tb_user where name ='".$_SESSION['member']."'";
    $rst = $admindb->ExecSQL($select,$conn);//返回二维数组
    if($rst[0]['shopping']==""){
        echo "<script>alert('购物车中暂时没有商品!');window.location.href='index.php';</script>";
    }
    $commarr = array();
    foreach($rst[0] as  $value){//以@号分割开
        $tmpnum = explode('@',$value);//获取商品数量 拆分为id和shopping两个索引数组
        $shopnum = count($tmpnum);    //计算id和shopping数组的个数
        $sum = 0;
        foreach($tmpnum as $key => $vl){ 
            $s_commo = explode(',',$vl);
    echo "<table>";
    echo "<tr>";
    echo "<td> </td>";        
    echo "<td>id</td>";        
    echo "<td>数量</td>";        
    echo "</tr>";    
    echo "<tr>";    
    echo "<td> </td>";        
    echo "<td>$s_commo[0]</td>";        
    echo "<td>$s_commo[1]</td>";        
    echo "</tr>";    
    echo "</table>";
            // $sql2 = "select id,name,m_price,fold,v_price from tb_commo";//取出价格,折扣,折后价格
            // $commsql = $sql2." where id = ".$s_commo[0];
            // $arr = $admindb->ExecSQL($commsql,$conn);
            // @$arr[0]['num'] = $s_commo[1];//将商品数量赋值给$arr
            // @$arr[0]['total'] = $s_commo[1]*$arr[0]['v_price'];//单个商品总价=数量*单价
            // $sum += $arr[0]['total'];//购物车所有商品总价
            // $commarr[$key] = $arr[0];
        }
    }
    ?>
    
  • 相关阅读:
    LeetCode 12. 整数转罗马数字
    [Python] for in range()使用以及列表字符串反转方法
    组合数问题
    「BJOI2020」封印
    数据结构优化建图
    小Q与找茬
    无旋Treap学习
    jzoj5679
    数星星
    凸性
  • 原文地址:https://www.cnblogs.com/aten/p/8893162.html
Copyright © 2020-2023  润新知