中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ThinkPHP5中怎么使用jQuery和MySql實現一個投票功能

發布時間:2021-06-30 16:52:55 來源:億速云 閱讀:156 作者:Leah 欄目:編程語言

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">
   <h3 class="top_title"><a href="http://www.jb51.net/article/71504.htm">ThinkPHP5+jQuery+MySql實現紅藍投票功能</a></h3>
   <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實現一個投票功能問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

白朗县| 武邑县| 中超| 黑山县| 金堂县| 冷水江市| 迁安市| 元氏县| 东辽县| 大安市| 维西| 平阴县| 仪征市| 合江县| 日喀则市| 邻水| 新营市| 台前县| 和顺县| 应城市| 襄汾县| 闽侯县| 武宁县| 茶陵县| 噶尔县| 喀喇沁旗| 沙洋县| 高要市| 临夏市| 阿坝| 肥西县| 靖边县| 云浮市| 剑川县| 彭阳县| 景泰县| 西安市| 崇左市| 怀化市| 金溪县| 肃宁县|