最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

ThinkPHP5+jQuery+MySql实现投票功能的方法

来源:动视网 责编:小采 时间:2020-11-03 18:20:08
文档

ThinkPHP5+jQuery+MySql实现投票功能的方法

ThinkPHP5+jQuery+MySql实现投票功能的方法:下面由ThinkPHP教程栏目给给大家介绍ThinkPHP5+jQuery+MySql实现投票功能的方法,希望对需要的朋友也是帮助!首先效果图如下:然后分享代码如下:前端代码:<!DOCTYPE HTML> <html> <head> <meta charse
推荐度:
导读ThinkPHP5+jQuery+MySql实现投票功能的方法:下面由ThinkPHP教程栏目给给大家介绍ThinkPHP5+jQuery+MySql实现投票功能的方法,希望对需要的朋友也是帮助!首先效果图如下:然后分享代码如下:前端代码:<!DOCTYPE HTML> <html> <head> <meta charse
 下面由ThinkPHP教程栏目给给大家介绍ThinkPHP5+jQuery+MySql实现投票功能的方法,希望对需要的朋友也是帮助!

首先效果图如下:

然后分享代码如下:

前端代码:

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>基于THINKPHP5实现红蓝投票功能</title>
<style type="text/css">
 .vote{width:288px; height:300px; margin:40px auto;position:relative}
 .votetitle{width:100%;height:62px; background:url(/static/index/images/icon.png) no-repeat 0 30px; font-size:15px}
 .red{position:absolute; left:0; top:64px; height:80px;}
 .blue{position:absolute; right:0; top:64px; height:80px;}
 .red p,.blue p{line-height:22px}
 .redhand{position:absolute; left:0;width:36px; height:36px; background:url(/static/index/images/icon.png) no-repeat -1px -38px;cursor:pointer}
 .bluehand{position:absolute; right:0;width:36px; height:36px; background:url(/static/index/images/icon.png) no-repeat -41px -38px;cursor:pointer}
 .grayhand{width:34px; height:34px; background:url(/static/index/images/icon.png) no-repeat -83px -38px;cursor:pointer}
 .redbar{position:absolute; left:42px; margin-top:8px;}
 .bluebar{position:absolute; right:42px; margin-top:8px; }
 .redbar span{display:block; height:6px; background:red; width:100%;border-radius:4px;}
 .bluebar span{display:block; height:6px; background:#09f; width:100%;border-radius:4px; position:absolute; right:0}
 .redbar p{line-height:20px; color:red;}
 .bluebar p{line-height:20px; color:#09f; text-align:right; margin-top:6px}
</style>
<script type="text/javascript" src="/static/index/js/jquery.js"></script>
<script type="text/javascript">
$(function(){
 // 获取初始数据
 getdata('',1);
 
 $(".redhand").click(function(){
 getdata("red",1);
 });
 $(".bluehand").click(function(){
 getdata("blue",1);
 });
});
function getdata(type,vid){
 $.ajax({
 url: "{:url('/index/vote/vote')}",
 data: {type:type,vid:vid},
 type:'POST',
 dataType: 'json',
 success: function (res) {
 console.log(res)
 if (res.status == 0) {
 alert('投票成功')
 var w = 208;
 $("#red_num").html(res.msg.rednum);
 $("#red").css("width",res.msg.red_percent*100+"%");
 var red_bar_w = w*res.msg.red_percent-10;
 $("#red_bar").css("width",red_bar_w);
 $("#blue_num").html(res.msg.bluenum);
 $("#blue").css("width",res.msg.blue_percent*100+"%");
 var blue_bar_w = w*res.msg.blue_percent;
 $("#blue_bar").css("width",blue_bar_w);
 }else{
 alert('投票失败');
 }
 }
 });
}
</script>
</head>
<body>
<div id="main">
 <h2 class="top_title"><a href="http://www.jb51.net/article/71504.htm">ThinkPHP5+jQuery+MySql实现红蓝投票功能</a></h2>
 <div class="vote">
 <div class="votetitle">您对Thinkphp5的看法?</div>
 <div class="red" id="red">
 <p>非常实用</p>
 <div class="redhand"></div>
 <div class="redbar" id="red_bar">
 <span></span>
 <p id="red_num"></p>
 </div>
 </div>
 <div class="blue" id="blue">
 <p style="text-align:right">完全不懂</p>
 <div class="bluehand"></div>
 <div class="bluebar" id="blue_bar">
 <span></span>
 <p id="blue_num"></p>
 </div>
 </div>
 </div>
</div>
</body>
</html>

控制器:

<?php
namespace appindexcontroller;
use thinkController;
/**
 * 投票
 */
class Vote extends Controller
{
 /**
 * 首页
 */
 public function index()
 {
 return $this->fetch();
 }
 /**
 * 投票
 * @param vid type ip
 */
 public function Vote()
 {
 $data = input('post.');
 if (!empty($data)) {
 $data['ip'] = get_ip(); //获取Ip
 // 先检测当前ip是否已经投过票
 $count = model('Vote')->checkIp($data);
 // 检测是否提交了type,提交了即代表点击了按钮,没提交即代表页面初次渲染
 if (!empty($data['type'])) {
 if ($count == '0') { //当前还未投过票 
 // 更新票数 添加用户ip表
 $res = model('Vote')->postVote($data);
 if ($res) {
 
 // 投票成功 获取当前各自的票数
 $info = $this->getPercent($data);
 return return_succ($info);
 }else{
 return return_error('投票失败');
 }
 }else{
 // 已经投过票
 return return_error('您已经投过票了');
 }
 }else{
 // 初次渲染,获取初始数据
 $info = $this->getPercent($data);
 return return_succ($info);
 }
 }else{
 return return_error('数据不能为空');
 }
 }
 // 计算比例
 public function getPercent($data)
 {
 // 投票成功 获取当前各自的票数
 $info = model('Vote')->getInfo($data);
 // 计算比例 保留3位小数
 $info['red_percent'] = round($info['rednum'] / ($info['rednum'] + $info['bluenum']),3);
 $info['blue_percent'] = 1 - $info['red_percent'];
 return $info;
 }
}

模型:

<?php
namespace appindexmodel;
use thinkModel;
use thinkDb;
class Vote extends Model
{
 // 检测当前ip是否已经投过票
 public function checkIp($data)
 {
 $res = Db::table('votes_ip')->where(['vid'=>$data['vid'],'ip'=>$data['ip']])->count();
 return $res;
 }
 // 投票
 public function postVote($data)
 {
 $info = $this->getInfo($data);
 if ($info) {
 Db::startTrans();
 try {
 
 if ($data['type'] == "red") {
 // 更新票数表 
 Db::table('votes')->where(['id'=>$data['vid']])->update(['rednum'=>$info['rednum']+1]);
 }elseif ($data['type'] == "blue") {
 Db::table('votes')->where(['id'=>$data['vid']])->update(['bluenum'=>$info['bluenum']+1]);
 }
 // 添加用户投票ip
 Db::table('votes_ip')->insert(['vid'=>$data['vid'],'ip'=>$data['ip']]);
 Db::commit();
 return true;
 } catch (Exception $e) {
 Db::rollback();
 return false;
 }
 }
 }
 // 获取当前各自的票数
 public function getInfo($data)
 {
 // 获取各自的票数
 $info = Db::table('votes')->where(['id'=>$data['vid']])->find();
 return $info;
 }
}

文档

ThinkPHP5+jQuery+MySql实现投票功能的方法

ThinkPHP5+jQuery+MySql实现投票功能的方法:下面由ThinkPHP教程栏目给给大家介绍ThinkPHP5+jQuery+MySql实现投票功能的方法,希望对需要的朋友也是帮助!首先效果图如下:然后分享代码如下:前端代码:<!DOCTYPE HTML> <html> <head> <meta charse
推荐度:
标签: 投票 php mysql
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top