php cookie和数组实现的购物车
利用cookie和数组实现的购物车,主要文件是一个购物车的类,主要实现的功能有购物,查看购物车,删除产品,清空购物车,以及修改产品数量,共要支付款项,利用ajax技术,基本的购物车功能已经实现了。
只有四个源码文件,产品是定义的数组,保存购物产品是利用的COOKIE技术,还有一个无刷新的ajax技术,里面保留有源码作者,感觉很简单,挺适合新手的,先保存下来,以备实用。
共有四个文件,共保存下来运行即可。
首页 index.php 显示产品源码如下:
<html> <head> <title>购物车</title> <meta http-equiv="Content-Type" content="text/html;charset=gbk" /> <link href="css.css" rel="stylesheet" /> <script src="ajax.js" language="javascript"></script> </head> <body> <?php require_once("cart.class.php"); switch($_GET[type]){ case "view": $ca = new Cart(); $ca->viewCart(); echo '<div id="viewcart"><a href="index.php">返回购物</a></div>'; break; default: echo <<<EOT <div id="product"> <div onclick="addCart(1)">苹果</div> <div onclick="addCart(2)">香蕉</div> <div onclick="addCart(3)">菠萝</div> <div onclick="addCart(4)">葡萄</div> <div onclick="addCart(5)">梨子</div> <div onclick="addCart(6)">西红柿</div> <div onclick="addCart(7)">芒果</div> <div onclick="addCart(8)">猕猴桃</div> <div onclick="addCart(9)">草莓</div> <div onclick="addCart(10)">荔枝</div> <div onclick="addCart(11)">桃子</div> <div onclick="addCart(12)">石榴</div> </div> <div id="viewcart"><a href="?type=view">查看购物车</a></div> EOT; break; } ?> <div id="tips"></div> </body> </html>
购物车类 cart.class.php 源码如下:
<?php /**************************** * by:kimi *****************************/ $id = $_GET[productID]; $action = $_GET[action]; if(isset($id)){ $obj_cart = new Cart(); if($action == "buy"){ $obj_cart->addCart($id); }else if($action == "del"){ $obj_cart->delCart($id); }else if($action == "all"){ $obj_cart->delAll(); } } //购物车类 class Cart{ //添加商品 function addCart($proID){ //自定义一些产品 switch($proID){ case 1: $product_name = "苹果"; $product_price = 12.8; $product_number = 1; break; case 2: $product_name = "香蕉"; $product_price = 18; $product_number = 1; break; case 3: $product_name = "菠萝"; $product_price = 21.2; $product_number = 1; break; case 4: $product_name = "葡萄"; $product_price = 14; $product_number = 1; break; case 5: $product_name = "梨子"; $product_price = 17.8; $product_number = 1; break; case 6: $product_name = "西红柿"; $product_price = 9.5; $product_number = 1; break; case 7: $product_name = "芒果"; $product_price = 28; $product_number = 1; break; case 8: $product_name = "猕猴桃"; $product_price = 31; $product_number = 1; break; case 9: $product_name = "草莓"; $product_price = 28.8; $product_number = 1; break; case 10: $product_name = "荔枝"; $product_price = 7.8; $product_number = 1; break; case 11: $product_name = "桃子"; $product_price = 8.8; $product_number = 1; break; case 12: $product_name = "石榴"; $product_price = 32; $product_number = 1; break; default: break; } if($product_name != NULL){ if(isset($_COOKIE["shop_cart_info_".$proID])){ echo "exist"; }else{ setcookie("shop_cart_info_".$proID,$proID."-".$prod uct_name."-".$product_price."-".$product_number,time()+7200); } } } // end function addCart //删除产品 function delCart($proID){ setcookie("shop_cart_info_".$proID,""); } // end function delCart //清空购物车 function delAll(){ foreach ($_COOKIE as $key => $val){ if(strstr($key,"shop_cart_info")){ setcookie($key,""); } } } // end function delAll //查看购物车 function viewCart(){ echo '<table align="center" cellspacing=1 cellpadding=10 wid th="500">'; echo '<tr class="ml"><td>产品名称</td><td>价格</td><td>修改数 量</td><td>删除</td></tr>'; $i = 0; //购物车里商品数量 $total_money = 0; //总金钱 foreach ($_COOKIE as $key => $val){ if(strstr($key,"shop_cart_info")){ list($id,$name,$price,$number) = explode("-",$val); echo "<tr><td>$name</td><td><span name=price>$pric e</span></td><td><input title='输入数字修改数量' name=num type=text value=$number size=2 maxlength=2 onkeyup='editNum()' /></td><t d><a href='javascript:' onclick=tips('你确定要删除此商品吗?',1,'de lCart($id,\'del\')') >删除</a></td></tr>"; $i=$i+1; $total_money+=$price * $number; } } if($name == NULL){ echo "<tr><td colspan=5>你还没有购买任何东西!<a href='i ndex.php'>点击返回购物</a></td></tr>"; }else{ echo "<tr><td colspan=5>共有<font color=#970000>$i</f ont>件商品,一共要支付<font id='total' color=#970000>$total_mone y</font>元 <input type='button' value='清空购物车' onclick=t ips('你确定要清空购物车所有东西吗?',1,'delCart(\'all\',\'al l\')') /></td></tr>"; } echo "</table>"; } } ?>
无刷新选择商品 ajax.js 源码如下:
[cc lang="javascript"]
var xmlhttp;
function createXMLHttp(){
if(navigator.cookieEnabled){
if(window.XMLHttpRequest){
xmlhttp = new XMLHttpRequest();
}else if(window.ActiveXObject){
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}else{
alert("你的浏览器不支持XMLHttpRequest对象,购物车功能无法
实现!");
}
}else{
tips("浏览器不支持cookie,无法操作!",1,"hideTips()");
}
}
function addCart(productID){
createXMLHttp();
xmlhttp.onreadystatechange = add_back;
xmlhttp.open("GET","cart.class.php?action=buy&productID="+pr
oductID,true);
xmlhttp.send(null);
}
function delCart(productID,type){
createXMLHttp();
xmlhttp.onreadystatechange = del_back;
xmlhttp.open("GET","cart.class.php?action="+type+"&productID="+p
roductID,true);
xmlhttp.send(null);
}
function add_back(){
if(xmlhttp.readyState == 4){
if(xmlhttp.status == 200){
if(!xmlhttp.responseText.indexOf("exist")){
tips("购物车中已经存在此商品",1,"hideTips()");
}else{
tips("添加购物车成功",2);
}
}else{
tips("添加失败,请重新添加!",1,"hideTips()");
}
}
}
function del_back(){
if(xmlhttp.readyState == 4){
if(xmlhttp.status == 200){
window.location.reload();
}else{
tips("删除失败,请重新失败!",1,"hideTips()");
}
}
}
function tips(str,type,fun){
var o = document.getElementById("tips");
if(type == 1){
var tip_str = '

';
o.innerHTML = tip_str;
}else if(type == 2){
var tip_str = '
';
o.innerHTML = tip_str;
}
}
function hideTips(){
document.getElementById("tips_cont").style.display = "none";
}
function editNum(){
var n = document.getElementsByName("num");
var p = document.getElementsByTagName("span");
var totalcost = 0; //购物车商品总价格
var re = "^[1-9]{1}[0-9]*$";
for(var i=0;i
[cc lang="css"]
*{
margin:0px;padding:0px;
font-size:14px;
}
#product div{
float:left;
width:100px;
height:100px;
border:1px solid #ccc;
text-align:center;
font-size:20px;
font-weight:bold;
line-height:100px;
letter-spacing:10px;
color:#970000;
margin:30px;
cursor:pointer;
}
#viewcart{
clear:both;
border:1px solid #ccc;
width:200px;
text-align:center;
margin:0 auto;
color:#970000;
padding:2px;
font-weight:bold;
}
a,a:visited,a:hover,a:link,a:active{
color:#970000;
text-decoration:none;
}
#tips_cont{
background-color:#cccccc;
width:300px;
height:150px;
margin:0 auto;
position:fixed;
top:30%;
left:35%;
padding:5px;
}
.tips_title{
background-color:#970000;
color:#ffffff;
padding:2px 10px;
}
.tips_main{
background-color:#ffffff;
padding:0 10px;
height:80px;
line-height:80px;
}
.tips_button{
background-color:#eee;
padding:10px;
text-align:center;
border-top:1px solid #ccc;
height:25px;
}
.tips_button input{
border:1px solid #ccc;
padding:3px;
margin:0 20px;
}
input{
border:1px solid #ccc;
font-size:12px;
padding:2px;
}
table{
background-color:#ccc;
margin:20px auto;
}
td{
background-color:#ffffff;
padding:10px;
text-align:center;
}
.ml{
color:#970000;
font-weight:bold;
}
[/code]
另需要建立 images 文件夹,下面有 1.gif 购物失败 2.gif 购物成功,图片自行建立。