php tp框架电商项目防表单重复提交

在电商项目中我们应该,避免一张订单在生成之后,因为种种缘故,倒置了表单的重复提交,在数据库中生成了多条重复的订单数据,这是不允许的,我用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 '同一张表单请不要重复提交';
        }
    }

这样就能在表单的提交之后,很好的阻断重复的表单数据了,初步的想法,请各位大神指点!! 偷笑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值