찾다
PHP 프레임워크ThinkPHP투표 기능 구현을 위한 ThinkPHP5+jQuery+MySql 메소드

다음 ThinkPHP Tutorial 칼럼에서는 ThinkPHP5+jQuery+MySql을 사용하여 투표 기능을 구현하는 방법을 소개하겠습니다. 필요한 친구들에게 도움이 되길 바랍니다!

투표 기능 구현을 위한 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(&#39;&#39;,1);
    
    $(".redhand").click(function(){
        getdata("red",1);
    });
    $(".bluehand").click(function(){
        getdata("blue",1);
    });
});
function getdata(type,vid){
    $.ajax({
      url: "{:url(&#39;/index/vote/vote&#39;)}",
      data: {type:type,vid:vid},
      type:&#39;POST&#39;,
      dataType: &#39;json&#39;,
      success: function (res) {
          console.log(res)
          if (res.status == 0) {
              alert(&#39;投票成功&#39;)
              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(&#39;投票失败&#39;);
          }
      }
    });
}
</script>
</head>
<body>
<div id="main">
   <h2 id="a-nbsp-href-http-www-jb-net-article-htm-ThinkPHP-jQuery-MySql实现红蓝投票功能-a"><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 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(&#39;post.&#39;);
        if (!empty($data)) {
            $data[&#39;ip&#39;] = get_ip();    //获取Ip
            // 先检测当前ip是否已经投过票
            $count = model(&#39;Vote&#39;)->checkIp($data);
            // 检测是否提交了type,提交了即代表点击了按钮,没提交即代表页面初次渲染
            if (!empty($data[&#39;type&#39;])) {
                if ($count == &#39;0&#39;) {    //当前还未投过票 
                    // 更新票数  添加用户ip表
                    $res = model(&#39;Vote&#39;)->postVote($data);
                    if ($res) {
                        
                        // 投票成功  获取当前各自的票数
                        $info = $this->getPercent($data);
                        return return_succ($info);
                    }else{
                        return return_error(&#39;投票失败&#39;);
                    }
                }else{
                    // 已经投过票
                    return return_error(&#39;您已经投过票了&#39;);
                }
            }else{
                // 初次渲染,获取初始数据
                $info = $this->getPercent($data);
                return return_succ($info);
            }
        }else{
            return return_error(&#39;数据不能为空&#39;);
        }
    }
    // 计算比例
    public function getPercent($data)
    {
        // 投票成功  获取当前各自的票数
        $info = model(&#39;Vote&#39;)->getInfo($data);
        // 计算比例 保留3位小数
        $info[&#39;red_percent&#39;] = round($info[&#39;rednum&#39;] / ($info[&#39;rednum&#39;] + $info[&#39;bluenum&#39;]),3);
        $info[&#39;blue_percent&#39;] = 1 - $info[&#39;red_percent&#39;];
        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(&#39;votes_ip&#39;)->where([&#39;vid&#39;=>$data[&#39;vid&#39;],&#39;ip&#39;=>$data[&#39;ip&#39;]])->count();
        return $res;
    }
    // 投票
    public function postVote($data)
    {
        $info = $this->getInfo($data);
        if ($info) {
            Db::startTrans();
            try {
                
                if ($data[&#39;type&#39;] == "red") {
                    // 更新票数表  
                    Db::table(&#39;votes&#39;)->where([&#39;id&#39;=>$data[&#39;vid&#39;]])->update([&#39;rednum&#39;=>$info[&#39;rednum&#39;]+1]);
                }elseif ($data[&#39;type&#39;] == "blue") {
                    Db::table(&#39;votes&#39;)->where([&#39;id&#39;=>$data[&#39;vid&#39;]])->update([&#39;bluenum&#39;=>$info[&#39;bluenum&#39;]+1]);
                }
                // 添加用户投票ip
                Db::table(&#39;votes_ip&#39;)->insert([&#39;vid&#39;=>$data[&#39;vid&#39;],&#39;ip&#39;=>$data[&#39;ip&#39;]]);
                Db::commit();
                return true;
            } catch (Exception $e) {
                Db::rollback();
                return false;
            }
        }
    }
    // 获取当前各自的票数
    public function getInfo($data)
    {
        // 获取各自的票数
        $info = Db::table(&#39;votes&#39;)->where([&#39;id&#39;=>$data[&#39;vid&#39;]])->find();
        return $info;
    }
}

위 내용은 투표 기능 구현을 위한 ThinkPHP5+jQuery+MySql 메소드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
이 기사는 cnblogs에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경