本文实例讲述了Laravel框架实现抢红包功能。分享给大家供大家参考,具体如下:
1 2 3 4 5 6 | <form action= "{{url('b_login')}}" method= "post" > {{csrf_field()}} <p>用户名:<input type= "text" name= "username" ></p> <p>密 码:<input type= "password" name= "password" ></p> <p><input type= "submit" value= "登录" ></p> </form> |
1 2 3 4 5 6 7 8 9 10 11 12 | //登录 public function login(){ if (Request()->isMethod( 'get' )){ return view( 'Bonus/login' ); } elseif (Request()->isMethod( 'post' )){ $info = Request()->only( 'username' , 'password' ); //这里为接收的表单数据 $result = BonusModel::b_login( $info ); //调用模型,进行验证 if ( $result [ 'status' ]==200){ return redirect( 'b_user' ); } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | //登录 public static function b_login( $info ){ $result = DB::table( 'bonus_user' )->where( 'username' , $info [ 'username' ])->first(); if ( empty ( $result )){ $res [ 'status' ] = 201; $res [ 'message' ] = '用户不存在' ; } else { if (md5( $info [ 'password' ]) != $result ->password){ $res [ 'status' ] = 202; $res [ 'message' ] = '密码错误' ; } else { Session::put( 'uid' , $result ->id); $res [ 'status' ] = 200; $res [ 'message' ] = '登录成功' ; } } return $res ; } |

可以在信息界面自行选择 抢红包 或者 发红包
1.发红包,跳转到相应的发红包界面

输入要发的个数和总金额,然后进行发红包
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | //控制器部分代码 //发红包 public function sendRecord(){ if (Request()->isMethod( 'get' )){ return view( 'Bonus/bonus' ); } elseif (Request()->isMethod( 'post' )){ $data = Request()->all(); $result = BonusModel::send( $data ); if ( $result [ 'status' ]==200){ return redirect( 'b_user' )->with( 'msg' , $result [ 'message' ]);; } else { return redirect( 'b_user' )->with( 'msg' , $result [ 'message' ]); } } } //发红包(模型部分代码) public static function send( $data ){ $id = Session::get( 'uid' ); //取出session中存储的id信息 $user = DB::select( "select money from bonus_user where id = $id" ); //根据id查询出相应的用户信息 if ( $user [0]->money< $data [ 'amount' ]){ //判断发红包的金额 和 用户的余额 $result [ 'status' ] = 203; $result [ 'message' ] = "余额不足" ; return $result ; die ; } else { $total = $data [ 'amount' ]; //发送的总金额 $nums = $data [ 'nums' ]; //红包个数 $min = 0.01; //最少领导0.01元 $redRecord = []; //定义一个空数组,存储每个红包金额 for ( $i =1; $i < $nums ; $i ++){ $safe_total = ( $total -( $nums - $i )+ $min )/( $nums - $i ); //随机金额上限 $money = mt_rand( $min *100, $safe_total *100)/100; $total = $total - $money ; $redRecord [] = array ( 'money' => $money , 'uid' => $id , 'create_time' => date ( 'Y-m-d H:i:s' ) ); } $redRecord [ $nums -1] = array ( 'money' => $total , 'uid' => $id , 'create_time' => date ( 'Y-m-d H:i:s' )); $redarr = array ( 'uid' => $id , 'total' => $data [ 'amount' ], 'nums' => $data [ 'nums' ], 'create_time' => date ( 'Y-m-d H:i:s' )); DB::table( 'bonus_record' )->insert( $redarr ); //那个用户发的红包,金额数,个数 $info = DB::table( 'bonus' )->insert( $redRecord ); //红包详细,使用情况 DB::table( 'bonus_user' )->where( 'id' , $id )->decrement( 'money' , $data [ 'amount' ]); if ( $info ){ $result [ 'status' ] = 200; $result [ 'message' ] = "发送成功" ; return $result ; } else { $result [ 'status' ] = 201; $result [ 'message' ] = "发送失败" ; return $result ; } } } |
发送红包之后,返回到用户信息页面,我们可以看到,用户的余额会变少,减少的金额为红包的总额

发送之后,相应的数据已经入了库表,此时我们可以进行抢红包
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | //控制器部分代码 //抢红包 public function HitBonus(){ $result = BonusModel::hit(); //调用模型 if ( $result [ 'status' ]==200){ return redirect( 'b_user' )->with( 'msg' , $result [ 'message' ]); //带信息的重定向 } else { return redirect( 'b_user' )->with( 'msg' , $result [ 'message' ]); } } //模型部分代码 //抢红包 public static function hit(){ //检测是否登录 if (!Session::has( 'uid' )){ $result [ 'status' ]=206; $result [ 'message' ]= "登录之后再来抢红包" ; return $result ; } $count = DB::table( 'bonus' )->where( 'did' ,Session::get( 'uid' ))-> count (); if ( $count >=1){ $result [ 'status' ]=208; $result [ 'message' ]= "您已经抢过红包了" ; return $result ; } $data = DB::table( 'bonus' )->where( 'status' ,0)->first(); //查询出没有被抢的红包 if ( empty ( $data )){ //如果没有状态为0的红包,说明所有的红包都已经被抢了 $result [ 'status' ]=205; $result [ 'message' ]= "您来晚了,红包已经没有了" ; return $result ; } else { //如果还有红包 $array = array ( 'status' =>1, //改变红包的状态 'did' =>Session::get( 'uid' ), //抢红包用户的id 'update_time' => date ( 'Y-m-d H:i:s' ) //抢红包的时间 ); $info = DB::table( 'bonus' )->where( 'rid' , $data ->rid)->update( $array ); if ( $info ){ $res = DB::table( 'bonus_user' )->where( 'id' ,Session::get( 'uid' ))->first(); //查询抢红包用户的信息 $money = $res ->money + $data ->money; //原金额加上抢到的金额 $array = array ( 'money' => $money ); $resu = DB::table( 'bonus_user' )->where( 'id' ,Session::get( 'uid' ))->update( $array ); $hit_money = $data ->money; if ( $resu ){ $result [ 'status' ] = 200; $result [ 'message' ] = "恭喜您抢到:'" . $hit_money . "'" ; return $result ; } } } } |
我们可以看抢红包的效果

抢红包成功之后,用户余额会加上抢到的金额
再次点击抢红包之后

会提示您已经抢过红包了
这就是一个简单的抢红包~~~
扫码二维码 获取免费视频学习资料
- 本文固定链接: http://www.phpxs.com/post/6677/
- 转载请注明:转载必须在正文中标注并保留原文链接
- 扫码: 扫上方二维码获取免费视频资料
查 看2022高级编程视频教程免费获取