`

手把手做一个PHP 投票系统

阅读更多

一个 基本的投票系统 即 根据一个主题 以提供投票选项为条件选出正确的选择项 (一个或多个),然后对投票选项进行分析和调查等等。

为了使得一个投票系统更完善和合理,可以增加注册用户 控制IP的投票次数和权限等功能。

一个基本的投票系统 流程图可以如下

 

 

步骤:

1。创建一个数据库,通过数据库可以来存储投票的主题,内容信息,以及投票的结果,通过数据库来存储注册用户的信息以及控制Ip等辅助配置功能。

2.创建用户注册和登录模块,通过email地址来激活注册的用户,只有成功激活的用户才可以进行投票

3。创建投票主题和投票内容浏览模块。其中IP不能重复投票。通过某种图像分析图来分析投票的结果。

4.后台管理模块,添加投票主题内容和选项,并可以设计投票分为单选或多选。

支持图片功能 可以后期加上。

 

创建如下的数据库

 

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- 数据库: `xhvote_gbk`
--

-- --------------------------------------------------------

--
-- 表的结构 `xh_config`
--

CREATE TABLE IF NOT EXISTS `xh_config` (
  `username` varchar(100) NOT NULL COMMENT '管理员名字',
  `password` varchar(100) NOT NULL COMMENT '管理员密码',
  `webname` varchar(100) NOT NULL,
  `weburl` varchar(100) DEFAULT NULL,
  `systemurl` varchar(100) DEFAULT NULL,
  `restrictip` int(11) DEFAULT NULL COMMENT '是否限制投票的IP',
  `allowview` int(11) DEFAULT NULL COMMENT '是否允许用户查看投票结果',
  `refusetime` int(11) DEFAULT NULL COMMENT '限制某个ip多长时间以后才可以再次投票',
  `getuserinfo` int(11) DEFAULT NULL COMMENT '是否获取用户系统信息',
  PRIMARY KEY (`username`)
) ENGINE=MyISAM DEFAULT CHARSET=gbk COMMENT='系统配置表';

-- --------------------------------------------------------
INSERT INTO `xh_config` (`username`, `password`, `webname`, `weburl`, `systemurl`, `restrictip`, `allowview`, `refusetime`, `getuserinfo`) VALUES
('admin', '21232f297a57a5a743894a0e4a801fc3', '雪晖在线', 'http://www.xhway.net', 'http://localhost:8081/xhvote_gbk/', 0, 1, 12, 1);

--
-- 表的结构 `xh_ip`
--

CREATE TABLE IF NOT EXISTS `xh_ip` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `sid` int(11) NOT NULL COMMENT '投票系列的主键',
  `ip` varchar(20) DEFAULT NULL COMMENT '用户IP',
  `vtime` datetime DEFAULT NULL COMMENT '用户最后访问时间',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=gbk AUTO_INCREMENT=26 ;

-- --------------------------------------------------------

--
-- 表的结构 `xh_question`
--

CREATE TABLE IF NOT EXISTS `xh_question` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `question` varchar(100) NOT NULL,
  `imgurl` varchar(100) NOT NULL,
  `linkurl` varchar(200) DEFAULT NULL,
  `sid` int(11) NOT NULL,
  `tid` int(11) NOT NULL,
  `ps` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=gbk AUTO_INCREMENT=233 ;

-- --------------------------------------------------------

--
-- 表的结构 `xh_subject`
--

CREATE TABLE IF NOT EXISTS `xh_subject` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `subject` varchar(40) NOT NULL,
  `qx` datetime NOT NULL COMMENT '主题过期时间',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=gbk AUTO_INCREMENT=33 ;

-- --------------------------------------------------------

--
-- 表的结构 `xh_title`
--

CREATE TABLE IF NOT EXISTS `xh_title` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(40) NOT NULL,
  `sid` int(11) NOT NULL,
  `ms` int(11) NOT NULL,
  `vcount` int(11) NOT NULL,
  `listtype` int(11) NOT NULL,
  `listrows` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=gbk AUTO_INCREMENT=30 ;

-- --------------------------------------------------------

--
-- 表的结构 `xh_userinfo`
--

CREATE TABLE IF NOT EXISTS `xh_userinfo` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(40) NOT NULL,
  `sex` varchar(6) NOT NULL,
  `idcard` varchar(20) NOT NULL,
  `tel` varchar(20) NOT NULL,
  `address` varchar(50) NOT NULL,
  `email` varchar(30) NOT NULL,
  `content` varchar(100) NOT NULL,
  `sid` varchar(10) NOT NULL,
  `qids` varchar(50) NOT NULL,
  `ip` varchar(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=gbk AUTO_INCREMENT=54 ;

 

改写数据库连接

 

<?php
    header("Content-type:text/html;charset=gbk");
	$conn=mysql_connect("localhost","root","root");
	if(!$conn){
		die("Can not connect:".mysql_error());
	}
	$dbconn=mysql_select_db("xhvote");
	if(!$dbconn){
		die("Can not select this database:".mysql_error($conn));
	}
	@session_start();//启动session会话
	mysql_query("SET NAMES 'gbk'");//设置字符集和页面代码统一
	require_once("function.php");//加载函数库
	require_once("config.php");//加载配置信息
?>

 主要的核心逻辑

<?php
function getip() { 
if (isset($_SERVER)) { 
/*在局域网通过透明代理访问外部的web服务器时,
*在web服务器端,
*通过header HTTP_X_FORWARDED_FOR 可以知道代理服务器的服务器名以及端口,
*/ 
if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) { 
$realip = $_SERVER["HTTP_X_FORWARDED_FOR"]; 
} elseif (isset($_SERVER["HTTP_CLIENT_IP"])) { 
$realip = $_SERVER["HTTP_CLIENT_IP"]; 
} else { 
$realip = $_SERVER["REMOTE_ADDR"]; 
} 
} else { 
/*string getenv ( string varname )*Returns the value of the environment variable varname, or FALSE on *an error. 

*/ 

if (getenv("HTTP_X_FORWARDED_FOR")) { 
$realip = getenv("HTTP_X_FORWARDED_FOR"); 
} elseif (getenv("HTTP_CLIENT_IP")) { 
$realip = getenv("HTTP_CLIENT_IP"); 
} else { 
$realip = getenv("REMOTE_ADDR"); 
} 
} 
return $realip; 
}

function convertWk($wk){
	$wk=str_replace("1","一",$wk);
	$wk=str_replace("2","二",$wk);
	$wk=str_replace("3","三",$wk);
	$wk=str_replace("4","四",$wk);
	$wk=str_replace("5","五",$wk);
	$wk=str_replace("6","六",$wk);
	$wk=str_replace("0","日",$wk);	 
	return $wk;
}
function showColor($i)
{
	if ($i%2==0)
		$showColor = "#99CC00";
	else if ($i%3==0)
		$showColor="#FF00FF";
	else
		$showColor="#CC99FF";
	return $showColor;
}
function head()
{
	echo "<meta http-equiv=\"Content-Language\" content=\"zh-cn\">\r\n";
	echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=gbk\">\r\n";
	echo "<meta http-equiv=\"author\" content=\"雪晖\">\r\n";
	echo "<meta http-equiv=\"keyword\" content=\"雪晖,雪晖软件,投票,程序开发,程序定制\">\r\n";
	echo "<meta http-equiv=\"description\" content=\"www.xhway.net,www.xhway.com,www.xhway.cn,雪晖软件拥有开发从C,C++,.NET,JAVA,ASP,PHP,DELPHIE等大部分语言WEB程序与软件系统的技术实力,欢迎大家定制各类程序!\">\r\n";
	echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"css/css.css\">\r\n";
}
function successmsgbox()
{
	echo "<script language='javascript' type='text/javascript'>alert('登陆成功');</script>";
}
function failmsgbox($msg)
{
	echo "<script language='javascript' type='text/javascript'>alert('".$msg."');location.href='login.php';</script>";
}
function logout()
{
	$_SESSION["admin"]="";
	redirect('login.php');	
}
function redirect($url)
{
	die("<script language='javascript' type='text/javascript'>location.href='".$url."';</script>");
}
function check()
{
	
	if(!isset($_SESSION["admin"]) || $_SESSION["admin"]=="")
	{
		echo "<script language='javascript' type='text/javascript'>alert('登陆失败或超时,请重新登陆!');
		      if(!window.top)		          
		      {
				  location.href='login.php';
	          }
			  else
		      {
				  window.top.location.href='login.php';
	          }
		      </script>";
	}
}
function successmsg($msg)
{
	echo "<html>\r\n";
	echo "<head>\r\n";
	head();
	echo "<title>【雪晖投票系统】</title>\r\n";
	echo "</head>\r\n";
	echo "<body>\r\n"; 
	echo "<table width=\"40%\" border=\"0\" align=\"center\" cellpadding=\"5\" cellspacing=\"1\" bgcolor=\"#BBDDFF\" id=\"table2\" style=\"border-collapse: collapse; margin-top:50px;\">\r\n";
	echo "<tr>\r\n";
	echo "<td bgcolor=\"#ECF5FF\" align=\"center\" height=\"100\">\r\n";
	echo "<label id=\"errmsg\" name=\"errmsg\">".$msg."</label><br><br>\r\n";
	echo "<a href=\"".$_SERVER["HTTP_REFERER"]."\">点此返回再次操作</a>&nbsp;&nbsp;<a href=\"admin_index.php\" target=\"_top\">进入管理首页</a>\r\n";    //返回时会自动刷新页面
	echo "</td>\r\n";
	echo "</tr>\r\n";
	echo "</body>\r\n";
	echo "</html>\r\n";	
}
function errormsg($msg)
{
	echo "<html>\r\n";
	echo "<head>\r\n";
	head();
	echo "<title>【雪晖投票系统】</title>\r\n";
	echo "</head>\r\n";
	echo "<body>\r\n";
	echo "<table width=\"40%\" border=\"0\" align=\"center\" cellpadding=\"5\" cellspacing=\"1\" bgcolor=\"#BBDDFF\" id=\"table2\" style=\"border-collapse: collapse; margin-top:50px;\">\r\n";
	echo "<tr>\r\n";
	echo "<td bgcolor=\"#ECF5FF\" align=\"center\" height=\"100\">\r\n";
    echo "<label id=\"errmsg\" name=\"errmsg\">".$msg."</label><br><br>\r\n";
	echo "<a href=\"".$_SERVER["HTTP_REFERER"]."\">点此返回</a>"; //返回时会自动刷新页面
	echo "</td>\r\n";
	echo "</tr>\r\n";
	echo "</body>\r\n";
	echo "</html>\r\n";	
}
function pager($recordcount,$pagesize,$curpage,$pages,$key,$url)
{//$recordcount 记录总数
 //$pagesize 每页记录数
 //$curpage 当前页面号
 //$pages 要显示多少个页面 $pages=1 就显示两个页面 $pages=2就显示三个页面
 //$key 关键字值
 //$url 分页链接到哪个页面
 global $outhtml;
 global $firstcount;
 $totalpage = max(ceil($recordcount/$pagesize),1);
 if($curpage<0 || $curpage>$totalpage) $curpage=1;
 $outhtml = "共&nbsp;".$recordcount."&nbsp;条记录&nbsp第&nbsp;".$curpage."&nbsp页/共&nbsp;".$totalpage."&nbsp;页&nbsp;每页&nbsp;".$pagesize."&nbsp;条记录&nbsp;";
 $pageno = $curpage;
 if($pageno<0 || $pageno>$totalpage) $pageno=1;
 $firstcount=$pagesize*($pageno-1);
 $outhtml.="<a href='$url?page=1&k=$key'><<</a>&nbsp;";
 //$showpage = min($pages,$totalpage); //要显示的页面号
 if($pages>$totalpage)
 {
      $startpage=1;
	  $endpage=min($startpage+$pages,$totalpage);
 }
 else
 {
	 $startpage=max($totalpage-$pages,1);
	 $startpage=min($startpage,$curpage);
	 $endpage=min($startpage+$pages,$totalpage);
 }
 if($pageno>1)
 {
	 $outhtml.="<a href='$url?page=".($pageno-1)."&k=$key'><</a>&nbsp;";
 }
 else
 {
	 $outhtml.="<a href='$url?page=1&k=$key'><</a>&nbsp;";
 }
 for($i=$startpage;$i<=$endpage;$i++)
 {
	 if($curpage==$i)
	 {
		 $outhtml.="<font color='#FF0000'>$i</font>&nbsp;";
	 }
	 else
	 {
		 $outhtml.="<a href='$url?page=$i&k=$key'>$i</a>&nbsp;";
	 }
 }
 if($pageno<$totalpage)
 {
	 $outhtml.="<a href='$url?page=".($pageno+1)."&k=$key'>></a>&nbsp;";
 }
 else
 {
	 $outhtml.="<a href='$url?page=$totalpage&k=$key'>></a>&nbsp;";
 }
 $outhtml.="<a href='$url?page=$totalpage&k=$key'>>></a>&nbsp;"; 
}
//格式化日期
function mkDate($v) {
	do {
		if (empty ($v))
			break;

		$ymdhis = split(' ', trim($v));

		if (count($ymdhis) < 1)
			break;

		$ymd = split('-', $ymdhis[0]);

		$his = split(':', $ymdhis[1]);

		return mktime($his[0], $his[1], $his[2], $ymd[1], $ymd[2], $ymd[0]);
	} while (false);

	return time();
}
function deldir($dir) {
  if(!is_dir($dir)){
	  return false;
  }
  $dh=@opendir($dir);
  while ($file=@readdir($dh)) {
    if($file!="." && $file!="..") {
      $fullpath=$dir."/".$file;
      if(!is_dir($fullpath)) {
          @unlink($fullpath);
      } else {
          deldir($fullpath);
      }
    }
  }

  @closedir($dh);
  
  if(@rmdir($dir)) {
    return true;
  } else {
    return false;
  }
}
?>

 

  • 大小: 27.8 KB
分享到:
评论
1 楼 u010189889 2014-07-17  
poll.zip (13.7 KB)  这个文件是干什么的?

相关推荐

    一个基于Qt Creator(qt,C++)实现中国象棋人机对战

    qt 一个基于Qt Creator(qt,C++)实现中国象棋人机对战.

    热带雨林自驾游自然奇观探索.doc

    热带雨林自驾游自然奇观探索

    冰川湖自驾游冰雪交融景象.doc

    冰川湖自驾游冰雪交融景象

    C51 单片机数码管使用 Keil项目C语言源码

    C51 单片机数码管使用 Keil项目C语言源码

    基于智能算法的无人机路径规划研究 附Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    前端分析-2023071100789s12

    前端分析-2023071100789s12

    Delphi 12.3控件之Laz-制作了一些窗体和对话框样式.7z

    Laz_制作了一些窗体和对话框样式.7z

    ocaml-docs-4.05.0-6.el7.x64-86.rpm.tar.gz

    1、文件内容:ocaml-docs-4.05.0-6.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/ocaml-docs-4.05.0-6.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、更多资源/技术支持:公众号禅静编程坊

    学习笔记-沁恒第六讲-米醋

    学习笔记-沁恒第六讲-米醋

    工业机器人技术讲解【36页】.pptx

    工业机器人技术讲解【36页】

    基于CentOS 7和Docker环境下安装和配置Elasticsearch数据库

    内容概要:本文档详细介绍了在 CentOS 7 上利用 Docker 容器化环境来部署和配置 Elasticsearch 数据库的过程。首先概述了 Elasticsearch 的特点及其主要应用场景如全文检索、日志和数据分析等,并强调了其分布式架构带来的高性能与可扩展性。之后针对具体的安装流程进行了讲解,涉及创建所需的工作目录,准备docker-compose.yml文件以及通过docker-compose工具自动化完成镜像下载和服务启动的一系列命令;同时对可能出现的问题提供了应对策略并附带解决了分词功能出现的问题。 适合人群:从事IT运维工作的技术人员或对NoSQL数据库感兴趣的开发者。 使用场景及目标:该教程旨在帮助读者掌握如何在一个Linux系统中使用现代化的应用交付方式搭建企业级搜索引擎解决方案,特别适用于希望深入了解Elastic Stack生态体系的个人研究与团队项目实践中。 阅读建议:建议按照文中给出的具体步骤进行实验验证,尤其是要注意调整相关参数配置适配自身环境。对于初次接触此话题的朋友来说,应该提前熟悉一下Linux操作系统的基础命令行知识和Docker的相关基础知识

    基于CNN和FNN的进化神经元模型的快速响应尖峰神经网络 附Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    网络小说的类型创新、情节设计与角色塑造.doc

    网络小说的类型创新、情节设计与角色塑造

    毕业设计-基于springboot+vue开发的学生考勤管理系统【源码+sql+可运行】50311.zip

    毕业设计_基于springboot+vue开发的学生考勤管理系统【源码+sql+可运行】【50311】.zip 全部代码均可运行,亲测可用,尽我所能,为你服务; 1.代码压缩包内容 代码:springboo后端代码+vue前端页面代码 脚本:数据库SQL脚本 效果图:运行结果请看资源详情效果图 2.环境准备: - JDK1.8+ - maven3.6+ - nodejs14+ - mysql5.6+ - redis 3.技术栈 - 后台:springboot+mybatisPlus+Shiro - 前台:vue+iview+Vuex+Axios - 开发工具: idea、navicate 4.功能列表 - 系统设置:用户管理、角色管理、资源管理、系统日志 - 业务管理:班级信息、学生信息、课程信息、考勤记录、假期信息、公告信息 3.运行步骤: 步骤一:修改数据库连接信息(ip、port修改) 步骤二:找到启动类xxxApplication启动 4.若不会,可私信博主!!!

    57页-智慧办公园区智能化设计方案.pdf

    在智慧城市建设的大潮中,智慧园区作为其中的璀璨明珠,正以其独特的魅力引领着产业园区的新一轮变革。想象一下,一个集绿色、高端、智能、创新于一体的未来园区,它不仅融合了科技研发、商业居住、办公文创等多种功能,更通过深度应用信息技术,实现了从传统到智慧的华丽转身。 智慧园区通过“四化”建设——即园区运营精细化、园区体验智能化、园区服务专业化和园区设施信息化,彻底颠覆了传统园区的管理模式。在这里,基础设施的数据收集与分析让管理变得更加主动和高效,从温湿度监控到烟雾报警,从消防水箱液位监测到消防栓防盗水装置,每一处细节都彰显着智能的力量。而远程抄表、空调和变配电的智能化管控,更是在节能降耗的同时,极大地提升了园区的运维效率。更令人兴奋的是,通过智慧监控、人流统计和自动访客系统等高科技手段,园区的安全防范能力得到了质的飞跃,让每一位入驻企业和个人都能享受到“拎包入住”般的便捷与安心。 更令人瞩目的是,智慧园区还构建了集信息服务、企业服务、物业服务于一体的综合服务体系。无论是通过园区门户进行信息查询、投诉反馈,还是享受便捷的电商服务、法律咨询和融资支持,亦或是利用云ERP和云OA系统提升企业的管理水平和运营效率,智慧园区都以其全面、专业、高效的服务,为企业的发展插上了腾飞的翅膀。而这一切的背后,是大数据、云计算、人工智能等前沿技术的深度融合与应用,它们如同智慧的大脑,让园区的管理和服务变得更加聪明、更加贴心。走进智慧园区,就像踏入了一个充满无限可能的未来世界,这里不仅有科技的魅力,更有生活的温度,让人不禁对未来充满了无限的憧憬与期待。

    一种欠定盲源分离方法及其在模态识别中的应用 附Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    Matlab实现基于BO贝叶斯优化Transformer结合GRU门控循环单元时间序列预测的详细项目实例(含完整的程序,GUI设计和代码详解)

    内容概要:本文介绍了使用 Matlab 实现基于 BO(贝叶斯优化)的 Transformer 结合 GRU 门控循环单元时间序列预测的具体项目案例。文章首先介绍了时间序列预测的重要性及其现有方法存在的限制,随后深入阐述了该项目的目标、挑战与特色。重点描述了项目中采用的技术手段——结合 Transformer 和 GRU 模型的优点,通过贝叶斯优化进行超参数调整。文中给出了模型的具体实现步骤、代码示例以及完整的项目流程。同时强调了数据预处理、特征提取、窗口化分割、超参数搜索等关键技术点,并讨论了系统的设计部署细节、可视化界面制作等内容。 适合人群:具有一定机器学习基础,尤其是熟悉时间序列预测与深度学习的科研工作者或从业者。 使用场景及目标:适用于金融、医疗、能源等多个行业的高精度时间序列预测。该模型可通过捕捉长时间跨度下的复杂模式,提供更为精准的趋势预判,辅助相关机构作出合理的前瞻规划。 其他说明:此项目还涵盖了从数据采集到模型发布的全流程讲解,以及GUI图形用户界面的设计实现,有助于用户友好性提升和技术应用落地。此外,文档包含了详尽的操作指南和丰富的附录资料,包括完整的程序清单、性能评价指标等,便于读者动手实践。

    漫画与青少年教育关系.doc

    漫画与青少年教育关系

    励志图书的成功案例分享、人生智慧提炼与自我提升策略.doc

    励志图书的成功案例分享、人生智慧提炼与自我提升策略

    人工智能在食品安全与检测中的应用.doc

    人工智能在食品安全与检测中的应用

Global site tag (gtag.js) - Google Analytics