php_实现一个简易的购物车

来源:互联网 发布:艺术与视知觉知乎 编辑:程序博客网 时间:2024/05/01 08:19

通过提交数据,使用php来出里购物车商品的价钱计算。实现方式:php数组遍历。

总的过程就是:

1)表单基本功能(数据可加减);

2)表单数据的处理,遍历三个数据,获取字符串;

3)在php中将字符串转化成数组,才能计算,



/************************************第一步:前台数据的处理

在<body>中创建一个商品基本信息:

<form method="post"  action="?act=going" id="forms">           <p>                    <input type="text" name="commidity" value="com_1"  class="commidity">   <!--商品id编号-->                    <input type="text" value="399.0" name="prices" readonly>    <!--商品价格-->                    <a href="javascript:void(0);" class="adds">+</a>                                        <input type="text" name="numbers" value="1" readonly>       <!--商品数量:在js里实现+—....-->                     <a href="javascript:void(0);" class="subs">-</a>           </p>           <pre name="code" class="html">           <p>                    <input type="text" name="commidity" value="com_2"  class="commidity">                       <input type="text" value="499.0" name="prices" readonly>                        <a href="javascript:void(0);" class="adds">+</a>                                        <input type="text" name="numbers" value="1" readonly>                     <a href="javascript:void(0);" class="subs">-</a>           </p>
           <p>                    <input type="text" name="commidity" value="com_3"  class="commidity">                       <input type="text" value="599.0" name="prices" readonly>                        <a href="javascript:void(0);" class="adds">+</a>                                        <input type="text" name="numbers" value="1" readonly>                     <a href="javascript:void(0);" class="subs">-</a>           </p>
<p>

<a href="javascript:void(0);" id="subbtn">商品总价</a> //这里一定要设置一个提交的按钮,也可以设置成button的形式

</p>

 </form>

针对数量部分,在jq对象里实现加减:

<scrtipt>              $(function(){                       //实现数量可加可减                       $("a[class='adds']").click(function(){                                     var val_1 = $(this).next("input").val();                                     $(this).next("input").val(parseInt(val_1)+1);                        });                        $("a[class='subs']").click(function(){                                    var val_2 = $(this).prev("input").val();                                    //加一个判断,避免数量出现负数                                   if(val_2 > 1){                                               $(this).prev("input").val(pareseInt(val_2)-1);                                    }                        });                                              //提交表单处理数据步骤                        $("#subbtn").click(function(){                                    var price_val = "";    //设置一个空的变量,用于存放字符串                                    var num_val = "";                                    var com_val = "";                                    //分别遍历每个商品的单价,数量和id,将这些数据转化成字符串的形式                                   $("input[name='prices']").each(function(){                                                if(price_val == "")    price_val  = $(this).val();                                                else      price_val += "," +$(this).val();                                         });                                    $("input[name='numbers']").each(function(){                                                if(num_val == "")    num_val  = $(this).val();                                                else      num_val += "," +$(this).val();                                         });                                    $("input[name='commidity']").each(function(){                                                if(com_val == "")    com_val  = $(this).val();                                                else      com_val += "," +$(this).val();                                         });                                                                                  });              });</script>

获得的三组字符串要传给php来处理,这里就需要一个桥接:

在form表单里添加三个隐藏的Input来存储这些值,这样当表单提交后,就可以在php中获取这些字符串,再做相应的处理。

在刚才的<form>中添加隐藏的input,这样数据就不会呈现给用户,只有后台知道啦:

<input type="hidden" name="price_val">    <!--这里的name命名要同上面jq中的三个字符串var的名字相同,才能成功读取到他们的值--><input type="hidden" name="num_val"><input type="hidden" name="com_val">

要使这些隐藏的input有值,必须接着刚才的Jq在后面添加:

$("input[name='price_val']").val(price_val);

$("input[name='num_val']").val(num_val);

$("input[name='com_val']").val(com_val);


前台值的处理就差不多了,最后一定要记得将整个表单提交:

$("#forms").submit();



/**********************************************第二部:后台数据的处理

接下来就是php的工作啦,要记得get 是获取表单数据,post是传送数据:


$($_GET['act']=="going"){     //这里建议不要有空格,反正我空格的时候出错了            //首先就是获取之前处理好的值,然后将其转化成数组,才能一次运算           $price_val = explode("," ,$_POST['price_val']);           $num_val = explode("," ,$_POST['num_val']);           $com_val = explode("," ,$_POST['com_val']);                     //这三组数组的长度要相等,不然无法计算:          if(count($price_val)!=count($num_val) || count($num_val)!=count($com_val)){                  die("<script>alert('暂时无法操作');</script>");          }          $sum =0;          if($i=0; $i<count($com_val); $i++){                   $com_num = intval($num_val[$i]);                   if($com_num <= 0 || empty($com_num))                             $com_num = 1;  //如果有非法数据,则统一转化为1;                   $sum += floatval($price_val[$i] * $com_num);    //注意类型的转化,因为价格有小数,所以是浮点型                   }                   var_dump($sum);                   die();}



然后就可以运行了,总的代码如下:

<?php/** * Created by PhpStorm. * User: hp * Date: 2016/9/1 * Time: 10:50 * 购物车 */if($_GET['act']=="going"){    $price_val = explode(",",$_POST['price_val']);  //转化为数组    $number_val = explode(",",$_POST['number_val']);    $com_val = explode(",",$_POST['com_val']);    if(count($price_val)!=count($number_val) || count($number_val)!=count($com_val)){        die("<script>alert('提示:暂时无法操作!');</script>");  //如果其中若有为0,则不能计算    }    $sum = 0;    for($i=0;$i<count($com_val);$i++){  //从商品Id开始遍历        $com_num=intval($number_val[$i]);//统计商品数量,数量转化为整型        if($com_num <=0 || empty($com_num))            $com_num=1;   //设置有非法数量则统一转化为1        $sum += floatval($price_val[$i]) * $com_num;    }    var_dump($sum);    die();}?><!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Title</title>    <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js" type="text/javascript"></script>    <script>$(function(){    $("a[class='adds']").click(function(){        var ss = $(this).next("input").val();   //next()的用法        $(this).next("input").val(parseInt(ss) + 1);    });    $("a[class='subs']").click(function(){        var yy = $(this).prev("input").val();  //prev上一级        if(yy > 1){            $(this).prev("input").val(parseInt(yy) - 1);        }    });    $("#subbtn").click(function(){        //获取数量组合成一个字符串        var price_val = "";  //价格        var number_val = "";//数量        var com_val = "";   //商品id        $("input[name='prices']").each(function(){            if(price_val == "")                price_val = $(this).val();   //判断是否为0,若为0则返回本身            else                price_val += ","+$(this).val();        });        $("input[name='numbers']").each(function(){            if(number_val == "")                number_val = $(this).val();            else                number_val += ","+$(this).val();        });        $("input[name='commidity']").each(function(){            if(com_val == "")                com_val = $(this).val();            else                com_val += "," + $(this).val();        });        $("input[name='price_val']").val(price_val);        $("input[name='number_val']").val(number_val);        $("input[name='com_val']").val(com_val);        $("#forms").submit(); //如果没有提交按钮而是a标签一定要有这句    });});    </script>    <style>a{text-decoration: none;}    </style></head><body><form method="post" action="?act=going" id="forms">    <input type="hidden" name="price_val">  <!--这里也必须要有隐藏参数的设置-->    <input type="hidden" name="number_val">    <input type="hidden" name="com_val">    <p>        <input type="hidden" name="commidity" value="1" class="commidity">  //商品的id 要隐藏        <input type="text" value="399.0" name="prices" readonly>        <a href="javascript:void(0);" class="adds">+</a>        <input type="text" value="1" name="numbers" readonly>        <a href="javascript:void(0);" class="subs">-</a>    </p>    <p>        <input type="hidden" name="commidity" value="2" class="commidity">        <input type="text" value="499.0" name="prices" readonly>        <a href="javascript:void(0);" class="adds">+</a>        <input type="text" value="1" name="numbers" readonly>        <a href="javascript:void(0);" class="subs">-</a>    </p>    <p>        <input type="hidden" name="commidity" value="3" class="commidity">        <input type="text" value="599.0" name="prices" readonly>        <a href="javascript:void(0);" class="adds">+</a>        <input type="text" value="1" name="numbers" readonly>        <a href="javascript:void(0);" class="subs">-</a>    </p>    <p>        <a href="javascript:void(0);" id="subbtn">商品总价</a>    </p><!--    <input type="text" name="sum" readonly value="--><?php //var_dump($sum);?><!--">--></form></body></html>

运行方式是在虚拟目录上运行的:localhost/.......

0 0
原创粉丝点击