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 数组教程 定义数组
Oct 23 PHP
PHP 写文本日志实现代码
May 18 PHP
两种设置php载入页面时编码的方法
Jul 29 PHP
php中magic_quotes_gpc对unserialize的影响分析
Dec 16 PHP
PHP 验证登陆类分享
Mar 13 PHP
JavaScript实现滚动栏效果的方法
Apr 27 PHP
PHP的Yii框架的基本使用示例
Aug 21 PHP
PHP加密解密实例分析
Dec 25 PHP
PHP简单获取上月、本月、近15天、近30天的方法示例
Jul 03 PHP
php递归函数怎么用才有效
Feb 24 PHP
PHP函数按引用传递参数及函数可选参数用法示例
Jun 04 PHP
php 使用mpdf实现指定字段配置字体样式的方法
Jul 29 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判断客户端类型
2016/10/14 PHP
javaScript 读取和设置文档元素的样式属性
2009/04/14 Javascript
javascript new fun的执行过程
2010/08/05 Javascript
jQuery中将函数赋值给变量的调用方法
2012/03/23 Javascript
js面向对象 多种创建对象方法小结
2012/05/21 Javascript
JS实现仿百度输入框自动匹配功能的示例代码
2014/02/19 Javascript
js操作滚动条事件实例
2015/01/29 Javascript
javascript封装 Cookie 应用接口
2015/08/07 Javascript
js强制把网址设为默认首页
2015/09/29 Javascript
jquery.uploadView 实现图片预览上传功能
2017/08/10 jQuery
React中的refs的使用教程
2018/02/13 Javascript
vue实现文件上传功能
2018/08/13 Javascript
对vux点击事件的优化详解
2018/08/28 Javascript
javascript设计模式 ? 迭代器模式原理与用法实例分析
2020/04/17 Javascript
[31:01]2014 DOTA2国际邀请赛中国区预选赛5.21 CNB VS Orenda
2014/05/23 DOTA
[08:56]DOTA2-DPC中国联赛2月23日Recap集锦
2021/03/11 DOTA
跟老齐学Python之数据类型总结
2014/09/24 Python
Python获取暗黑破坏神3战网前1000命位玩家的英雄技能统计
2016/07/04 Python
python中星号变量的几种特殊用法
2016/09/07 Python
python基于twisted框架编写简单聊天室
2018/01/02 Python
python 输出所有大小写字母的方法
2019/01/02 Python
丹尼尔惠灵顿手表天猫官方旗舰店:Daniel Wellington
2017/08/25 全球购物
Kathmandu美国网站:新西兰户外运动品牌
2019/03/23 全球购物
波兰在线香水店:Perfumy.pl
2019/08/12 全球购物
荷兰网上药店:Drogisterij.net
2019/09/03 全球购物
澳大利亚排名第一的露营和户外设备在线零售商:Outbax
2020/05/06 全球购物
大学生专科学习生活的自我评价
2013/12/07 职场文书
服务员岗位责任制
2014/02/11 职场文书
大学军训感言1500字
2014/03/09 职场文书
安全生产年活动总结
2014/08/29 职场文书
2014党的群众路线教育实践活动总结报告
2014/10/31 职场文书
四年级数学上册教学计划
2015/01/20 职场文书
2015年护士工作总结范文
2015/03/31 职场文书
消夏晚会主持词
2015/06/30 职场文书
手把手教你制定暑期学习计划,让你度过充实的暑假
2019/08/22 职场文书
Redis如何一键部署脚本
2021/04/12 Redis