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函数utf8转gb2312编码
Dec 21 PHP
收集的DedeCMS一些使用经验
Mar 17 PHP
获取远程文件大小的php函数
Jan 11 PHP
PHP中的array数组类型分析说明
Jul 27 PHP
深入PHP FTP类的详解
Jun 13 PHP
PHP中的use关键字概述
Jul 23 PHP
PHP跨平台获取服务器IP地址自定义函数分享
Dec 29 PHP
Thinkphp和onethink实现微信支付插件
Apr 13 PHP
利用PHP判断是否是连乘数字串的方法示例
Jul 03 PHP
PHP实现权限管理功能示例
Sep 22 PHP
Laravel5.7框架安装与使用学习笔记图文详解
Apr 02 PHP
thinkPHP和onethink微信支付插件分享
Aug 11 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
PHP5全版本绕过open_basedir读文件脚本漏洞详细介绍
2015/01/20 PHP
php获取当月最后一天函数分享
2015/02/02 PHP
PHP实现json_decode不转义中文的方法
2017/05/20 PHP
js相册效果代码(点击创建即可)
2013/04/16 Javascript
jquery移动listbox的值原理及代码
2013/05/03 Javascript
JavaScript 命名空间 使用介绍
2013/08/29 Javascript
jquery简单实现鼠标经过导航条改变背景图
2013/12/17 Javascript
JavaScript中定义函数的三种方法
2015/03/12 Javascript
轻松学习jQuery插件EasyUI EasyUI创建CRUD应用
2015/11/30 Javascript
JavaScript知识点总结(四)之逻辑OR运算符详解
2016/05/31 Javascript
AngularJS基础 ng-keydown 指令简单示例
2016/08/02 Javascript
详解如何提高 webpack 构建 Vue 项目的速度
2017/07/03 Javascript
vue loadmore组件上拉加载更多功能示例代码
2017/07/19 Javascript
微信小程序获取用户信息并保存登录状态详解
2019/05/10 Javascript
JavaScript实现旋转木马轮播图
2020/03/16 Javascript
node.js +mongdb实现登录功能
2020/06/18 Javascript
Vue组件间数据传递的方式(3种)
2020/07/13 Javascript
[02:03]DOTA2亚洲邀请赛 HGT战队出场宣传片
2015/02/07 DOTA
[00:52]DOTA2齐天大圣预告片
2016/08/13 DOTA
python的numpy模块安装不成功简单解决方法总结
2017/12/23 Python
pandas dataframe添加表格框线输出的方法
2019/02/08 Python
Python Datetime模块和Calendar模块用法实例分析
2019/04/15 Python
详解用python写网络爬虫-爬取新浪微博评论
2019/05/10 Python
PyQt5多线程刷新界面防假死示例
2019/12/13 Python
python怎么调用自己的函数
2020/07/01 Python
python 牛顿法实现逻辑回归(Logistic Regression)
2020/10/15 Python
HTML5 WebGL 实现民航客机飞行监控系统
2019/07/25 HTML / CSS
旅游业大学生创业计划书
2014/01/31 职场文书
银行职员个人的工作自我评价
2014/02/15 职场文书
法学求职信
2014/06/22 职场文书
应届生自荐书
2014/06/23 职场文书
实习指导老师意见
2015/06/04 职场文书
不会写演讲稿,快来看看这篇文章!
2019/08/06 职场文书
MySQL 覆盖索引的优点
2021/05/19 MySQL
SQL解决未能删除约束问题drop constraint
2022/05/30 SQL Server
cypress测试本地web应用
2022/06/01 Javascript