php+mysql投票代碼_PHP+jQuery+MySql實現紅藍投票功能

本文是一篇綜合知識應用類文章,需要您具備PHP、jQuery、MySQL以及html和css方面的基本知識。本文在《PHP+MySql+jQuery實現的“頂”和“踩”投票功能》一文基礎上做了適當改進,共用了數據表,您可以先點擊了解這篇文章。

HTML

我們需要在頁面中展示紅藍雙方的觀點,以及對應的投票數和比例,以及用于投票交互的手型圖片,本例以#red和#blue分別表示紅藍雙 方。.redhand和.bluehand用來做手型投票按鈕,.redbar和.bluebar展示紅藍雙方比例調,#red_num 和#blue_num展示雙方投票數。

Html代碼 ?925a194438bdd6e4bf6c89525734f9cc.png

您對Helloweba提供的文章的看法?
非常實用完全看不懂

CSS

使用CSS將頁面美化,加載背景圖片,確定相對位置等等,你可以直接復制以下代碼,在自己的項目中稍作修改即可。

Html代碼 ?925a194438bdd6e4bf6c89525734f9cc.png

.vote{width:288px;?height:220px;?margin:60px?auto?20px?auto;position:relative}

.votetitle{width:100%;height:62px;?background:url(icon.png)?no-repeat?0?30px;?font-size:15px}

.red{position:absolute;?left:0;?top:90px;?height:80px;}

.blue{position:absolute;?right:0;?top:90px;?height:80px;}

.votetxt{line-height:24px}

.votetxt?span{float:right}

.redhand{position:absolute;?left:0;width:36px;?height:36px;?background:url(icon.png)?no-repeat?-1px?-38px;cursor:pointer}

.bluehand{position:absolute;?right:0;width:36px;?height:36px;?background:url(icon.png)?no-repeat?-41px?-38px;cursor:pointer}

.grayhand{width:34px;?height:34px;?background:url(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}

jQuery

當點擊手型按鈕時,利用jQuery的$.getJSON()向后臺php發送Ajax請求,如果請求成功,將會得到后臺返回的json數 據,jQuery再將json數據進行處理。以下函數:getdata(url,sid),傳遞了兩個參數,url是請求的后臺php地址,sid表示當 前投票主題ID,我們在該函數中,返回的json數據有紅藍雙方的投票數,以及雙方比例,根據比例計算比例條的寬度,異步交互展示投票效果。

Js代碼 ?925a194438bdd6e4bf6c89525734f9cc.png

function?getdata(url,sid){

$.getJSON(url,{id:sid},function(data){

if(data.success==1){

var?w?=?208;?//定義比例條的總寬度

//紅方投票數

$("#red_num").html(data.red);

$("#red").css("width",data.red_percent*100+"%");

var?red_bar_w?=?w*data.red_percent-10;

//紅方比例條寬度

$("#red_bar").css("width",red_bar_w);

//藍方投票數

$("#blue_num").html(data.blue);

$("#blue").css("width",data.blue_percent*100+"%");

var?blue_bar_w?=?w*data.blue_percent;

//藍方比例條寬度

$("#blue_bar").css("width",blue_bar_w);

}else{

alert(data.msg);

}

});

}

當頁面初次加載時,即調用getdata(),然后點擊給紅方投票或給藍方投票同樣調用getdata(),只是傳遞的參數不一樣。注意本例中的參數sid我們設置為1,是根據數據表中的id設定的,開發者可以根據實際項目讀取準確的id。

Js代碼 ?925a194438bdd6e4bf6c89525734f9cc.png

$(function(){

//獲取初始數據

getdata("vote.php",1);

//紅方投票

$(".redhand").click(function(){

getdata("vote.php?action=red",1);

});

//藍方投票

$(".bluehand").click(function(){

getdata("vote.php?action=blue",1);

});

});

PHP

前端請求了后臺的vote.php,vote.php將根據接收的參數,連接數據庫,調用相關函數。

Php代碼 ?925a194438bdd6e4bf6c89525734f9cc.png

include_once("connect.php");

$action?=?$_GET['action'];

$id?=?intval($_GET['id']);

$ip?=?get_client_ip();//獲取ip

if($action=='red'){//紅方投票

vote(1,$id,$ip);

}elseif($action=='blue'){//藍方投票

vote(0,$id,$ip);

}else{//默認返回初始數據

echo?jsons($id);

}

函數vote($type,$id,$ip)用來做出投票動作,$type表示投票方,$id表示投票主題的id,$ip表示用戶當前ip。首先根 據用戶當前IP,查詢投票記錄表votes_ip中是否已經存在當前ip記錄,如果存在,則說明用戶已投票,否則更新紅方或藍方的投票數,并將當前用戶投 票記錄寫入到votes_ip表中以防重復投票。

Php代碼 ?925a194438bdd6e4bf6c89525734f9cc.png

function?vote($type,$id,$ip){

$ip_sql=mysql_query("select?ip?from?votes_ip?where?vid='$id'?and?ip='$ip'");

$count=mysql_num_rows($ip_sql);

if($count==0){//還沒有投票

if($type==1){//紅方

$sql?=?"update?votes?set?likes=likes+1?where?id=".$id;

}else{//藍方

$sql?=?"update?votes?set?unlikes=unlikes+1?where?id=".$id;

}

mysql_query($sql);

$sql_in?=?"insert?into?votes_ip?(vid,ip)?values?('$id','$ip')";

mysql_query($sql_in);

if(mysql_insert_id()>0){

echo?jsons($id);

}else{

$arr['success']?=?0;

$arr['msg']?=?'操作失敗,請重試';

echo?json_encode($arr);

}

}else{

$arr['success']?=?0;

$arr['msg']?=?'已經投票過了';

echo?json_encode($arr);

}

}

函數jsons($id)通過查詢當前id的投票數,計算比例并返回json數據格式供前端調用。

Php代碼 ?925a194438bdd6e4bf6c89525734f9cc.png

function?jsons($id){

$query?=?mysql_query("select?*?from?votes?where?id=".$id);

$row?=?mysql_fetch_array($query);

$red?=?$row['likes'];

$blue?=?$row['unlikes'];

$arr['success']=1;

$arr['red']?=?$red;

$arr['blue']?=?$blue;

$red_percent?=?round($red/($red+$blue),3);

$arr['red_percent']?=?$red_percent;

$arr['blue_percent']?=?1-$red_percent;

return?json_encode($arr);

}

MySQL

最后,貼上Mysql數據表,votes表用來記錄紅藍雙方的投票總數,votes_ip表則用來存放用戶的投票IP記錄。

Sql代碼 ?925a194438bdd6e4bf6c89525734f9cc.png

CREATE?TABLE?IF?NOT?EXISTS?`votes`?(

`id`?int(10)?NOT?NULL?AUTO_INCREMENT,

`likes`?int(10)?NOT?NULL?DEFAULT?'0',

`unlikes`?int(10)?NOT?NULL?DEFAULT?'0',

PRIMARY?KEY?(`id`)

)?ENGINE=MyISAM??DEFAULT?CHARSET=utf8;

INSERT?INTO?`votes`?(`id`,?`likes`,?`unlikes`)?VALUES

(1,?30,?10);

CREATE?TABLE?IF?NOT?EXISTS?`votes_ip`?(

`id`?int(10)?NOT?NULL,

`vid`?int(10)?NOT?NULL,

`ip`?varchar(40)?NOT?NULL

)?ENGINE=MyISAM?DEFAULT?CHARSET=utf8;

再次提醒,下載的demo如果運行不了,請先檢查數據庫連接配置是否正確。好了,少說兩句,快來投票吧:查看演示。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/529541.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/529541.shtml
英文地址,請注明出處:http://en.pswp.cn/news/529541.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

numpy 最大值_第 85 天:NumPy 統計函數

數學統計在我們的程序當中特別是數據分析當中是必不可少的一部分,本文就來介紹一下 NumPy 常見的統計函數。最大值與最小值numpy.amin()用于計算數組中的元素沿指定軸的最小值。可以通過 axis 參數傳入坐標軸來指定統計的軸,當指定 axis 時,a…

java中如何實現變量可配置_Java基礎-如何配置環境變量

Java環境變量詳細教程第一步、打開電腦環境變量設置窗口以Win10系統為例子。在桌面找到此電腦,右鍵此電腦— —>屬性,點擊屬性— —>點擊左側高級系統設置點擊高級系統設置點擊環境變量第二步、新建JAVA_HOME點擊系統變量中的新建,出現輸入框&…

python三引號解析_[宜配屋]聽圖閣

和C語言一樣,引號屬于特殊功能字符,不能夠像普通字符那樣直接通過print打印,需要進行一些處理,比如說反斜杠轉義等。這里介紹幾種打印三引號的方法,希望對需要的朋友有用。1、第一中方法比較簡單,直接使用三…

abaqus python 建立節點集合_在Python中創建Abaqus集

我想用Python在Abaqus中創建一個帶邊的幾何集。我不會事先知道邊的數目。嘗試將邊放入數組中,然后創建集合。你知道嗎myEdgesForSet []for i in range(0, len(mdb.models[Model].parts[Part].edges)):if something in mdb.models[Model].parts[Part].edges[i].feat…

java類默認訪問權限_Java的四種訪問權限

? 所謂訪問權限,指的就是本類中的成員變量、成員方法對其他類的可見性?試想一想,當我們修改一個非常龐大的項目時,如果所有變量和方法都是公共權限,那么后端中任何類都有權限去修改它的變量和方法,很有可能修改后就導…

java 數組 反射_【譯】10. Java反射——數組

用Java反射來處理數組有時候是技巧性很強的。特別是如果你需要獲取一個給定類型的數組的Class對象,像int[ ]等。本文將講述怎么用Java反射來創建數組和獲取數組的Class對象。下面是所涵蓋的主題列表:java.lang.reflect.ArrayCreating ArraysAccessing Ar…

定時執行java程序_如何讓Java程序定時運行

由于項目開發的需要,必須實現讓一個Java程序定時運行。比如,我的項目中,有一個網絡蜘蛛,需要從互聯網上抓取數據,與其配合,有另一個程序來對新抓取的頁面進行索引的創建,由于數據源更新頻率不高…

java遞歸實現排序_快速排序算法原理及java遞歸實現

快速排序 對冒泡排序的一種改進,若初始記錄序列按關鍵字有序或基本有序,蛻化為冒泡排序。使用的是遞歸原理,在所有同數量級O(n longn) 的排序方法中,其平均性能最好。就平均時間而言,是目前被認為最好的一種內部排序方…

java 泛型 .net_Java泛型

標簽:上一篇博文java8函數式編程--收集器collector:(http://my.oschina.net/joshuashaw/blog/487322)講得比較隨性,并沒有把源碼一句一句拿出來分析,后來發現groupingBy方法最后有一個if-else分支用來返回不同類型的collector&…

卡法電子商務 java_javacard DES算法API使用示例

********** 2017年3月15日留言 ——關于java卡Applet系列csdn博文 *************貌似有不少人在看我寫的幾篇關于java卡applet的博文,也收到了一些評論指正博文錯誤,或者私信叫我發代碼文件過去。在此需要說明的是,java卡applet的這幾篇博文…

java http請求原理_淺談Spring Cloud zuul http請求轉發原理

spring cloud 網關,依賴于netflix 下的zuul 組件zuul 的流程是,自定義 了ZuulServletFilter和zuulServlet兩種方式,讓開發者可以去實現,并調用先來看下ZuulServletFilter的實現片段Overridepublic void doFilter(ServletRequest s…

java堆外內存溢出_JVM 案例 - 堆外內存導致的溢出錯誤

案例一個網站為了實現客戶端實時從服務端接收數據,使用了 CometD 1.1.1 作為服務端推送框架,服務器是 Jetty7.1.4,CPU i5,內存 4G,操作系統 32位Windows。服務端常常拋出內存溢出異常,管理員把堆開到最大(3…

java mail outlook_已啟用Outlook API郵件與郵箱用戶

一個非常微妙的問題,也許是特定的環境 . 我正在嘗試使用Outlook 2010 API從啟用郵件的用戶中識別郵箱用戶 . 我們在Notes to Exchange遷移期間使用Dell Quest遷移工具,它是一個流動的項目 . 仍處于原型階段,因此使用VB宏來最終將在C&#xff…

oracle java存儲過程返回值_java程序調用Oracle 存儲過程 獲取返回值(無返回,非結果集,結果集)...

java程序調用Oracle 存儲過程 獲取返回值(無返回,非結果集,結果集)oracle中procedure是不能有返回值的,要想返回值,就得有輸出參數,同樣要想返回記錄集,可以把游標類型作為輸出參數。下面是詳細情況說明&am…

mysql dump工具升級_MySQL數據庫升級

當前不少系統的數據庫依舊是MySQL5.6,由于MySQL5.7及MySQL8.0在性能及安全方面有著很大的提升,因此需要升級數據庫。本文通過邏輯方式、物理方式原地升級來介紹MySQL5.6 升級至MySQL5.7的方法,并介紹其使用場景。1. 邏輯方式升級邏輯方式升級…

java int 128 ==_為什么 Java Integer 中“128==128”為false,而”100==100“為true?

這是一個挺有意思的討論話題,讓我們用代碼說話吧!運行下面的代碼:Integer a 128, b 128;System.out.println(a b);Integer c 100, d 100;System.out.println(c d);你會得到:falsetrue基本知識:我們知道,如果兩個引用指向同一個對象&…

mysql課程表學時_Mysql 鞏固提升 (學生表_課程表_成績表_教師表)

方便Mysql 鞏固提升創建表并插入數據:-- ------------------------------ Table structure for student-- ----------------------------DROP TABLE IF EXISTS student;CREATE TABLE student (id int(11) NOT NULL AUTO_INCREMENT,sname varchar(32) DEFAULT NULL,s…

初始java_第一章__初始JAVA

1.java的三個發展方向:JAVASE(面向對象、API、JVM)、JAVAME(移動設備、游戲、通信)、JAVAEE(JSP、EJB、服務)2.開發JAVA的程序步驟:1.編寫源程序 2.編譯 3.運行3.JDKJRE開發工具下載java環境jdk 安裝并配置環境變量,.安裝直接下一步下一步直到…

python最常用的版本、也稱為classic_2021年中國大學《創新思維與創業》單元測試答案...

2021年中國大學《創新思維與創業》單元測試答案被人們稱為 “寒地水稻第一人”的是袁隆平答:錯地圖數據的基本特征包括答:時間屬性 空間定位屬性 地理屬性對賣方征稅導致商品價格上升答:√( )是在床榻上使用的一種矮形家具。答:炕…

java 泛型 繼承_java基礎之泛型的繼承

關于泛型的基本介紹和理解請參考以下幾篇文章&#xff0c;或查詢更多資料&#xff1a;本篇以簡單的List<>方式來進行說明。ArrayList繼承了List,ArrayList沒有繼承ListList>等價于List extends Object>請參考以下代碼&#xff1a;/*** author Ding Chengyun* 2014-…