使用session存储,购物车结算add_to_order.php(学生笔记)
<?php
session_start();
include_once("DB.class.php"); //接受并解析前端传过来的json,转换成数组。
$goods_list =$_POST['order'];
$goods_list= json_decode($goods_list, true); //1.获取session信息
$arr = $_SESSION['gwc'];
//获得订单数组
$item_list = $goods_list['order']; //一维实现,每次先清空订单。
$order = ''; //把商品信息存到订单,并且把他们从购物车中删除
foreach($item_list as $k=> $item){ //把商品信息存到订单
$order[$k] = $arr[$k]; //把商品信息从购物车中删除
unset($arr[$k]); } //更新购车的商品信息
if(!empty($arr)){
$_SESSION['gwc'] = $arr;
}else{
$_SESSION['gwc'] = '';
} //最后将订单信息存到session
$_SESSION['order'] = $order; // var_dump($_SESSION);
// die();
echo "OK";
exit; ?>
注:例子中是使用的工具类代码DB.class.php要在https://www.cnblogs.com/mzzone/p/10911891.html
业务逻辑
- 从购物车中点击结算,即是把商品信息从购物车中转移到订单中。
- 技术点:接受的方式是json。要先在前台以json的形式传过来,这里再把它解析为数组,再运用。
购物车页面的结算按钮注册点击事件(需要引入jquery文件)
$('#jiesuan').click( function(){
//间接设置订单金额
var j = $('.total_text').text();
// 去除¥符号
var order_toal = j.substring(1);
//将标签的值赋给input传过去
$("#order_total").val(order_toal);
//用插件将表单生成json,在ajax发送过去后台
var serializeObj=$('#form1').serializeJSON();
var serializeStr=JSON.stringify(serializeObj);
console.log(serializeStr);
$.ajax({
cache: false,
type: "POST",
url : "add_to_order.php",
traditional:true,
data: {order : serializeStr}, //注意这里的写法,键为order
success: function(msg){
if(msg=="OK"){
alert("下单成功");
// location.reload();
//window.location.href='order.php';
}else{
alert(msg);
alert("下单失败");
}
}
});
表单中的一部分代码,展示如何把选中的商品传过去。关键在于checbox键值设置:在foreache循环中,所以键值得有变量混合进去。
<!-- 1.遍历店铺,查看有多少商品并遍历。-->
<div class="shop_info">
<div class="all_check">
<!--店铺全选-->
<input type='checkbox' id='shop_a' class='shopChoice'> <label for='shop_a' class='shop'></label> </div>
<div class="shop_name">
店铺:<a href="javascript:;">蜜食专家</a>
</div>
</div> <?php
session_start();
include_once("DB.class.php"); if(isset($_SESSION['gwc'])&&!empty($_SESSION['gwc'])){
$arr2 = $_SESSION['gwc'];
foreach($arr2 as $k1=> $arr){ $goods_id = $arr['goods_id'];
$sql="select * from tb_goods where id=$goods_id";
$goods = $dao->getRow($sql); $goods_num = $arr['num']; $sum = $goods['price']*$goods_num; ?>
<div class="order_content">
<!-- 最低应该在这里开始遍历,有分割线 --> <!-- 利用上面的php变量,遍历一个商品或sku -->
<ul class="order_lists"> <li class="list_chk">
<!-- 每个复选框的值存她的商品id或sku_id -->
<?php echo "<input type='checkbox' id='checkbox_$goods_id' name='order[$goods_id]' value='$goods_id' class='son_check'>"; ?> <!-- 打勾对应文本框的id -->
<?php echo "<label for='checkbox_$goods_id'></label>"; ?>
</li>
<li class="list_con">
<div class="list_img"><a href="javascript:;">
<?php echo "<img src='./images/$goods[img]' alt=''>";?>
</a></div>
<div class="list_text"><a href="javascript:;"><?php echo "$goods[goodsname]"; ?></a></div>
</li>
<li class="list_info">
<p>规格:默认</p> </li>
<li class="list_price">
<p class="price"><?php echo '¥'."$goods[price]"; ?></p> <?php echo "<input type='hidden' value='$goods[price]'>"; ?>
</li>
<li class="list_amount">
<div class="amount_box">
<!-- 对商品的数量进行加减 -->
<?php echo "<a href='change_number.php?goods_id=$goods_id&choice=jian' class='reduce reSty'>-</a> "; ?>
<!-- 数量,要从session或数据库中查出来 -->
<?php echo "<input type='text' value='$goods_num' class='sum'>"; ?> <?php echo "<a href='change_number.php?goods_id=$goods_id&choice=jia' class='plus'>+</a> "; ?>
<?php echo "<input type='hidden' value='$goods[number]'>"; ?> </div>
</li>
<li class="list_sum">
<p class="sum_price"><?php echo '¥'."$sum"; ?></p>
</li>
<li class="list_op">
<p class="del">
<?php echo "<a href='delete_goods.php?goods_id=$goods_id' class='delBtn'>删除宝贝</a> "; ?></p>
</li>
</ul> </div>
<?php }} else{
echo "<h1 style='margin-top:150px;text-align:center;font-size: 39px;color:#c18e2cdb;'>兄
dei,你的购物车只剩下尊严了!!!</h1>";
}
?>

注意事项
可以给商品的checkbox类型添加name属性是因为他有selected属性,而其他像hidden类型的不能给它name属性,否则也会提交到后台。要保持提交过去的数据不能有冗余,需要遍历。
而且添加到订单也只需商品id就行,订单的商品数量可以在根据key在gwc中获得。具体看add_to_order.php.
使用session存储,购物车结算add_to_order.php(学生笔记)的更多相关文章
- 添加商品到购物车add_to_cart.php(学生笔记)
<?php session_start();//启动session $goods_id = $_POST['goods_id'];//获取商品id $number = $_POST['num'] ...
- Jetty集群配置Session存储到MySQL、MongoDB
在Web开发中,Session表示HTTP服务器与客户端(例如浏览器)的“会话”,每个客户端会有其对应的Session保存在服务器端,通常用来保存和客户端关联的一些信息,例如是否登录.购物车等. Se ...
- Jetty容器集群配置Session存储到MySQL、MongoDB
在Web开发中,Session表示HTTP服务器与客户端(例如浏览器)的"会话",每个客户端会有其对应的Session保存在服务器端,通常用来保存和客户端关联的一些信息,例如是否登 ...
- 【ASP】session实现购物车
1.问题提出 利用session内置对象,设计并实现一个简易的购物车,要求如下: 1)利用用户名和密码,登录进入购物车首页 2)购物首页显示登录的用户名以及该用户是第几位访客.(同一用户的刷新应该记录 ...
- 原生JS实现购物车结算功能代码+zepto版
html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...
- Session 知识点再整理(二) 自定义 Session 存储机制
对于访问量大的网站,用默认的 Session 存储方式(以文件存储)不适合,因为文件的 I/O 开销会非常大,另外 Session 机制本身使 Session 不能跨机访问,在 Web 集群中无法达到 ...
- session 存储方式
Session 的存储方式 在 php.ini 文件中,进行配置. 涉及配置参数: - session.save_handler - session.save_path 注意:这两个参数可以在 PHP ...
- C# redis 分布式session存储
https://github.com/uliian/SessionExtentionStore 一个基于Redis的Session存储扩展方案,解决ASP.NET中Session的局限性和跨应用程序使 ...
- YII session存储 调用login方法
当要进行用户的session存储的时候,可以调用里面的login方法进行存储
随机推荐
- 《Dotnet9》系列-开源C# WPF控件库强力推荐
时间如流水,只能流去不流回! 点赞再看,养成习惯,这是您给我创作的动力! 本文 Dotnet9 https://dotnet9.com 已收录,站长乐于分享dotnet相关技术,比如Winform.W ...
- Python 浮点数的冷知识
本周的PyCoder's Weekly 上分享了一篇小文章,它里面提到的冷知识很有意思,我稍作补充,分享给大家. 它提到的部分问题,读者们可以先思考下: 若两个元组相等,即 a==b 且 a is b ...
- 爬虫(五):代理IP、Cookie
1. 代理IP 代理IP这个功能呢,在urllib和requests中都存在,但是这个在大的爬虫项目中是非常重要的,所以我拿出来单独讲解. 对于某些网站,如果同一个 IP 短时间内发送大量请求,则可能 ...
- 松软科技Web课堂:JavaScript JSON
JSON 是存储和传输数据的格式. JSON 经常在数据从服务器发送到网页时使用. 什么是 JSON? JSON 指的是 JavaScript Object Notation JSON 是轻量级的数据 ...
- BIM工程信息管理系统搭建-系统功能需求
BIM工程信息管理系统功能需求 该系统是真实存在项目,项目于2013年开始研发到2014年初完成,按照当时技术能力和国内BIM现状,现在BIM技术已比之前好多了,不管是建模.展示等.均提高了不少,本博 ...
- 我如何通过K8S开发认证(CKAD)考试
题记:笔者最近经过3个多月的空余时间准备,终于通过了K8S开发认证(CKAD)的考试,在这里简单给大家分享一下经验. 一,先科普下CKAD 众所周知,Kubernetes在容器编排器大战中脱颖而出后, ...
- UWP 在非UI线程中更新UI
大家都知道,不可以在 其他线程访问 UI 线程,访问 UI 线程包括给 依赖属性设置值.读取依赖属性.调用方法(如果方法里面修改了依赖属性)等.一旦访问UI线程,那么就会报错,为了解决这个问题,需要使 ...
- django找不到模板的错误处理django.template.exceptions.TemplateDoesNotExist: blog/list.html
错误提示如下图: 程序出错对于程序员而言是最常见的,一般解决的要点是看清错误提示(读懂英文很重要) 根据错误提示 blog\list.html这个文件不存在,也就是没找到资源 这个时候需要去检查有没有 ...
- 如何利用随机数产生验证码(java基础知识)
以前我们通用的验证码都是五个不同的大小写字母,那么今天我就带大家学习一下利用Java基础怎么生成验证码.首先我们应该有一个清晰的思路:首先定义一个固定长度的数组用来存储需要生成的字母:其次生成随机数, ...
- Axure导出的原型无法在谷歌浏览器浏览
1.下载crx后缀的文件. 2.修改crx后缀名为rar的压缩文件 3.解压刚才的rar文件 4.打开谷歌浏览器右上角的三个点 更多工具==>扩展程序 选择刚才的解压文件夹. 上面的图表示安装成 ...