• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    ThinkPHP5+jQuery+MySql实现投票功能

    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="//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 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;
      }
    }

    模型:

    ?php
    namespace 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框架实现的MySQL数据库备份功能示例
    • ThinkPHP框架搭建及常见问题(XAMPP安装失败、Apache/MySQL启动失败)
    • ThinkPHP实现将SESSION存入MYSQL的方法
    • Thinkphp实现MySQL读写分离操作示例
    • PHP+MySql+jQuery实现的"顶"和"踩"投票功能
    • 基于PHP+jQuery+MySql实现红蓝(顶踩)投票代码
    上一篇:php开发论坛系统
    下一篇:PHP pthread拓展使用和注意点
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    ThinkPHP5+jQuery+MySql实现投票功能 ThinkPHP5+jQuery+MySql,实现,