一个简单的PHP投票程序源码


Posted in PHP onMarch 11, 2007

分析: 
我们利用一个文件(data.dat)来存储投票栏目.每个栏目占据一行. 
这样一来,便可随意加入和减去想要投票的栏目. 
我们再利用一个文件(votes.dat)来存储我们的投票结果. 
并纪录最近一位投票者的IP地址,简单的防止一人多投. 
所以,您应该在该程序目录下自行建立两个文件data.dat和votes.dat 
程序运行过程部分 
程序运行时应该先有一个投票的HTML表单,等待投票. 
当有人在HTML表单上投票时,判断它的IP是否为最近一位投票者的IP, 
如果此人刚刚投过票,则两个值应该相等,显示"您已投过票了,谢谢您的参与!"  
如果此人没投过票,则两个值不等,将它的投票写入文件(votes.dat)  
(这里得到投票者的IP方法是:Web客户机在对服务器发送请求时需要提供一个表识, 
这个表识就存储在环境变量REMOTE_ADDR里,我们引用它就可以了.) 
最后是显示投票结果,通常我们是以"条形图表+百分数"来显示投票情况. 
所以,我们要选择一个颜色单一的矩形图形,以适应横向缩放的要求.  
-------------------------------------------------------------------------------- 
程序代码部分 可下载程序代码 
  //投票栏目存储文件,您可更改文件名 
$data="data.dat";  
//投票结果储存文件  
$votes="votes.dat"; 
//用以显示投票结果比例的图形文件名图形文件名,  
//用单一颜色的矩形较好,方便投票结果横向缩放,  
//自行上传到本程序目录下  
$path_img="vote.gif"; 
//投票标题 
$poll_name="您喜欢我的哪个栏目?";  
// 以下部分不需改动 //  
//打开投票栏目文件,并以数组的形式将全部内容存在变量$dataf中备用  
$dataf=file($data);  
if ($go !=1) 
{  
//显示投票程序表单  
echo "<font color=red><i>$poll_name</i></font><br>n";  
echo "<form method=post>";  
for ($i=0; $i<=count($dataf)-1; $i++)  
{  
echo "<input type=radio name="vote" value="$i"> $dataf[$i]<br>n"; }  
echo "<input type=hidden name=go value=1>";  
echo "<p><input type=Submit value=投票>";  
echo "</form>";  
echo "<a href='vote.php?result=1&go=1'>查看结果</a>";  
}  
else  
{  
// $go==1 表示有人投票, // 现在将投票情况以另外一种方式从文件中读出 $file_votes=fopen($votes, "r");  
$line_votes=fgets($file_votes, 255);  
fclose($file_votes); 
// 并将数据按指定的字串切开,再将字串传回到阵列变量中  
$single_vote=explode("|", $line_votes);  
//准备写入投票结果  
if ($result!=1)  
{  
//检查IP地址是否重复  
$file_votes=file($votes, "r");  
if ($REMOTE_ADDR == $file_votes[1])  
{  
echo "<center><font color=red>您已投过票了,谢谢您的参与! </font> 

 </center>"; 
exit; 

//如果IP不重复,则执行以下程序  
$ficdest=fopen($votes, "w");  
for ($i=0; $i<=count($dataf)-1; $i++) 
{  
//判断投了那一个栏目  
if ($i == $vote)  
{  
$single_vote[$i]+=1; 
}  
//将数据写回文件  
fputs($ficdest, "$single_vote[$i]|");  
}  
//写入投票者IP  
fputs($ficdest, "n$REMOTE_ADDR");  
fclose($ficdest); 
$result=1; //投票成功 
}  
//写入投票结果后并显示投票结果  
if ($result==1)  
{ echo "<table cellpadding=10>";  
for ($i=0; $i<=count($dataf)-1; $i++)  
{  
//取得投票总数 
$tot_votes+=$single_vote[$i];  
}  
for ($i=0; $i<=count($dataf)-1; $i++)  
{  
//计算百分比  
$stat[$i]=$single_vote[$i]/$tot_votes*100;  
echo "<tr><td><li><font face=Verdana size=2>";  
echo "$dataf[$i]</font></td><td align=left><font face=Verdana 

size=2>";  
echo "<img src="$path_img" height=10 width=$stat[$i] align=middle> ";  
//输出百分数 printf("%.1f", "$stat[$i]");  
echo "%</font></td><td align=center><font face=Verdana size=2>"; //输出本栏目投票数  
echo "$single_vote[$i]</font>"; echo "</td></tr>";  
}  
echo "</table><p>";  
echo "<font face=Verdana size=2>总投票数:$tot_votes </font>";  


?> 

PHP 相关文章推荐
DISCUZ 论坛管理员密码忘记的解决方法
May 14 PHP
PHPwind整合最土系统用户同步登录实现方法
Dec 08 PHP
完美解决令人抓狂的zend studio 7代码提示(content Assist)速度慢的问题
Jun 20 PHP
两级联动select刷新后其值保持不变的实现方法
Jan 27 PHP
PHP图片等比缩放类SimpleImage使用方法和使用实例分享
Apr 10 PHP
PHP中if和or运行效率对比
Dec 12 PHP
php操作xml入门之xml基本介绍及xml标签元素
Jan 23 PHP
Zend Framework实现将session存储在memcache中的方法
Mar 22 PHP
yii2中结合gridview如何使用modal弹窗实例代码详解
Jun 12 PHP
Laravel学习基础之migrate的使用教程
Oct 11 PHP
解决laravel5中auth用户登录其他页面获取不到登录信息的问题
Oct 08 PHP
Cookie跨域问题解决方案代码示例
Nov 24 PHP
用PHP制作的意见反馈表源码
Mar 11 #PHP
PHP实现用户认证及管理完全源码
Mar 11 #PHP
随时给自己贴的图片加文字的php代码
Mar 08 #PHP
php网页后退不再出现过期
Mar 08 #PHP
php+dojo 的数据库保存拖动布局的一个方法dojo 这里下载
Mar 07 #PHP
php下实现农历日历的代码
Mar 07 #PHP
六酷社区论坛HOME页清新格调免费版 下载
Mar 07 #PHP
You might like
怎样在UNIX系统下安装MySQL
2006/10/09 PHP
str_replace只替换一次字符串的方法
2013/04/09 PHP
19个超实用的PHP代码片段
2014/03/14 PHP
浅谈PHP调用Webservice思路及源码分享
2014/06/04 PHP
PHP使用PHPExcel实现批量上传到数据库的方法
2017/06/08 PHP
PHP单元测试配置与使用方法详解
2019/12/27 PHP
如何实现动态删除javascript函数
2007/05/27 Javascript
在chrome中window.onload事件的一些问题
2010/03/01 Javascript
JS 添加千分位与去掉千分位的示例
2013/07/11 Javascript
全面兼容的javascript时间格式化函数(比较实用)
2014/05/14 Javascript
javascript实现随机读取数组的方法
2015/08/03 Javascript
jquery实现仿新浪微博带动画效果弹出层代码(可关闭、可拖动)
2015/10/12 Javascript
javascript绘制漂亮的心型线效果完整实例
2016/02/02 Javascript
JSON键值对序列化和反序列化解析
2017/01/24 Javascript
vue防止花括号{{}}闪烁v-text和v-html、v-cloak用法示例
2019/03/13 Javascript
js正则匹配多个全部数据问题
2019/12/20 Javascript
vue+axios 拦截器实现统一token的案例
2020/09/11 Javascript
vue+springboot+element+vue-resource实现文件上传教程
2020/10/21 Javascript
js实现磁性吸附的示例
2020/10/26 Javascript
[05:36]DOTA2 2015国际邀请赛中国区预选赛第四日TOP10
2015/05/29 DOTA
[00:32]2018DOTA2亚洲邀请赛OpTic出场
2018/04/03 DOTA
python常规方法实现数组的全排列
2015/03/17 Python
python登录pop3邮件服务器接收邮件的方法
2015/04/30 Python
python求解水仙花数的方法
2015/05/11 Python
windows上安装Anaconda和python的教程详解
2017/03/28 Python
Python 复平面绘图实例
2019/11/21 Python
python隐藏类中属性的3种实现方法
2019/12/19 Python
python生成xml时规定dtd实例方法
2020/09/21 Python
解决pycharm修改代码后第一次运行不生效的问题
2021/02/06 Python
Wedgwood英国官方网站:英式精致骨瓷餐具、礼品与生活精品,源于1759年
2019/09/02 全球购物
《母亲的恩情》教学反思
2014/02/13 职场文书
国际贸易专业个人鉴定
2014/02/22 职场文书
会计人员岗位职责
2014/03/19 职场文书
通报表扬范文
2015/01/17 职场文书
Mysql效率优化定位较低sql的两种方式
2021/05/26 MySQL
DSP接收机前端设想
2022/04/05 无线电