高小花 發表於 2019-5-5 11:06:00

php购物车(思路&源码)

<p><strong>本文介绍一个php实现的购物车代码,功能实现完整,具有一定的参考价值</strong></p>
<p><strong>这里我们为你提供个简单的php购物车代码,从增加购物产品与发生购买了,在商城开发中,这个功能是少不了的</strong></p>
<p><strong>具体分析如下:</strong></p>
<p><strong>对购物车里商品的操作大体上有以下几个:添加商品,删除商品,以及提交订单;</strong></p>
<p><strong>方法本质是:把session存入array,对array进行增加、删除、修改操作,array中的每一组记录都是一个商品的信息(个数,价格等);</strong></p>
<p><strong>解决购物车的思路是用session记录一个二维数组。一维代表每一个商品,二维包含了商品的id,商品的数量...等可以自行增加,反正都是二维了,自己愿意带多少个商品属性就加上去。</strong></p>
<p><strong>购物车的操作流程:首先,登录到网站中浏览商品;然后,购买指定的商品,进入购物车页面中,在该页面可以实现更改商品数量、删除商品、清空购物车、继续购物等;最后,生成订单,提交订单等操作。</strong></p>
<p><strong>详细请看强大的注释;</strong></p>
<p><strong>首先登入;</strong></p>
<p>&nbsp;</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif"></span></div>
<pre>&lt;body&gt;
&lt;h1&gt;登入页面&lt;/h1&gt;
&lt;form action="dengrucl.php" method="post"&gt;
    &lt;div&gt;帐号:&lt;input type="text" name="zhang"/&gt;&lt;/div&gt;
    &lt;div&gt;密码:&lt;input type="text" name="mi"/&gt;&lt;/div&gt;
    &lt;input type="submit" value="登入"/&gt;
&lt;/form&gt;

&lt;/body&gt;</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif"></span></div>
</div>
<p>&nbsp;</p>
<p><strong>图:</strong></p>
<p><strong><img src="https://images2015.cnblogs.com/blog/1064450/201703/1064450-20170308185031516-1852776917.png"></strong></p>
<p><strong>登入处理:</strong></p>
<p>&nbsp;</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif"></span></div>
<pre>&lt;?php
session_start();
include ("db.class.php");
$db = new db();
$zhang = $_POST["zhang"];
$mi = $_POST["mi"];
$sql = "select mi from yonghu WHERE zhang = '{$zhang}'";
$arr = $db-&gt;Query($sql);
if(!empty($zhang)&amp;&amp;!empty($mi)&amp;&amp;$mi = $arr){
    $_SESSION["zhang"] = $zhang;
    header("location:zym.php");
}
else
{
    echo "登入失败";
}

?&gt;</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif"></span></div>
</div>
<p>&nbsp;</p>
<p><strong>很简单的一个登入,没啥说的;</strong></p>
<p><strong>他登入完了以后直接进入主页面:</strong></p>
<p>&nbsp;</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif"></span></div>
<pre>&lt;body&gt;
&lt;h1&gt;长腿璇购物商城&lt;/h1&gt;
&lt;table border="1" cellpadding="0" cellspacing="0" width="100%" &gt;
    &lt;tr&gt;
      &lt;td&gt;代号&lt;/td&gt;
      &lt;td&gt;水果名称&lt;/td&gt;
      &lt;td&gt;水果价格&lt;/td&gt;
      &lt;td&gt;水果产地&lt;/td&gt;
      &lt;td&gt;水果库存&lt;/td&gt;
      &lt;td&gt;操作&lt;/td&gt;
    &lt;/tr&gt;</pre>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif"></span></div>
<pre>   &lt;?php
    session_start();
$_SESSION["zhang"] = "xiaoming";//不做登入的情况下,直接存sessiion
    include ("db.class.php");
    $db = new db();
    $sql = "select * from sgbiao";
    $arr = $db-&gt;Query($sql);
    foreach ($arr as $v)
    {
      echo " &lt;tr&gt;
      &lt;td&gt;{$v}&lt;/td&gt;
      &lt;td&gt;{$v}&lt;/td&gt;
      &lt;td&gt;{$v}&lt;/td&gt;
      &lt;td&gt;{$v}&lt;/td&gt;
      &lt;td&gt;{$v}&lt;/td&gt;
      &lt;td&gt;
      &lt;a href='zymcl.php?ids={$v}'&gt;加入购物车&lt;/a&gt;
      
&lt;/td&gt;
    &lt;/tr&gt;";
    }

    ?&gt;
    &lt;?php
    //这里显示的是 购物车有多少产品,和产品的总价格
    $ann=array();
    if(!empty($_SESSION["gwc"]))
    {
      $ann=$_SESSION["gwc"];

    }
    $zhonglei = count($ann);

    $aa=0;
    foreach($ann as $k)
    {

      $k;//水果代号
      $k;//水果数量
      $sql1="select jiage from sgbiao where ids='{$k}'";

      $danjia=$db-&gt;Query($sql1);

      foreach($danjia as $n)
      {

            $aa=$aa + $n*$k;
      }


    }
    echo"数量:{$zhonglei}&lt;br/&gt;
价格:&lt;mark&gt;{$aa}元";
    ?&gt;</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif"></span></div>
</div>
<pre>&lt;/table&gt;

&lt;a href="tijiao.php"&gt;查看账户&lt;/a&gt;
&lt;a href="ckgwc.php"&gt;查看购物车&lt;/a&gt;

&lt;/body&gt;</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif"></span></div>
</div>
<p>&nbsp;</p>
<p><strong>来图:</strong></p>
<p><strong><img src="https://images2015.cnblogs.com/blog/1064450/201703/1064450-20170308185357719-2124550903.png"></strong></p>
<p><strong>当我点击添加到购物车:</strong></p>
<p><strong><img src="https://images2015.cnblogs.com/blog/1064450/201703/1064450-20170308185459047-280941081.png"></strong></p>
<p><strong>上面的数量与价格变了,说明已经加到了购物车里面;</strong></p>
<p><strong>来看一下是怎么处理的(强大的注释):</strong></p>
<p>&nbsp;</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif"></span></div>
<pre>&lt;?php
session_start();
//
$ids = $_GET["ids"];
if(empty($_SESSION["gwc"]))
{
    //如果点击的购物车是空的(第一次添加)

    //如果购物车里是空的,造二维数组,
    $arr = array(
      array($ids,1)
      //一维数组,取ids,第一次点击增加一个
    );
    $_SESSION["gwc"]=$arr;
    //扔到session里面
}
else
    //这里不是第一次点击
{
    //先判断购物车里是否已经有了该商品,用$ids
    $arr = $_SESSION["gwc"];
    //把购物车的状态取出来

    $chuxian = false;
//定义一个变量;用来表示是否出现,默认是未出现
    foreach ($arr as $v) {
      //便利他
      //如果这里面有这件商品
      if ($v == $ids) //如果取过来的$v(商品的代号)等于$ids那么就证明购物车中已经有了这一件商品
      {
            $chuxian = true;
            //如果出现,直接把chuxian改成true

      }
    }
    if($chuxian)
    {
      //购物车中有此商品
      for($i=0;$i&lt;count($arr);$i++)
      {
            if($arr[$i] == $ids)
            {
                //把点到的商品编号加1
                $arr[$i] += 1;
            }
      }
      $_SESSION["gwc"] = $arr;

    }
      else
            {
                //这里就只剩下:购物车里有东西,但是并没有这件商品
                $asg = array($ids,1);
                //设一个小数组
                $arr[] = $asg;
                $_SESSION["gwc"]=$arr;
            }

}
header("location:zym.php")


?&gt;</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif"></span></div>
</div>
<p>&nbsp;</p>
<p><strong>接下来做一下购物车的页面:</strong></p>
<p>&nbsp;</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif"></span></div>
<pre>&lt;body&gt;
&lt;h1&gt;查看购物车&lt;/h1&gt;
&lt;table width="100%" border="1"cellspacing="0" cellpadding="0"&gt;
    &lt;tr&gt;
      &lt;td&gt;商品名称&lt;/td&gt;
      &lt;td&gt;商品单价&lt;/td&gt;
      &lt;td&gt;商品数量&lt;/td&gt;
      &lt;td&gt;操作&lt;/td&gt;
    &lt;/tr&gt;</pre>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif"></span></div>
<pre>   &lt;?php
    session_start();
    if(!empty($_SESSION["gwc"]))
    {
      $arr = array();
      $arr = $_SESSION["gwc"];
      //造数组
    }
    include ('db.class.php');
    $db = new db();
    foreach ($arr as $v)
    {
      global $db;
      $sql = "select * from sgbiao WHERE ids = '{$v}'";
      $att = $db-&gt;query($sql);
      foreach ($att as $a)
      {
            echo "&lt;tr&gt;
      &lt;td&gt;{$a}&lt;/td&gt;
      &lt;td&gt;{$a}&lt;/td&gt;
      &lt;td&gt;{$v}&lt;/td&gt;
      &lt;td&gt;&lt;a href='shanchu.php?ids={$a}'&gt;删除&lt;/a&gt; &lt;/td&gt;
    &lt;/tr&gt; ";
//            蔬果的名称
//            单价
//            取int数量
//      这个地方也可以加索引shanchu.php?sy={$v}
      }
    }
    ?&gt;</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif"></span></div>
</div>
<pre>&lt;/table&gt;

&lt;a href="tijiao.php"&gt;提交订单&lt;/a&gt;
&lt;/body&gt;</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif"></span></div>
</div>
<p>&nbsp;</p>
<p><strong>上图:</strong></p>
<p><strong><img src="https://images2015.cnblogs.com/blog/1064450/201703/1064450-20170308185925984-1064011447.png"></strong></p>
<p><strong>可以看到大苹果的数量是4,若是我点删除,其条件便是存在大苹果,且数量大于一,点击删除使数量减一:</strong></p>
<p><strong>白葡萄的数量是1,若我点击删除,其条件是数量不大于一,使其移除数组;</strong></p>
<p><strong>说了这些快来看看删除页面吧:</strong></p>
<p>&nbsp;</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif"></span></div>
<pre>&lt;?php
session_start();
$ids = $_GET["ids"];
$arr = $_SESSION["gwc"];
//var_dump($arr);
//取索引2(数量)
foreach ($arr as $key=&gt;$v)
{
    if($v==$ids)
    {
      if($v&gt;1){
            //要删除的数据
         $arr[$key]-=1;
      }
      else{
            //数量为1的情况下,移除该数组
            unset($arr[$key]);
      }
    }

}

$_SESSION["gwc"] = $arr;
//记得扔到session里面
header("location:ckgwc.php");
//删除完跳转回去</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif"></span></div>
</div>
<p>&nbsp;</p>
<p><strong>高能!!</strong></p>
<p><strong>提交订单页面,我只来一个处理页面吧,小伙伴若有需要自己填链接即可:</strong></p>
<p>&nbsp;</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif"></span></div>
<pre>&lt;?php
session_start();
include ("db.class.php");
$db = new db();

//判断用余额是否满足
$zhang = $_SESSION["zhang"];
//获取到用户名
$sye = "select zhanghu from yonghu WHERE zhang = '{$zhang}'";
$ye = $db-&gt;query($sye);
$ye;//这是余额

$ann=array();
if(!empty($_SESSION["gwc"]))
{
    $ann=$_SESSION["gwc"];

}
$zhonglei = count($ann);

$aa=0;//总价格
foreach($ann as $k)
{

    $k;//水果代号
    $k;//水果数量
    $sql1="select jiage from sgbiao where ids='{$k}'";

    $danjia=$db-&gt;Query($sql1);

    foreach($danjia as $n)
    {

      $aa=$aa + $n*$k;
    }


}
//判断余额是否满足
if($ye&gt;=$aa)
{
    //钱够,判断库存

    foreach($ann as $v)
    {
      $skc = "select sgname,kucun from sgbiao WHERE ids='{$v}'";
      //水果代号$v
      $akc = $db-&gt;query($skc);
      $akc;//库存
      //比较是否满足库存
      if($akc&lt;$v)
      {
            echo "{$akc}库存不足";
            //退出
            exit;
      }

    }
//提交订单:
//i.    从用户账户中扣除本次购买的总价格
//ii.    从商品库存中扣除本次每种商品的购买数量
//iii.    向订单表和订单内容表中加入本次购买的商品信息
    //扣除账户余额
$skcye = "update yonghu set zhanghu = zhanghu-{$aa} WHERE zhang = '{$zhang}'";
    $db-&gt;query($skcye,0);
    //扣除库存
    foreach($ann as $v)
    {
      $skckc = "update sgbiao set kucun = kucun-{$v} WHERE ids='{$v}'";
      //水果代号$v
      $db-&gt;query($skckc,0);
    }
    //添加订单信息
    //取当前时间
    $time = time();
    //自动生成订单号
    $ddh = date("YmdHis");
    $sdd = "insert into dingdan VALUES ('{$ddh}','$zhang','$time')";
    $db-&gt;query($sdd,0);
    //添加订单内容
    foreach ($ann as $v)
    {
      $sddxq = "insert into ddneirong VALUES ('','$ddh','{$v}','{$v}')";
      $db-&gt;query($sddxq,0);
    }


}
else
{
    echo "钱不够";
    exit;
}</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif"></span></div>
</div>
<p>&nbsp;</p>
<p><strong>如此一来,购物车大体上的功能都已实现;</strong></p>
<p><strong>来看看点击提交订单后的效果:</strong></p>
<p><strong>1.减少水果库存:</strong></p>
<p><strong><img src="https://images2015.cnblogs.com/blog/1064450/201703/1064450-20170308190623797-1110481587.png"></strong></p>
<p><strong>2.添加订单:</strong></p>
<p><strong><img src="https://images2015.cnblogs.com/blog/1064450/201703/1064450-20170308190703656-442657323.png"></strong></p>
<p><strong>3.添加订单内容:</strong></p>
<p><strong><img src="https://images2015.cnblogs.com/blog/1064450/201703/1064450-20170308190733688-1658890572.png"></strong></p>
<p><strong>4.扣除购买人的账户余额:</strong></p>
<p><strong><img src="https://images2015.cnblogs.com/blog/1064450/201703/1064450-20170308190830141-493204223.png"></strong></p>
<p><strong>以上便是购物车内容</strong></p><br><br>
来源:https://www.cnblogs.com/tyblwmbs/p/10811881.html
頁: [1]
查看完整版本: php购物车(思路&源码)