简单购物车
利用session和数据库简单实现商品的添加;其中有用到smarty模板中的数据库连接类和数据库管理类;
定义三个按钮,分别调用三个函数,参数为商品的id号(默认是10);代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <! 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函数代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | <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数据库连接类;代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | 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/>" ); } } } |
然后是数据库连接管理类;代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | //数据库管理类 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 ; } } } |
最后是数据处理代码;如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | $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
最后是从数据库取出数据;其中应用到数组的转换;代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | // 下面是从数据库取出数据的代码 $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]; } } ?> |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步