一个 基本的投票系统 即 根据一个主题 以提供投票选项为条件选出正确的选择项 (一个或多个),然后对投票选项进行分析和调查等等。
为了使得一个投票系统更完善和合理,可以增加注册用户 控制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> <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 = "共 ".$recordcount." 条记录 第 ".$curpage." 页/共 ".$totalpage." 页 每页 ".$pagesize." 条记录 ";
$pageno = $curpage;
if($pageno<0 || $pageno>$totalpage) $pageno=1;
$firstcount=$pagesize*($pageno-1);
$outhtml.="<a href='$url?page=1&k=$key'><<</a> ";
//$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> ";
}
else
{
$outhtml.="<a href='$url?page=1&k=$key'><</a> ";
}
for($i=$startpage;$i<=$endpage;$i++)
{
if($curpage==$i)
{
$outhtml.="<font color='#FF0000'>$i</font> ";
}
else
{
$outhtml.="<a href='$url?page=$i&k=$key'>$i</a> ";
}
}
if($pageno<$totalpage)
{
$outhtml.="<a href='$url?page=".($pageno+1)."&k=$key'>></a> ";
}
else
{
$outhtml.="<a href='$url?page=$totalpage&k=$key'>></a> ";
}
$outhtml.="<a href='$url?page=$totalpage&k=$key'>>></a> ";
}
//格式化日期
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;
}
}
?>