Laravel框架实现抢红包功能示例


Posted in PHP onOctober 31, 2019

本文实例讲述了Laravel框架实现抢红包功能。分享给大家供大家参考,具体如下:

首先进行登录

<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>

在登录时,我们会进行一些相应的验证:比如用户名,手机号,密码等?

//登录
	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');
			}
		}
	}

模型部分代码

//登录
	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;
	}

登录成功之后,跳转到了用户信息的页面
Laravel框架实现抢红包功能示例
可以在信息界面自行选择 抢红包 或者 发红包
1.发红包,跳转到相应的发红包界面
Laravel框架实现抢红包功能示例
输入要发的个数和总金额,然后进行发红包

//控制器部分代码
	//发红包
	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;
	  		}
  		}
  }

发送红包之后,返回到用户信息页面,我们可以看到,用户的余额会变少,减少的金额为红包的总额
Laravel框架实现抢红包功能示例
发送之后,相应的数据已经入了库表,此时我们可以进行抢红包

//控制器部分代码
	//抢红包
  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;
	  			}
	  		}
  		}
  }

我们可以看抢红包的效果
Laravel框架实现抢红包功能示例
抢红包成功之后,用户余额会加上抢到的金额
再次点击抢红包之后
Laravel框架实现抢红包功能示例
会提示您已经抢过红包了

这就是一个简单的抢红包~~~

希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。

PHP 相关文章推荐
php对gzip文件或者字符串解压实例参考
Jul 25 PHP
php SQL之where语句生成器
Mar 24 PHP
PHP chmod 函数与批量修改文件目录权限
May 10 PHP
PHP 如何利用phpexcel导入数据库
Aug 24 PHP
php+ajax实现无刷新分页的方法
Nov 04 PHP
php生成二维码时出现中文乱码的解决方法
Dec 18 PHP
php通过分类列表产生分类树数组的方法
Apr 20 PHP
PHP内核学习教程之php opcode内核实现
Jan 27 PHP
php生成Android客户端扫描可登录的二维码
May 13 PHP
Thinkphp3.2.3分页使用实例解析
Jul 28 PHP
PHP控制反转(IOC)和依赖注入(DI)
Mar 13 PHP
php实现获取近几日、月时间示例
Jul 06 PHP
laravel框架实现后台登录、退出功能示例
Oct 31 #PHP
TP5框架简单登录功能实现方法示例
Oct 31 #PHP
Laravel框架实现即点即改功能的方法分析
Oct 31 #PHP
laravel 框架实现无限级分类的方法示例
Oct 31 #PHP
tp5框架的增删改查操作示例
Oct 31 #PHP
PHP简单实现图片格式转换(jpg转png,gif转png等)
Oct 30 #PHP
thinkPHP框架乐观锁和悲观锁实例分析
Oct 30 #PHP
You might like
用PHP读取RSS feed的代码
2008/08/01 PHP
php连接mysql数据库代码
2009/03/10 PHP
PHP新手入门学习方法
2011/05/08 PHP
学习php设计模式 php实现抽象工厂模式
2015/12/07 PHP
laravel orm 关联条件查询代码
2019/10/21 PHP
异步加载script的代码
2011/01/12 Javascript
调试Node.JS的辅助工具(NodeWatcher)
2012/01/04 Javascript
JavaScript中获取高度和宽度函数总结
2014/10/08 Javascript
使用jspdf生成pdf报表
2015/07/03 Javascript
jquery实现列表上下移动功能
2016/02/25 Javascript
AngularJS 基础ng-class-even指令用法
2016/08/01 Javascript
jquery插件bootstrapValidator数据验证详解
2016/11/09 Javascript
Vue中引入样式文件的方法
2017/08/18 Javascript
JS实现点击链接切换显示隐藏内容的方法
2017/10/19 Javascript
jquery引入外部CDN 加载失败则引入本地jq库
2018/05/23 jQuery
Vue props用法详解(小结)
2018/07/03 Javascript
一个Vue视频媒体多段裁剪组件的实现示例
2018/08/09 Javascript
react 应用多入口配置及实践总结
2018/10/17 Javascript
wx-charts 微信小程序图表插件的具体使用
2019/08/18 Javascript
vue使用echarts实现水平柱形图实例
2020/09/09 Javascript
Python中捕捉详细异常信息的代码示例
2014/09/18 Python
TF-IDF算法解析与Python实现方法详解
2017/11/16 Python
基于pycharm导入模块显示不存在的解决方法
2018/10/13 Python
python画图把时间作为横坐标的方法
2019/07/07 Python
用OpenCV将视频分解成单帧图片,图片合成视频示例
2019/12/10 Python
Python GUI编程学习笔记之tkinter界面布局显示详解
2020/03/30 Python
通过代码实例解析Pytest运行流程
2020/08/20 Python
党课学习思想汇报
2014/01/02 职场文书
聘任书的写作格式及范文
2014/03/29 职场文书
办公用房租赁协议书
2014/11/29 职场文书
三方协议书
2015/01/27 职场文书
建党伟业观后感
2015/06/01 职场文书
践行三严三实心得体会(2016推荐篇)
2016/01/06 职场文书
学校2016年九九重阳节活动总结
2016/04/01 职场文书
2019年最新感恩节祝福语(28句)
2019/11/27 职场文书
Python提取PDF指定内容并生成新文件
2021/06/09 Python