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实现批量查询清除一句话后门的代码
Jan 20 PHP
php 时间计算问题小结
Jan 04 PHP
php imagecreatetruecolor 创建高清和透明图片代码小结
May 15 PHP
PHP字符串的递增和递减示例介绍
Feb 11 PHP
php实现带读写分离功能的MySQL类完整实例
Jul 28 PHP
php生成与读取excel文件
Oct 14 PHP
利用php做服务器和web前端的界面进行交互
Oct 31 PHP
Yii2――使用数据库操作汇总(增删查改、事务)
Dec 19 PHP
PHP命名空间namespace的定义方法详解
Mar 29 PHP
PHP读取word文档的方法分析【基于COM组件】
Aug 01 PHP
在Laravel5.6中使用Swoole的协程数据库查询
Jun 15 PHP
使用PHP开发留言板功能
Nov 19 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
把77A收信机改造成收音机
2021/03/02 无线电
咖啡的化学
2021/03/03 咖啡文化
php生成excel列序号代码实例
2013/12/24 PHP
解密效果
2006/06/23 Javascript
Extjs学习笔记之六 面版
2010/01/08 Javascript
用JavaScript玩转游戏物理(一)运动学模拟与粒子系统
2010/06/19 Javascript
Notify - 基于jquery的消息通知插件
2011/10/18 Javascript
JS定时器实例详细分析
2013/10/11 Javascript
使用原生js封装webapp滑动效果(惯性滑动、滑动回弹)
2014/05/06 Javascript
javascript定义类和类的实现实例详解
2015/12/01 Javascript
微信小程序 页面传值详解
2017/03/10 Javascript
vue2.0 循环遍历加载不同图片的方法
2018/03/06 Javascript
vue页面切换到滚动页面显示顶部的实例
2018/03/13 Javascript
详解vue.js下引入百度地图jsApi的两种方法
2018/07/27 Javascript
详解html-webpack-plugin插件(用法总结)
2018/09/12 Javascript
详解vue在项目中使用百度地图
2019/03/26 Javascript
JavaScript实现PC端横向轮播图
2020/02/07 Javascript
JavaScript设计模式之策略模式实现原理详解
2020/05/29 Javascript
基于Echarts图表在div动态切换时不显示的解决方式
2020/07/20 Javascript
node.js如何操作MySQL数据库
2020/10/29 Javascript
python装饰器decorator介绍
2014/11/21 Python
Python实现基本数据结构中栈的操作示例
2017/12/04 Python
python导入csv文件出现SyntaxError问题分析
2017/12/15 Python
Python在图片中插入大量文字并且自动换行
2019/01/02 Python
python实现的自动发送消息功能详解
2019/08/15 Python
python 协程中的迭代器,生成器原理及应用实例详解
2019/10/28 Python
python实现word文档批量转成自定义格式的excel文档的思路及实例代码
2020/02/21 Python
详解python 条件语句和while循环的实例代码
2020/12/28 Python
Matplotlib配色之Colormap详解
2021/01/05 Python
纯CSS3实现扇形动画菜单(简化版)实例源码
2017/01/17 HTML / CSS
Servlet都有哪些方法?主要作用是什么?
2014/03/04 面试题
公司成本主管岗位责任制
2014/02/21 职场文书
小学清明节活动总结
2014/07/04 职场文书
建设工程授权委托书
2014/09/22 职场文书
解决goland 导入项目后import里的包报红问题
2021/05/06 Golang
MySQL开启事务的方式
2021/06/26 MySQL