手把手做一个PHP 投票系统
程序员文章站
2022-04-27 17:53:42
...
一个 基本的投票系统 即 根据一个主题 以提供投票选项为条件选出正确的选择项 (一个或多个),然后对投票选项进行分析和调查等等。
为了使得一个投票系统更完善和合理,可以增加注册用户 控制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; } } ?>
上一篇: 粗心的主人还是往本汪来吧