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.mzph.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、第一中方法比较简单,直接使用三…

定时执行java程序_如何让Java程序定时运行

由于项目开发的需要,必须实现让一个Java程序定时运行。比如,我的项目中,有一个网络蜘蛛,需要从互联网上抓取数据,与其配合,有另一个程序来对新抓取的页面进行索引的创建,由于数据源更新频率不高…

卡法电子商务 java_javacard DES算法API使用示例

********** 2017年3月15日留言 ——关于java卡Applet系列csdn博文 *************貌似有不少人在看我写的几篇关于java卡applet的博文,也收到了一些评论指正博文错误,或者私信叫我发代码文件过去。在此需要说明的是,java卡applet的这几篇博文…

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基本知识:我们知道,如果两个引用指向同一个对象&…

初始java_第一章__初始JAVA

1.java的三个发展方向:JAVASE(面向对象、API、JVM)、JAVAME(移动设备、游戏、通信)、JAVAEE(JSP、EJB、服务)2.开发JAVA的程序步骤:1.编写源程序 2.编译 3.运行3.JDKJRE开发工具下载java环境jdk 安装并配置环境变量,.安装直接下一步下一步直到…

appium java环境_Appium环境搭建(Windows版)

注:appium安装到C盘,node.js安装到C盘一、安装node.js1、到官网下载node.js:https://nodejs.org/en/download/2、获取到安装文件后,直接双击安装文件,根据程序的提示,完成nodejs的安装。3、安装完成后&…

ie11加载java插件_IE浏览器中ActiveX插件的使用

在某些行业的B/S应用系统中会不可避免的要用到ActiveX浏览器插件,而ActiveX插件只能在IE内核浏览器中运行,而常用的IE浏览器的版本众多,从IE6到IE11,总共有6个版本,这就给开发的应用系统造成了不小的困扰:如…

mysql的增_MySQL之增_insert-replace

MySQL增删改查之增insert、replace一、INSERT语句带有values子句的insert语句,用于数据的增加语法:INSERT [INTO] tbl_name[(col_name,...)]{VALUES | VALUE} (expr ,...),(...),...①用来把一个新行插入到表中②为和其它数据库保持一致,不要…

php redis 传递闭包,通过缓存构建高性能 Laravel 应用

通过缓存构建高性能 Laravel 应用由 学院君 创建于3年前, 最后更新于 11个月前版本号 #220678 views9 likes1 collects配置Laravel 为不同的缓存系统提供了统一的 API。缓存配置位于 config/cache.php。在该文件中你可以指定在应用中默认使用哪个缓存驱动。Laravel 开箱支持主流…

imclearboder matlab,Lucas

Lucas-Kanade跟踪算法是视觉跟踪中一个很经典的基于点的逐帧跟踪算法。起初这个算法是用来求解stero matching1的,后来经过Carlo Tomasi2和Jianbo Shi3等人的发展渐趋成熟。Jianbo Shi提出了一种筛选跟踪点特征的方法,使得特征的跟踪更可靠。Jean-Yves B…

matlab求勒让德多项式零点,有没有勒让德多项式导数 零点程序

求N1次勒让德多项式的m(m0,1,...)阶导数零点Matlab程序子程序:function xjp(N,alpha,beta)n1:N;a(1)(alphabeta2)/2;b(1)(beta-alpha)/2;a([2:N1])(2*nalphabeta1).*(2*nalphabeta2)./(2*(n1).*(nalphabeta1));b([2:N1])(alpha*alpha-beta*beta)*(2*nalphabeta1)./(…

js_long.php,protobuf.js 与 Long.js的使用详解

这次给大家带来protobuf.js 与 Long.js的使用详解,是急用protobuf.js 与 Long.js的注意事项有哪些,下面就是实战案例,一起来看一下。protobuf.js的结构和webpack的加载之后的结构很相似。这样的模块化组合是个不错的结构方式。1个是适应了不同…

oracle 存储过程设置回滚点,(转)oracle 存储过程事宜使用断点回滚 -savepoint

学习存储过程中使用断点回滚事务时,发现目前网络上存在一个问题,那就是使用断点回滚后,都忘记了一个很重要的事情,提交事务。虽然使用了断点回滚,但是断点回滚不像rollBack或commit一样结束当前事务,而使用…

oracle每季度补丁,Oracle 2020 年第四季度补丁发布

半个月前,也就是 10 月 20 日, Oracle 发布了今年最后一次补丁更新,那么很多人都想打最新的 PSU,理由是有被扫到各种漏洞,有的扫描工具着实太坑,这里就不用说了,前几天看到盖总发布的文章2020年…

路由器 刷 linux系统版本,在Linux下用tftp刷写路由器固件

(以Buffalo WHR-G300N V2路由器为例)以发行版Ubuntu为例(如果你在Windows下,可下载Ubuntu的ISO文件,再用wubi安装Ubuntu,可免去重新分区的麻烦),下载Buffalo WHR-G300N V2路由器的FTP版固件文件,放到Ubuntu的/home目录…

eval函数linux,Python中的eval()、exec()及其相关函数

刚好前些天有人提到eval()与exec()这两个函数,所以就翻了下Python的文档。这里就来简单说一下这两个函数以及与它们相关的几个函数,如globals()、locals()和compile():1. eval函数函数的作用:计算指定表达式的值。也就是说它要执行…

linux更改语言脚本,Linux shell脚本入门——shell语言脚本【CentOS】

认识脚本是使用一种特定的描述性语言,依据一定的格式编写的可执行文件。脚本语言又被称为扩建的语言, 或者动态语言, 是一种编程语言, 用来控制软件应用程序, 脚本通常是以文本 (ASCⅡ) 保存, 只是在被调用时进行解释或者编译。学习shell脚本的用途对于一个合格的系…