在电商项目中我们应该,避免一张订单在生成之后,因为种种缘故,倒置了表单的重复提交,在数据库中生成了多条重复的订单数据,这是不允许的,我用session来标识每一张表单,在表单提交之后,session的标识项,自动清除,从而阻止了,表单的重复提交,下面是代码:
前台:
public function flow2(){
//设置session验证码
$user_name=session('user_name');
if(empty($user_name)){
//如果不存在用户名,那么session设置会跳地址
//并且跳转到登陆页面
session('back_url','Shop/flow2');
$this->redirect('User/login');
}
//如果验证了session那么,需要展示我们相关的商品信息
//获取购物车信息
$cart=new \Tools\Cart();
$info=$cart->getCartInfo();
//dump($info);
$nbpc=$cart->getNumberPrice();
$this->assign('nbpc',$nbpc);
$this->assign('info',$info);
$goods_ids=arrayToString($info,'goods_id');
print_r($goods_ids);
$logoinfo=D('Goods')->where(array('goods_id'=>array('in',$goods_ids)))
->field('goods_id,goods_big_logo')
->select();
//dump($logoinfo);
$logoz=array();
foreach($logoinfo as $k=>$v){
$logoz[$v['goods_id']]['goods_big_logo']=$v['goods_big_logo'];
}
$this->assign('logoz',$logoz);
$biaoshi=time()."+".$_SESSION['user_id'];
//将表单唯一标识存入session中
session('biaoshi',$biaoshi);
$this->assign('biaoshi',$biaoshi);
//dump($_SESSION);
$this->display();
}
public function order(){
//提交到order订单中
$order=D('Order');
$shuju=$order->create();
$shuju['order_number']="itcast_".date('Y-m-d H:i:s')."_".mt_rand(1000,9999);
$cart=new \Tools\Cart();
$nbpc=$cart->getNumberPrice();
$shuju['order_total_price']=$nbpc['price'];
$shuju['add_time']=time();
//给我门的唯一表单增加一个身份标识
$a=$_POST['biaoshi'];
$b=$_SESSION['biaoshi'];
if($b && ($b==$a)){
//向里面增加一次
$order_id=$order->add($shuju);
$gt=array();
$gt['order_id']=$order_id;
$cart=new \Tools\Cart();
$info=$cart->getCartInfo();
$ordergoods=D('OrderGoods');
foreach($info as $k=>$v){
$gt['goods_id']=$v['goods_id'];
$gt['goods_number']=$v['goods_buy_number'];
$gt['goods_price']=$v['goods_total_price'];
$ordergoods->add($gt);
}
session('biaoshi',null);
$url = "http://127.0.0.1:1002/Plugin/alipay/alipayapi.php";
$post_data = array (
"WIDout_trade_no" => $shuju['order_number'],
"WIDsubject" => "lage",
"WIDtotal_fee" => $nbpc['price']
);
$ch = curl_init();//开启curl
curl_setopt($ch, CURLOPT_URL, $url); //设置请求地址
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//返回请求的信息
// 我们在POST数据哦!
curl_setopt($ch, CURLOPT_POST, 1);
// 把post的变量加上
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$output = curl_exec($ch);//发起请求,返回的信息通过$output接收
curl_close($ch); //关闭请求
echo $output;
}else{
echo '同一张表单请不要重复提交';
}
}
后台:
public function flow2(){
//设置session验证码
$user_name=session('user_name');
if(empty($user_name)){
//如果不存在用户名,那么session设置会跳地址
//并且跳转到登陆页面
session('back_url','Shop/flow2');
$this->redirect('User/login');
}
//如果验证了session那么,需要展示我们相关的商品信息
//获取购物车信息
$cart=new \Tools\Cart();
$info=$cart->getCartInfo();
//dump($info);
$nbpc=$cart->getNumberPrice();
$this->assign('nbpc',$nbpc);
$this->assign('info',$info);
$goods_ids=arrayToString($info,'goods_id');
print_r($goods_ids);
$logoinfo=D('Goods')->where(array('goods_id'=>array('in',$goods_ids)))
->field('goods_id,goods_big_logo')
->select();
//dump($logoinfo);
$logoz=array();
foreach($logoinfo as $k=>$v){
$logoz[$v['goods_id']]['goods_big_logo']=$v['goods_big_logo'];
}
$this->assign('logoz',$logoz);
$biaoshi=time()."+".$_SESSION['user_id'];
//将表单唯一标识存入session中
session('biaoshi',$biaoshi);
$this->assign('biaoshi',$biaoshi);
//dump($_SESSION);
$this->display();
}
public function order(){
//提交到order订单中
$order=D('Order');
$shuju=$order->create();
$shuju['order_number']="itcast_".date('Y-m-d H:i:s')."_".mt_rand(1000,9999);
$cart=new \Tools\Cart();
$nbpc=$cart->getNumberPrice();
$shuju['order_total_price']=$nbpc['price'];
$shuju['add_time']=time();
//给我门的唯一表单增加一个身份标识
$a=$_POST['biaoshi'];
$b=$_SESSION['biaoshi'];
if($b && ($b==$a)){
//向里面增加一次
$order_id=$order->add($shuju);
$gt=array();
$gt['order_id']=$order_id;
$cart=new \Tools\Cart();
$info=$cart->getCartInfo();
$ordergoods=D('OrderGoods');
foreach($info as $k=>$v){
$gt['goods_id']=$v['goods_id'];
$gt['goods_number']=$v['goods_buy_number'];
$gt['goods_price']=$v['goods_total_price'];
$ordergoods->add($gt);
}
session('biaoshi',null);
$url = "http://127.0.0.1:1002/Plugin/alipay/alipayapi.php";
$post_data = array (
"WIDout_trade_no" => $shuju['order_number'],
"WIDsubject" => "lage",
"WIDtotal_fee" => $nbpc['price']
);
$ch = curl_init();//开启curl
curl_setopt($ch, CURLOPT_URL, $url); //设置请求地址
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//返回请求的信息
// 我们在POST数据哦!
curl_setopt($ch, CURLOPT_POST, 1);
// 把post的变量加上
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$output = curl_exec($ch);//发起请求,返回的信息通过$output接收
curl_close($ch); //关闭请求
echo $output;
}else{
echo '同一张表单请不要重复提交';
}
}