다음 ThinkPHP Tutorial 칼럼에서는 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 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('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 메소드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

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

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

드림위버 CS6
시각적 웹 개발 도구

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

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경
