您好,登錄后才能下訂單哦!
怎么在ThinkPHP5中使用jQuery和MySql實現(xiàn)投票功能?相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
前端代碼:
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>基于THINKPHP5實現(xiàn)紅藍(lán)投票功能</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(){ // 獲取初始數(shù)據(jù) 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="//www.jb51.net/article/71504.htm">ThinkPHP5+jQuery+MySql實現(xiàn)紅藍(lán)投票功能</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 >完全不懂</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 // 先檢測當(dāng)前ip是否已經(jīng)投過票 $count = model('Vote')->checkIp($data); // 檢測是否提交了type,提交了即代表點擊了按鈕,沒提交即代表頁面初次渲染 if (!empty($data['type'])) { if ($count == '0') { //當(dāng)前還未投過票 // 更新票數(shù) 添加用戶ip表 $res = model('Vote')->postVote($data); if ($res) { // 投票成功 獲取當(dāng)前各自的票數(shù) $info = $this->getPercent($data); return return_succ($info); }else{ return return_error('投票失敗'); } }else{ // 已經(jīng)投過票 return return_error('您已經(jīng)投過票了'); } }else{ // 初次渲染,獲取初始數(shù)據(jù) $info = $this->getPercent($data); return return_succ($info); } }else{ return return_error('數(shù)據(jù)不能為空'); } } // 計算比例 public function getPercent($data) { // 投票成功 獲取當(dāng)前各自的票數(shù) $info = model('Vote')->getInfo($data); // 計算比例 保留3位小數(shù) $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 { // 檢測當(dāng)前ip是否已經(jīng)投過票 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") { // 更新票數(shù)表 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; } } } // 獲取當(dāng)前各自的票數(shù) public function getInfo($data) { // 獲取各自的票數(shù) $info = Db::table('votes')->where(['id'=>$data['vid']])->find(); return $info; } }
thinkphp屬于一種免費的開發(fā)框架,能夠用于開發(fā)前端網(wǎng)頁,最早thinkphp是為了簡化開發(fā)而產(chǎn)生的,thinkphp同時也是遵循Apache2協(xié)議,最初是從Struts演變過來,也把國外一些好的框架模式進(jìn)行利用,使用面向?qū)ο蟮拈_發(fā)結(jié)構(gòu),兼容了很多標(biāo)簽庫等模式,它能夠更方便和快捷的開發(fā)和部署應(yīng)用,當(dāng)然不僅僅是企業(yè)級應(yīng)用,任何php應(yīng)用開發(fā)都可以從thinkphp的簡單、兼容和快速的特性中受益。
看完上述內(nèi)容,你們掌握怎么在ThinkPHP5中使用jQuery和MySql實現(xiàn)投票功能的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。