0

0

【php】使用jpgraph完成投票系统的普普通通用户部分

php中文网

php中文网

发布时间:2016-06-13 12:12:34

|

1049人浏览过

|

来源于php中文网

原创

【php】使用jpgraph完成投票系统的普通用户部分

本文接上一篇《【php】投票系统管理员部分,增加投票与删除投票》(点击打开链接)

上次三个链接只完成了管理员部分的两个


现在完成最后的一个普通用户这一个,同样是没有登录系统部分,请自行补充


立即学习PHP免费学习笔记(深入)”;

一、基本目标

投票系统的普通用户部分如下图所示:


首先显示现存的投票列表给用户,之后,点击进入其中一个投票,能够投票

投票皆为单选,不设定为多选,当然,你设置为多选也行,反正每一页都是一个表单,

点击“投票”按钮则,询问用户是否确定,是则投票成功哦,否则不发生任何事

当投票的任何一项都大于1时,则弹出两个统计图,一个柱状图与饼状图,表示投票人数与比例



立即学习PHP免费学习笔记(深入)”;

二、基本思想

柱状图与拼饼图用Jpgraph来做

Jpgraph的下载与安装与其他插件类似,把需要的东西拖到下载目录就可以了

首先打开Jpgraph的官网(点击打开链接)选择Download->Download Jpgraph


之后选择第一个就可以,我也为大家上传了一份(点击打开链接)


这东西虽然不是zip或者rar来结尾,但用最新的winrar能够打开并解压,解压之后把里面的src放到站点目录,并改名为jpgraph文件夹就可以详细可以看上一篇《【php】投票系统管理员部分,增加投票与删除投票》(点击打开链接)的目录结构



立即学习PHP免费学习笔记(深入)”;

三、制作过程

1、voteindex.php

这是一个显示所有投票列表的页面,比删除投票列表页面delvote.php更加简单,没有删除按钮

注意给查询出来的每一个超级链接,附上?get后缀,通过get方法,给vote.php传递用户到底打开那一个投票的参数

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>投票</title></head><body><h1>投票系统</h1><?php$con=mysql_connect("localhost","root","root");if(!$con){	die("连接失败!");}mysql_select_db("test",$con);mysql_query("set names utf8");$result=mysql_query("SELECT * FROM voteparent where isdel=0 order by id desc;");$i=1;while($row=mysql_fetch_array($result)){	echo "投票${i}:<a href='vote.php?id=${row["id"]}'>${row["title"]}</a><br>";	$i++;}mysql_close($con);?><p><a href="index.html">返回</a></p><div class="aritcle_card flexRow">
                                                        <div class="artcardd flexRow">
                                                                <a class="aritcle_card_img" href="/xiazai/code/11002" title="淄博分类信息港程序seo特别版"><img
                                                                                src="https://img.php.cn/upload/webcode/000/000/006/176463723491666.jpg" alt="淄博分类信息港程序seo特别版"  onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
                                                                <div class="aritcle_card_info flexColumn">
                                                                        <a href="/xiazai/code/11002" title="淄博分类信息港程序seo特别版">淄博分类信息港程序seo特别版</a>
                                                                        <p>seo特别版程序介绍:注意:普通用户建议使用淄博分类信息港程序普通版本。主要针对seo需要增加了自定义功能:自定义文件路径;自定义文件名;自定义关键字。这些功能的作用,只有自己体会了。以下是淄博分类信息港程序的介绍:淄博分类信息港程序一套现成的城市分类信息网站发布系统。发布管理房屋、人才、招租、招聘、求购、求租、搬迁、运输、二手交易、招生培训、婚介交友等各类信息的发布和查询。淄博分类信息港发布程序</p>
                                                                </div>
                                                                <a href="/xiazai/code/11002" title="淄博分类信息港程序seo特别版" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a>
                                                        </div>
                                                </div></body></html>

2、vote.php

用request方法拿到voteindex.php传递过来的id参数就开始工作了

查处该投票的投票标题与投票描述与各个子选择的各种属性,建立一个表单,

并且要构造一个每个子选项的得票数,类似与?opt1=1&&opt2=99&&opttotal=2的字符串附在引入图片的链接后面,其中opttotal是本投票存在多少选项。如果此投票仅2个选项,那么opttoal=2。这里是为jpgraph的工作需要。详情请看代码:

<?php$pid=$_REQUEST["id"];$con=mysql_connect("localhost","root","root");if(!$con){	die("连接失败!");}mysql_select_db("test",$con);mysql_query("set names utf8");$ptitle;$ptext;$result=mysql_query("select * from voteparent where id=".$pid.";");while($row=mysql_fetch_array($result)){	$ptitle=$row["title"];	$ptext=$row["text"];}?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title><?phpecho "${ptitle}";?></title></head><!--以上为仅仅是为了查出voteparent表中投票标题title与投票描述ptext--><body><form action="votehandle.php" method="get" onsubmit="return check()"><?phpecho "<div><h1>${ptitle}</h1></div><div style='text-indent:2em'><h3>${ptext}</h3></div>";$result=mysql_query("select * from votechildren where parentid=".$pid.";");$i=1;$countstr="";$optarr=array();while($row=mysql_fetch_array($result)){	echo "<div>选择${i}:${row["text"]},票数:${row["count"]}<input type='radio' name='opt' value='${row["id"]}'></div>";	$countstr=$countstr."opt${i}=${row["count"]}&&";	//除了构造get方法的字符串,还把每一项的得票数传入数组,是为了通过最少值为0判定是否有一项得票数为0,如果有一项得票数为0,就不应该出现统计图,避免jpgraph出错	$optarr[$i-1]=$row["count"];	$i++;}mysql_close($con);if(min($optarr)>0){	//jpgraph的工作方式是,先在jpgraph.php与jppie.php写好没有任何html元素的php页面,再通过img标签的方式,引入此页,如果要传递参数则这样传	echo "<img  src='jpgraph.php?${countstr}opttotal=${i}' alt="【php】使用jpgraph完成投票系统的普普通通用户部分" >";	echo "<img  src='jppie.php?${countstr}opttotal=${i}' alt="【php】使用jpgraph完成投票系统的普普通通用户部分" >";}?><p><input type="submit" value="投票" /></p></form><p></p><a href="index.html">返回</a></body></html><script>function check(){	return confirm("确定投票?");}</script>

这个页面同样存在一定小问题,如果用户没有选择任何选项,就点击投票没有空值处理,

具体可以在前台,用javascript处理一下,具体可以参考《【JavaScript】表单即时验证,不成功不让提交》(点击打开链接)


3、jpgraph.php

这一页是用来画柱状图,然后再被vote.php用img标签引用,具体看下面代码:

<?php//本页不能有任何html与js元素,否则jpgraph无法工作//虽然仅引入2个页面,但jpgraph文件夹里面的所有文件都要保留,不然jpgraph无法工作include("jpgraph/jpgraph.php");include("jpgraph/jpgraph_bar.php");//建立数组$optarr,用来存放get方法传递过来的变量$optarr=array();//x轴用1,2,3,4,5,6...来表示$xaxisarr=array();$opttotal=$_REQUEST["opttotal"];for($i=1;$i<$opttotal;$i++){	$optarr[$i-1]=$_REQUEST["opt${i}"];	$xaxisarr[$i-1]=$i;	}//求出最大值,是为了确定柱状图的最大值$optmaxcount=max($optarr);//图像大小为350x200px$graph=new Graph(350,200,"auto");//指定动作$graph->SetScale("textlin");//下面两行是为了设置样式的,false与true有不同的样式$graph->SetBox(false);$graph->ygrid->SetFill(false);//y轴的4个值,分别为子选项最大得票数的0,1/3,2/3,1$graph->yaxis->SetTickPositions(array(0,$optmaxcount/3,$optmaxcount*2/3,$optmaxcount));//下三行意思是x轴的柱子长度是$optarr的数组的第0项,第1项……$b1plot = new BarPlot($optarr);$gbplot = new GroupBarPlot(array($b1plot));$graph->Add($gbplot);//柱子的边线为白色$b1plot->SetColor("white");//柱子颜色分别为#aa0000,#00aa00……如果还有$b1plot->SetFillColor(array('#aa0000','#00aa00','#0000aa','#aaaa00','#aa00aa','#00aaaa','#000000','#cc0000','#00cc00','#0000cc'));//标题为中文需要如下写$graph->title->SetFont(FF_SIMSUN,FS_BOLD);$graph->title->Set(iconv("UTF-8","gb2312","得票情况"));//指定动作$graph->xaxis->SetTickLabels($xaxisarr);$graph->Stroke();?>

4、jppie.php

这是用来画饼状图的,总体来说比画柱状图的jpgraph.php简单一点,

部分的代码原理与jpgraph.php是一样的

<?php//画饼状图的话,引入的文件是不同的,但还是需要整个jpgraph文件夹来支持工作include("jpgraph/jpgraph.php");include("jpgraph/jpgraph_pie.php");//建立数组存放get方法传过来的数据$optarr=array();$opttotal=$_REQUEST["opttotal"];for($i=1;$i<$opttotal;$i++){	$optarr[$i-1]=$_REQUEST["opt${i}"];	}$graph = new PieGraph(350,250);$graph->title->SetFont(FF_SIMSUN,FS_BOLD);$graph->title->Set(iconv("UTF-8","gb2312","得票比率"));//不用自己计算比率,直接塞进去,就会自动计算$p1 = new PiePlot($optarr);$graph->Add($p1);$p1->SetSliceColors(array('#aa0000','#00aa00','#0000aa','#aaaa00','#aa00aa','#00aaaa','#000000','#cc0000','#00cc00','#0000cc'));//把饼状图放到350x250画布中的横向50%,纵向60%的位置$p1->SetCenter(0.5,0.6);$graph->Stroke();?>

通过上述的两个处理步骤,在主页面vote.php用img标签引入这个两个php,实质为图像的页面就好


立即学习PHP免费学习笔记(深入)”;

5、votehandel.php

这是用户在投票页面,选择完一个选项之后,点确定投票的页面

搞完最难的jpgraph,这里就不难了,

就操作数据库,把votechildren表中,相应的子选项,用update语句把它的得票数加1就可以了

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>处理投票</title></head><body><?php$opt=$_REQUEST["opt"];$con=mysql_connect("localhost","root","root");if(!$con){	die("连接失败!");}mysql_select_db("test",$con);mysql_query("set names utf8");mysql_query("update votechildren set count=count+1 where id=".$opt.";");mysql_close($con);?><script>alert("投票成功!");window.location.href="index.html";</script></body></html>


立即学习PHP免费学习笔记(深入)”;

四、展望

自此,连同《【php】投票系统管理员部分,增加投票与删除投票》(点击打开链接),整个投票系统的核心骨就完成了

需要的是避免sql注入与javascript一些空值处理还有同xajax技术来验证是否重复等,

加上登录系统,与用server对象取走用户ip来防止重复投票,这方面的技术可以参考我之前的《【php】登录系统与输出浏览者信息》(点击打开链接),来现实


立即学习PHP免费学习笔记(深入)”;

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

1142

2026.02.13

微博网页版主页入口与登录指南_官方网页端快速访问方法
微博网页版主页入口与登录指南_官方网页端快速访问方法

本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

371

2026.02.13

Flutter跨平台开发与状态管理实战
Flutter跨平台开发与状态管理实战

本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。

245

2026.02.13

TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

37

2026.02.13

Redis高可用架构与分布式缓存实战
Redis高可用架构与分布式缓存实战

本专题围绕 Redis 在高并发系统中的应用展开,系统讲解主从复制、哨兵机制、Cluster 集群模式及数据分片原理。内容涵盖缓存穿透与雪崩解决方案、分布式锁实现、热点数据优化及持久化策略。通过真实业务场景演示,帮助开发者构建高可用、可扩展的分布式缓存系统。

114

2026.02.13

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

77

2026.02.12

雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法
雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法

本专题系统整理雨课堂网页版官方入口及在线登录方式,涵盖账号登录流程、官方直连入口及平台访问方法说明,帮助师生用户快速进入雨课堂在线教学平台,实现便捷、高效的课程学习与教学管理体验。

17

2026.02.12

豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法
豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法

本专题汇总豆包AI官方网页版入口及在线使用方式,涵盖智能写作工具、图片生成体验入口和官网登录方法,帮助用户快速直达豆包AI平台,高效完成文本创作与AI生图任务,实现便捷智能创作体验。

863

2026.02.12

PostgreSQL性能优化与索引调优实战
PostgreSQL性能优化与索引调优实战

本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。

123

2026.02.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 18.7万人学习

Pandas 教程
Pandas 教程

共15课时 | 1.1万人学习

C# 教程
C# 教程

共94课时 | 10.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号