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