我做了一个电子商务的网站,是比较小型的,现在我可以将物品加入到购物车,但是订单怎么做呢?在线等答案!希望给点思路?

解决方案 »

  1.   

    当用户加入购物车时,将产品id写入SESSION['id']  然后将session['id'],session['userid'] 写订单表中,登录后按session['id'],session['userid'] 读取!
      

  2.   

    商品表  订单汇总表  订单明细表  (订单可生成视图) 
    php 处理下订单的产品生成订单好, 存入汇总表 (总价格,总数量)商品存入明细表(商品编码,数量,价格 ,商品购买总价格, 折扣什么的,,看需求)  这些用存储过程实现。 
      

  3.   

    汇总表订单id, 商品总数量,商品总价格明细表明细id , 订单id,商品id, 数量, 价格, 折扣。 。。商品表商品id, 规格,。神马订单最好分一个当前和一个历史      
    用户操作用当前(不建立索引 影响新增和修改,删除的速度)
    查询用历史表(建立索引)
      

  4.   

    php购物车代码
    源文件名称:cart.php
    <?php
    class cart
    {
            var $items;
            var $sub_totals;
            function cart()
            {
                    $this->items= array();
                    $sub_totals=0;
            }
            function add_item($item_id,$qty,$item_price)
            {
                    //Item not in cart
                    if(!isset($this->items[$item_id]))
                    {
                            //Add item to cart
                            $this->items[$item_id]["qty"]=$qty;
                            $total_cost=$this->items[$item_id]["total_cost"]=$qty*$item_price;
                            $this->sub_total+=$total_cost;
                    }
                    else
                    {
                            //Update item
                            $item_count=$this->items[$item_id]["qty"]+=$qty;
                            $this->items[item_id]["total_cost"]=$item_count*$item_price;
                            $new_cost=$qty*$item_price;
                            //Calculate subtotal
                            $this->sub_total+=$new_cost;
                    }
            }
            function modify_qty($item_id,$new_qty,$item_price)
            {
                    //Modify qunality
                    $prev_qty=$this->items[$item_id]["qty"];
                    $qty_diff=$prev_qty – $new_qty;
                    $this->items[$item_id]["total_cost"]=$new_qty * $item_price;
                    $this->items[$item_id]["qty"]=$new_qty;
                    //Calculate new subtotal
                    $this->sub_total -= $qty_diff * $item_price;
            }
            function delete_item($item_id)
            {
                    //Delete item from cart
                    $this->sub_total-=$this->items[$item_id]["total_cost"];
                    $this->items[$item_id]=array();
            }
            function num_items()
            {
                    //Calculate total number of items
                    $total_items=0;
                    foreach($this->items as $item_id=>$item_data)
                            $total_items+=$item_id["qty"];
                    return $total_items;
            }
            function clear()
            {
             //Clear out the cart
             $this->items=arrary();
             $this->sub_total=0;
            }
    }//end class cart
    ?>316页例子源代码<?php
            require_once(“cart.php”);
            session_start();        if(!isset($user_cart))
            {
                    $user_cart=new cart;
                    session_register(“user_cart”);
            }
            $user_cart->add_item(1,3,5);
            $user_cart->add_item(2,7,10);
            $user_cart->add_item(3,4,7.5);       
            $user_cart->modify_qty(2,3,10);       
            $user_cart->delete_item(3);       
            $total_items=$user_cart->num_items();
    ?>
    <html>
    <head>
    <title>Shopping Cart Test</title>
    </head>
    <body>
            <table>
                    <tr>
         <td>Shopping Cart</td>
         </tr>
                    <tr>
         <td>Number of Items:
         <?php
         echo $total_items;
         ?></td>
         </tr>
                    <tr><td>Subtotal Cost:
         <?php
         echo $user_cart->sub_total;
         ?></td></tr>
            </table>
    </body>
    </html>
      

  5.   


      一个PHP购物车类 收藏
    <?
    /**
     * Cart
     * 
     * 购物车类
     * 
     * @author  doodoo<[email protected]>
     * @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->cart[$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
    ?> <?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>
      

  6.   


    PHP购物车实例, 简单容易理解。cookie存购物车ID,db存购物车数据。 购物车session的产生代码 if(! $session ! $scid) { /* session用来区别每一个购物车,相当于每个车的身份证号; scid只用来标识一个购物车id号,可以看做是每个车的名字; 当该购物车的id和s
      
    网上搜到的,简单容易理解。cookie存购物车ID,db存购物车数据。 购物车session的产生代码 
    if(! $session && ! $scid) { 
    /* 
    session用来区别每一个购物车,相当于每个车的身份证号; 
    scid只用来标识一个购物车id号,可以看做是每个车的名字; 
    当该购物车的id和session值两者都不存在时,就产生一个新购物车 
    */ 
    $session = md5(uniqid(rand())); 
    /* 
    产生一个唯一的购物车session号 
    rand()先产生个随机数,uniqid()再在该随机数的基础上产生一个独一无二的字符串,最后对该字符串进行md5 
    */ 
    SetCookie(scid, $session, time() + 14400); 
    /* 
    设置该购物车cookie 
    变量名:scid(不知到这里是不是少了一个 $号呢?=》更正:scid要加“”) 
    变量值: $session 
    有效时间:当前时间+14400秒(4小时内) 
    关于setcookie函数的详细用法,大家还是参看php手册吧~ 
    */ 

    class Cart { //开始购物车类 
    function check_item( $table, $session, $product) { 
    /* 
    查验物品(表名,session,物品) 
    */ 
    $query = SELECT * FROM $table WHERE session=' $session' AND product=' $product' ; 
    /* 
    看一看'表'里该'购物车'中有没有该'产品' 
    即,该产品有没有已经放入购物车 
    */ 
    $result = mysql_query( $query); 
    if(! $result) { 
    return 0; 

    /* 
    查询失败 
    */ 
    $numRows = mysql_num_rows( $result); 
    if( $numRows == 0) { 
    return 0; 
    /* 
    若没有找到,则返回0 
    */ 
    } else { 
    $row = mysql_fetch_object( $result); 
    return $row->quantity; 
    /* 
    若找到,则返回该物品数量 
    这里有必要解释一下mysql_fetch_object函数(下面还会用到): 
    【mysql_fetch_object() 和 mysql_fetch_array() 类似,只有一点区别 - 返回一个对象而不是数组。】 
    上面这句话摘自php手册,说得应该很明白了吧~ 
    简单的说就是,取一条记录中的某个字段,应该用“->”而不是像数组一样用下标 
    */ 


    function add_item( $table, $session, $product, $quantity) { 
    /* 
    添加新物品(表名,session,物品,数量) 
    */ 
    $qty = $this->check_item( $table, $session, $product); 
    /* 
    调用上面那个函数,先检查该类物品有没有已经放入车中 
    */ 
    if( $qty == 0) { 
    $query = INSERT INTO $table (session, product, quantity) VALUES ; 
    $query .= (' $session', ' $product', ' $quantity') ; 
    mysql_query( $query); 
    /*若车中没有,则像车中添加该物品*/ 
    } else { 
    $quantity += $qty; //若有,则在原有基础上增加数量 
    $query = UPDATE $table SET quantity=' $quantity' WHERE session=' $session' AND ; 
    $query .= product=' $product' ; 
    mysql_query( $query); 
    /* 
    并修改数据库 
    */ 


    function delete_item( $table, $session, $product) { 
    /* 
    删除物品(表名,session,物品) 
    */ 
    $query = DELETE FROM $table WHERE session=' $session' AND product=' $product' ; 
    mysql_query( $query); 
    /* 
    删除该购物车中该类物品 */ 

    function modify_quantity( $table, $session, $product, $quantity) { 
    /* 
    修改物品数量(表名,session,物品,数量) 
    */ 
    $query = UPDATE $table SET quantity=' $quantity' WHERE session=' $session' ; 
    $query .= AND product=' $product' ; 
    mysql_query( $query); 
    /* 
    将该物品数量修改为参数中的值 
    */ 

    function clear_cart( $table, $session) { 
    /* 
    清空购物车(没什么好说) 
    */ 
    $query = DELETE FROM $table WHERE session=' $session' ; 
    mysql_query( $query); 

    function cart_total( $table, $session) { 
    /* 
    车中物品总价 
    */ 
    $query = SELECT * FROM $table WHERE session=' $session' ; 
    $result = mysql_query( $query); 
    /* 
    先把车中所有物品取出 
    */ 
    if(mysql_num_rows( $result) > 0) { 
    while( $row = mysql_fetch_object( $result)) { 
    /* 
    如果物品数量>0个,则逐个判断价格并计算 
    */ 
    $query = SELECT price FROM inventory WHERE product=' $row->product' ; 
    $invResult = mysql_query( $query); 
    /* 
    从inventory(库存)表中查找该物品的价格 
    */ 
    $row_price = mysql_fetch_object( $invResult); 
    $total += ( $row_price->price * $row->quantity); 
    /* 
    总价 += 该物品价格 * 该物品数量 
    ( 大家应该能看明白吧:) ) 
    */ 


    return $total; //返回总价钱 

    function display_contents( $table, $session) { 
    /* 
    获取关于车中所有物品的详细信息 
    */ 
    $count = 0; 
    /* 
    物品数量计数 
    注意,该变量不仅仅为了对物品数量进行统计,更重要的是,它将作为返回值数组中的下标,用来区别每一个物品! 
    */ 
    $query = SELECT * FROM $table WHERE session=' $session' ORDER BY id ; 
    $result = mysql_query( $query); 
    /* 
    先取出车中所有物品 
    */ 
    while( $row = mysql_fetch_object( $result)) { 
    /* 
    分别对每一个物品进行取详细信息 
    */ 
    $query = SELECT * FROM inventory WHERE product=' $row->product' ; 
    $result_inv = mysql_query( $query); 
    /* 
    从inventory(库存)表中查找该物品的相关信息 
    */ 
    $row_inventory = mysql_fetch_object( $result_inv); 
    $contents[product][ $count] = $row_inventory->product; 
    $contents[price][ $count] = $row_inventory->price; 
    $contents[quantity][ $count] = $row->quantity; 
    $contents[total][ $count] = ( $row_inventory->price * $row->quantity); 
    $contents[description][ $count] = $row_inventory->description; 
    /* 
    把所有关于该物品的详细信息放入 $contents数组 
    $contents是一个二维数组 
    第一组下标是区别每个物品各个不同的信息(如物品名,价钱,数量等等) 
    第二组下标是区别不同的物品(这就是前面定义的 $count变量的作用) 
    */ 
    $count++; //物品数量加一(即下一个物品) 

    $total = $this->cart_total( $table, $session); 
    $contents[final] = $total; /* 
    同时调用上面那个cart_total函数,计算下总价钱 
    并放入 $contents数组中 
    */ 
    return $contents; 
    /* 
    将该数组返回 
    */ 

    function num_items( $table, $session) { 
    /* 
    返回物品种类总数(也就是说,两个相同的东西算一种 好像是废话- -!) 
    */ 
    $query = SELECT * FROM $table WHERE session=' $session' ; 
    $result = mysql_query( $query); 
    $num_rows = mysql_num_rows( $result); 
    return $num_rows; 
    /* 
    取出车中所有物品,获取该操作影响的数据库行数,即物品总数(没什么好说的) 
    */ 

    function quant_items( $table, $session) { 
    /* 
    返回所有物品总数(也就是说,两个相同的东西也算两个物品 - -#) 
    */ 
    $quant = 0;// 物品总量 
    $query = SELECT * FROM $table WHERE session=' $session' ; 
    $result = mysql_query( $query); 
    while( $row = mysql_fetch_object( $result)) { 
    /* 
    把每种物品逐个取出 
    */ 
    $quant += $row->quantity; //该物品数量加到总量里去 

    return $quant; //返回总量 

    }