侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

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

ThinkPHP  /  管理员 发布于 8年前   350

下面由ThinkPHP教程栏目给给大家介绍ThinkPHP5+jQuery+MySql实现投票功能的方法,希望对需要的朋友也是帮助!

首先效果图如下:

1149706-20200116142405568-1784999916.png

然后分享代码如下:

前端代码:

<!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: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>

控制器:

<?phpnamespace app\index\controller;use think\Controller;/** * 投票 */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;    }}

模型:

<?phpnamespace app\index\model;use think\Model;use think\Db;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实现投票功能的方法的详细内容,更多请关注其它相关文章!


  • 上一条:
    ThinkPHP中循环遍历的两种方法(volist和foreach标签)
    下一条:
    ThinkPHP5中的事务操作
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • thinkphp + mongodb项目中数据加载慢问题分析及解决(0个评论)
    • thinkphp6框架中封装redis操作类(0个评论)
    • thinkphp6框架中实现定时任务功能流程步骤(0个评论)
    • Thinkphp5.1框架中实现Session+Redis会话共享流程步骤(0个评论)
    • TP5框架版本5.0.10安全漏洞根据官方补丁修复,也是本站安全漏洞修复(0个评论)
    • 近期文章
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2017-07
    • 2017-08
    • 2017-09
    • 2017-10
    • 2017-12
    • 2018-01
    • 2018-02
    • 2020-03
    • 2021-07
    • 2021-12
    • 2022-05
    • 2022-06
    • 2022-09
    • 2023-01
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客