欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

手把手做一个PHP 投票系统

程序员文章站 2022-04-27 17:53:42
...

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

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

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

手把手做一个PHP 投票系统
            
    
    博客分类: PHP+MySQL phpvote投票JsJquery 

 

 

步骤:

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;
  }
}
?>

 

  • 手把手做一个PHP 投票系统
            
    
    博客分类: PHP+MySQL phpvote投票JsJquery 
  • 大小: 27.8 KB