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 相关文章推荐
Zend公司全球首推PHP认证
Oct 09 PHP
计算一段日期内的周末天数的php代码(星期六,星期日总和)
Nov 12 PHP
fleaphp常用方法分页之Pager使用方法
Apr 23 PHP
深入php中var_dump方法的使用详解
Jun 24 PHP
讲解WordPress开发中一些常用的debug技巧
Dec 18 PHP
PHP将MySQL的查询结果转换为数组并用where拼接的示例
May 13 PHP
微信网页授权(OAuth2.0) PHP 源码简单实现
Aug 29 PHP
php自定义函数实现二维数组按指定key排序的方法
Sep 29 PHP
PHP常用算法和数据结构示例(必看篇)
Mar 15 PHP
thinkPHP5.0框架环境变量配置方法
Mar 17 PHP
php成功操作redis cluster集群的实例教程
Jan 13 PHP
PhpStorm2020.1 安装 debug - Postman 调用的详细教程
Aug 17 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的安全策略
2006/10/09 PHP
Zend Framework教程之Zend_Db_Table表关联实例详解
2016/03/23 PHP
PHP使用http_build_query()构造URL字符串的方法
2016/04/02 PHP
如何让PHP编码更加好看利于阅读
2019/05/12 PHP
在Javascript中定义对象类别
2006/12/22 Javascript
让浏览器非阻塞加载javascript的几种方法小结
2011/04/25 Javascript
javascript ajax 仿百度分页函数
2013/10/29 Javascript
jQuery之过滤元素操作小结
2013/11/30 Javascript
Javascript玩转继承(三)
2014/05/08 Javascript
node.js中的fs.unlinkSync方法使用说明
2014/12/15 Javascript
javascript实现简单的可随机变色网页计算器示例
2016/12/30 Javascript
JavaScript中使用webuploader实现上传视频功能(demo)
2017/04/10 Javascript
浅谈关于angularJs中使用$.ajax的注意点
2017/08/12 Javascript
微信小程序picker组件下拉框选择input输入框的实例
2017/09/20 Javascript
JavaScript中重名的函数与对象示例详析
2017/09/28 Javascript
pm2 部署 node的三种方法示例
2017/10/20 Javascript
vue中手机号,邮箱正则验证以及60s发送验证码的实例
2018/03/16 Javascript
vue+webpack实现异步加载三种用法示例详解
2018/04/24 Javascript
js input输入百分号保存数据库失败的解决方法
2018/05/26 Javascript
解决angular2在双向数据绑定时[(ngModel)]无法使用的问题
2018/09/13 Javascript
Element Cascader 级联选择器的使用示例
2020/07/27 Javascript
Python内建数据结构详解
2016/02/03 Python
python3.6.3+opencv3.3.0实现动态人脸捕获
2018/05/25 Python
Python中 CSV格式清洗与转换的实例代码
2019/08/29 Python
简单瞅瞅Python vars()内置函数的实现
2019/09/27 Python
浅谈Pytorch中的自动求导函数backward()所需参数的含义
2020/02/29 Python
python tkinter GUI绘制,以及点击更新显示图片代码
2020/03/14 Python
python读取yaml文件后修改写入本地实例
2020/04/27 Python
Python基于execjs运行js过程解析
2020/11/27 Python
pymongo insert_many 批量插入的实例
2020/12/05 Python
HTML5中视频音频的使用详解
2017/07/07 HTML / CSS
PHP如何删除一个Cookie值
2012/11/15 面试题
酒店节能降耗方案
2014/05/08 职场文书
Python中使用subprocess库创建附加进程
2021/05/11 Python
Python编写可视化界面的全过程(Python+PyCharm+PyQt)
2021/05/17 Python
Redis配置外网可访问(redis远程连接不上)的方法
2022/12/24 Redis