A-A+

php cookie和数组实现的购物车

2012年11月18日 PHP源码分享 暂无评论 阅读 250 views 次

利用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&#91;type&#93;){   
    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&#91;productID&#93;;   
$action = $_GET&#91;action&#93;;   
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 = '

×小白温馨提示
' + str + '

';
o.innerHTML = tip_str;
}else if(type == 2){
var tip_str = '

×小白温馨提示
' + 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界面控制 CSS 样式文件:

[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 购物成功,图片自行建立。

给我留言