实用的php教程购物车程序
以前有用过一个感觉不错,不过看了这个感觉也很好,所以介绍给需要的朋友参考一下。

<?php
//调用实例
require_once 'cart.class.php';
session_start();
if(!isset($_SESSION['cart'])) {
$_SESSION['cart'] = new Cart;
}
$cart =& $_SESSION['cart'];

if( ($_SERVER['REQUEST_METHOD']=="POST")&&($_POST['action']=='add') ){
$p = $_POST['p'];
$items = $cart->add($p);
}
if( ($_GET['action']=='remove')&&($_GET['key']!="") ) {
$items = $cart->remove($_GET['key']);
}

if( ($_SERVER['REQUEST_METHOD']=="POST")&&($_POST['action']=='modi') ){
$key = $_POST['key'];
$value = $_POST['value'];
for($i=0;$i<count($key);$i ){
$items = $cart->modi($key[$i],$value[$i]);
}
}

$items = $cart->getCart();
//打印
echo "<table border=1>";
setlocale(LC_MONETARY, 'it_IT');
foreach($items as $item){
echo "<tr><form method="post" action="tmp.php">";
echo "<td>ID:".$item['ID']."<input type=hidden name=key[] value=".$item['ID'].">";
echo "<td>产品:".$item['name'];
echo "<td>单价:".$item['price'];
echo "<td><input type=text name=value[] value=".$item['count'].">";
$sum = $item['count']*$item['price'];
echo "<td>合计:".round($sum,2);
echo "<td><input type=button value='删除' onclick="location='?action=remove&key=".$item['ID']."'">";
}
echo "<input type=hidden name=action value=modi>";
echo "<tr><td colspan=7><input type=submit />";
echo "</td></form></tr></table>";

?>
<hr>
<form method="post" action="tmp.php">
ID:<input type="text" name="p[]" />
品名:<input type="text" name="p[]" />
单价:<input type="text" name="p[]" />
数量:<input type="text" name="p[]" />
<input type=hidden name=action value=add>
<input type="submit" />
</form>

<?
/**
* Cart
*
* 购物车类
*
* @author doodoo<pWtitle@yahoo.com.cn>
* @package Cart
* @category Cart
* @license PHP License
* @access public
* @version $Revision: 1.10 $
*/
Class Cart{

var $cart;
var $totalCount; //商品总数量
var $totalPrices; //商品总金额

/**
* Cart Constructor
*
* 类的构造函数,使购物车保持稳定的初始化状态
*
* @static
* @access public
* @return void 无返回值
* @param void 无参数
*/
function Cart(){
$this->totalCount = 0;
$this->totalPrice = 0;
$this->cart = array();
}

// }}}
// {{{ add($item)

/**
* 增加商品到当前购物车
*
* @access public
* @param array $item 商品信息(一维数组:array(商品ID,商品名称,商品单价,商品数量))
* @return array 返回当前购物车内商品的数组
*/
function add($item){
if(!is_array($item)||is_null($item)) return $this->cart;
if(!is_numeric(end($item))||(!is_numeric(prev($item)))) {
echo "价格和数量必须是数字";
return $this->cart;
}
reset($item); //这一句是必须的,因为上面的判断已经移动了数组的指标
$key = current($item);
if($key=="") return $this->cart;
if($this->_isExists($key)){ //商品是否已经存在?
$this->cart[$key]['count'] = end($item);
return $this->cart;
}

$this->ca(www.111cn.net)rt[$key]['ID'] = $key;
$this->cart[$key]['name'] = next($item);
$this->cart[$key]['price'] = next($item);
$this->cart[$key]['count'] = next($item);

return $this->cart;
}

// }}}
// {{{ add($item)

/**
* 从当前购物车中取出部分或全部商品
* 当 $key=="" 的时候,清空当前购物车
* 当 $key!=""&&$count=="" 的时候,从当前购物车中拣出商品ID号为 $key 的全部商品
* 当 $key!=""&&$count!="" 的时候,从当前购物车中拣出 $count个 商品ID号为 $key 的商品
*
* @access public
* @param string $key 商品ID
* @return mixed 返回真假或当前购物车内商品的数组
*/
function remove($key="",$count=""){
if($key=="") {
$this->cart = array();
return true;
}
if(!array_key_exists($key,$this->cart)) return false;
if($count==""){ //移去这一类商品
unset($this->cart[$key]);
}else{ //移去$count个商品
$this->cart[$key]['count'] -= $count;
if($this->cart[$key]['count']<=0) unset($this->cart[$key]);
}
return $this->cart;
}

// }}}
// {{{ modi($key,$value)

/**
* 修改购物车内商品ID为 $key 的商品的数量为 $value
*
* @access public
* @param string $key 商品ID
* @param int $value 商品数量
* @return array 返回当前购物车内商品的数组;
*/
function modi($key,$value){
if(!$this->_isExists($key)) return $this->cart(); //不存在此商品,直接返回
if($value<=0){ // value 太小,全部删除
unset($this->cart[$key]);
return $this->cart;
}
$this->cart[$key]['count'] = $value;
return $this->cart;
}

/**
* 返回当前购物车内商品的数组
*
* @access public
* @return array 返回当前购物车内商品的数组;
*/
function getCart(){
return $this->cart;
}

// }}}
// {{{ _isExists($key)

/**
* 判断当前购物车中是否存在商品ID号为$key的商品
*
* @access private
* @param string $key 商品ID
* @return bool true or false;
*/
function _isExists($key)
{
if(isset($this->cart[$key])&&!empty($this->cart[$key])&&array_key_exists($key,$this->cart))
return true;
return false;
}

// }}}
// {{{ isEmpty()

/**
* 判断当前购物车是否为空,即没有任何商品
*
* @access public
* @return bool true or false;
*/
function isEmpty(){
return !count($this->cart);
}

// }}}
// {{{ _stat()

/**
* 取得部分统计信息
*
* @access private
* @return bool true or false;
*/
function _stat(){
if($this->isEmpty()) return false;
foreach($this->cart as $item){
$this->totalCount = @end($item);
$this->totalPrices = @prev($item);
}
return true;
}

// }}}
// {{{ totalPrices()

/**
* 取得当前购物车所有商品的总金额
*
* @access public
* @return float 返回金额;
*/
function totalPrices(){
if($this->_stat())
return $this->totalPrices;
return 0;
}

// }}}
// {{{ isEmpty()

/**
* 取得当前购物车所有商品的总数量和
*
* @access public
* @return int ;
*/
function totalCount(){
if($this->_stat())
return $this->totalCount;
return 0;
}

}//End Class Cart
?>
from:http://www.111cn.net/phper/php-gj/39684.htm

实用的php购物车程序的更多相关文章

  1. 利用JSP编程技术实现一个简单的购物车程序

    实验二   JSP编程 一.实验目的1. 掌握JSP指令的使用方法:2. 掌握JSP动作的使用方法:3. 掌握JSP内置对象的使用方法:4. 掌握JavaBean的编程技术及使用方法:5. 掌握JSP ...

  2. 简单购物车程序(Python)

    #简单购物车程序:money_all=0tag=Trueshop_car=[]shop_info={'apple':10,'tesla':100000,'mac':3000,'lenovo':3000 ...

  3. python学习:购物车程序

    购物车程序 product_list = [ ('mac',9000), ('kindle',800), ('tesla',900000), ('python book',105), ('bike', ...

  4. python复习购物车程序

    个人学习总结: 无他,唯手熟尔!多敲多练才是王道 python 第三课 元组的灵活运用&字符串的诸多操作 Program01 '''时间 2018年2月12日12:15:28目的 购物车程序 ...

  5. python元组与购物车程序

    #Author:zww ''' 程序:购物车程序 需求: 1.启动程序后,让用户输入工资,然后打印呢商品列表 2.允许用户根据商品编号购买商品 3.用户选择商品后,检测余额是否足够,够就直接扣款,不够 ...

  6. Python3学习之路~2.2 简单的购物车程序

    程序:购物车程序 需求:启动程序后,让用户输入工资,然后打印商品列表允许用户根据商品编号购买商品用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 可随时退出,退出时,打印已购买商品和余额 代码 ...

  7. 实用的IOS应用程序框架

    实用的IOS应用程序框架 目录 概述 概述

  8. Python初学者第十二天 购物车程序小作业

    12day 作业题目: 购物车程序 作业需求: 数据结构: goods = [ {"name": "电脑", "price": 1999}, ...

  9. 使用python操作文件实现购物车程序

    使用python操作文件实现购物车程序 题目要求如下: 实现思路 始终维护一张字典,该字典里保存有用户账号密码,购物车记录等信息.在程序开始的时候读进来,程序结束的时候写回文件里去.在登录注册的部分, ...

随机推荐

  1. LintCode:Fibonacci

    C++ class Solution{ public: /** * @param n: an integer * @return an integer f(n) */ int fibonacci(in ...

  2. JavaScript 之 解码类似eval(function(p,a,c,k,e,d){}))的JavaScript代码

    这里以解码百度访问统计代码构造函数为示例: 以下为要统计JavaScript源码:红色加粗部分将是要修改的地方. eval(function(p,a,c,k,e,d){e=function(c){re ...

  3. Windows中snmputil.exe工具的使用

    一.检查windows 系统是否安装了 snmp 组件.可以在 cmd 中输入"net start snmp" 就可以出现显示信息了 二. snmputil,就是程序名拉,呵呵. ...

  4. 数据库查询语句报错-ORA-00911: invalid character

    数据库查询语句报错-ORA-00911: invalid character 根据自己经验总结下: 1.都是分号惹的祸,有时候sql语句后面有分好导致这种错误 2.还有一种是从别处copy过来的sql ...

  5. 使用influx控制台工具操作InfluxDB

    这里记录下influx控制台的简单使用,如需更多功能请参考InfluxDB官方文档: https://docs.influxdata.com/influxdb/v1.1/ 环境: CentOS6.5_ ...

  6. sqlserver查询的结果复制到excel替换掉回车换行

    从sqlserver查询统计出的结果复制到excel,如果有回车,换行 ,或回车换行 ,复制到excel显示会乱会错版,查询的时候就替换掉回车换行,复制出来就不会乱了 ) ), ),),'') fro ...

  7. JSFL 获取当前脚本路径,执行其他脚本

    Application.jsfl为程序入口,导入其他jsfl [Common.jsfl] function trace() { fl.trace(Array.prototype.join.call(a ...

  8. 大数据(十一) - Mahout

    传统数据挖掘/机器学习库存在的问题         缺少一个活跃的技术社区         扩展性差         文档化差,缺少实例         不开源.商业化库         通常由研究机 ...

  9. 【Linux】将一个命令的输出发送给另外一个命令

    一个命令的输出可以作为下一个命令的输入,下一个命令的输出又会传递给下一个命令 我们通常使用管道和子shell的方法来组合多个命令的输出 格式 $ cmd1 |cmd2 | cmd3 这里的3个组合命令 ...

  10. 【Java】监控远程服务器JVM

    今天在用JMeter进行测试的时候,发现线程并发量到50的时候会导致阻塞情况,于是需要监控远程JVM,那么如何监控远程JVM呢? 首先,找到启动计量引擎的sh文件,例如我目前的计量引擎启停文件为str ...