手把手做一个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;
  }
}
?>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值