php投票系统之增加与删除投票(管理员篇)


Posted in PHP onJuly 01, 2016

关于投票系统怎么样怎么样的引言就不多说,这不是毕业设计,主要说一下使用php实现投票系统,与其他普通系统一样,分为两部分,一个是管理员部分,一个是普通用户部分。

关于投票系统的管理部分,非常之简单,提供两部分的功能,增加投票与删除投票

关键在于设计好数据库的表,拟定于这样存一个投票,voteparent表存这个投票的标题、描述是否被删除,votechildren表存这个投票的子选项与投票数

一、基本目标

首先投票系统是这样的:

php投票系统之增加与删除投票(管理员篇)

三个链接,点进去能够直接进行相关功能的操作,本文主写管理员部分,普通用户部分使用到jpgraph另开一章说明

中间按理说应该有登录系统的,这里不是重点,可以参考我之前的《【php】登录系统与输出浏览者信息》(点击打开链接)

点开添加投票选项,会是如下界面,能够增加与删除投票选项,最多10个投票选择,至少2个头像选项,超过与不足会提示:

php投票系统之增加与删除投票(管理员篇)

预览图是使用IE6的,所以添加与删除选项反应得比较慢,管理员填完投票信息之后,就能成功地添加投票了。

php投票系统之增加与删除投票(管理员篇)

提交前会向管理员询问是否添加,防止误操作,这里的系统其实还应该使用xajax来调查这个投票数据里面是否有,而且有任意一项选项为空应该不让添加,详情可以参考《【php】注册系统和使用Xajax即时验证用户名是否被占用》一文(点击打开链接),这里没做,因为本文主要讲投票系统核心实现,这里就不扣这些小细节。

再点开投票系统的删除投票部分:

php投票系统之增加与删除投票(管理员篇)

在每一个投票的末尾都有删除按钮,点击每一个投票标题能够查看本投票:

php投票系统之增加与删除投票(管理员篇)

点击删除按钮同样会有询问,然后,点击取消什么都不会发生,点击确认则能够成功删除投票:

php投票系统之增加与删除投票(管理员篇)

上图中能够明显发现删除前有4个投票,然后删除之后仅有一条投票。

二、基本思想

投票系统的管理员部分没有什么新的技术还是数据库的操作,首先voteparent表的结构如下:

php投票系统之增加与删除投票(管理员篇)

id是自增列,title是这个投票的大标题,比如上面的“我帅不帅”之类,之后的text用来存放对这个投票的描述,未了不使自增列断开,与删除的投票可查,采用为删除的方式,设置删除位isdel,呈现出来的,这是删除位为0的投票。

votechildren表如下,id是自增列,text用来存放每一个子选项的描述,count用来存放这个自选项的票数,parentid用来存放这个子选项是属于哪个投票的。这里虽然很明显与voteparent表存在着参考性约束,但没有必要设置外键,免得操作时麻烦

php投票系统之增加与删除投票(管理员篇)

值得注意的是,两张表建立之后,记得翻到table options标签卡,把这两张表的编码都设置为utf-8,避免乱码

php投票系统之增加与删除投票(管理员篇)

站点的目录结构则如下所示:

php投票系统之增加与删除投票(管理员篇)

本文只说明createvote.html,createvote.php,delvote.php,delvotehandle.php,index.html五页的内容

三、制作过程 
1、index.html
首先是最基本的,仅有三个链接的index.html,这里就不说了,仅有三个a标签,刚学html的人都会了,代码如下: 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>投票系统</title>
</head>

<body>
<a href="createvote.html">添加投票(管理员部分)</a><br />
<a href="delvote.php">删除投票(管理员部分)</a><br />
<a href="voteindex.php">投票(普通用户部分)</a>
</body>
</html>

 2、createvote.html
 添加投票页,整个添加投票页处理两个自有js函数的按钮外,是一个大表单,其中还有一个隐藏域用来记录现在有多少个选项,
 为下一步添加投票操作页createvote.php提供操作基础。
 下面就这样进行基本说明,javascript对web节点的操作,可以参考我之前的《JavaScript针对网页节点的增删改查用法实例》一文(点击打开链接)
 注意到添加的子选项节点会很有规律的以opt1,opt2,opt3……那样排列,这是为了方便下面的操作 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>创建投票</title>
</head>

<body>
<h1>增加投票</h1>
<button onclick="createbtn()">增加选项</button> <button onclick="delbtn()">删除选项</button>
<!--onsubmit属性是为了下面脚本能够顺利弹出确认框,用户确认之后才提交这个表单-->
<form action="createvote.php" method="post" onsubmit="return check()">
<!--这里定义div的id是为了下面的javascript的操作,而且div不像p那样会参加很大的行距-->
<div id="createform">
<div>
投票主题:<input type="text" name="title" style = "width:70%"/>
</div>
<div>
投票描述:<input type="text" name="text" style = "width:70%"/>
</div>
<div>
选项1:<input type="text" name="opt1" style = "width:70%"/>
</div>
<div>
选项2:<input type="text" name="opt2" style = "width:70%"/>
</div>
</div>
<!--这里是用来记录有多少个选项的-->
<input type="hidden" id="nodetotal" name="nodetotal" />
<input type="submit" value="提交" />
</form>
<a href="index.html">返回</a>
</body>
</html>

<script>
//脚本部分,是现实的关键
//开始先记录当前的选项数是2,并存入hidden域,到时候随表单一起提交
var nodenum=2;
document.getElementById("nodetotal").value=nodenum;
//下面是“增加选项”“删除选项”的按钮操作
function createbtn(){
 //如果选项少于10个才操作
 if(nodenum<10){
 nodenum++;
 var node=document.createElement("div");
 //操作节点如果涉及html文本,写成单引号就不用写\"这么难看的双引号的转义字符
 node.innerHTML="选项"+nodenum+":<input type='text' name='opt"+nodenum+"' style='width:70%' />";
 document.getElementById("createform").appendChild(node);
 //记得增加完每个节点,要更新以下hidden域里面的节点数哦!
 document.getElementById("nodetotal").value=nodenum;
 }
 else{
 alert("最多10个选项");
 }
}
//逻辑跟上面一样
function delbtn(){
 if(nodenum>2){
 nodenum--;
 d=document.getElementById("createform");
 d.removeChild(d.lastChild);
 document.getElementById("nodetotal").value=nodenum;
 }
 else{
 alert("至少2个选项");
 }
}
//表单确认框的脚本,表单onsubmit为true才能够提交嘛,confirm点确定则返回true反之为false
function check(){
 return confirm("确定提交?");
}
</script>

3、createvote.php
 添加投票处理页,这里插入数据库要注意,先插入voteparent,再找出刚插入voteparent的那条记录的id,插入votechildren表的parentid,这里找parentid需要注意,不要通过寻找最后一条插入记录的方法,找到parentid,因为这样如果多个管理员在操作数据库的并发时,会产生混乱由于这里有中文,操作数据库之前,记得加上mysql_query("set names utf8");这句话,详情请看代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>添加投票处理中……</title>
</head>

<body>
<?php
//首先取出刚才要添加投票的title与text,隐藏域中的选项数
$ptitle=$_REQUEST["title"];
$ptext=$_REQUEST["text"];
$nodetotal=$_REQUEST["nodetotal"];
$con=mysql_connect("localhost","root","root");
//连接数据库
if(!$con){
 die("连接失败!");
 }
mysql_select_db("test",$con);
mysql_query("set names utf8");
//把title与text插入到voteparent表,设定删除位是0之后,系统会自动生成id
mysql_query("insert into voteparent(title,text,isdel) values ('".$ptitle."','".$ptext."',0);");
//再通过title找到刚才系统生成的id
$pid;
$result=mysql_query("select id as pid from voteparent where title='".$ptitle."';");
while($row=mysql_fetch_array($result)){
 $pid=$row["pid"];
}
//建立一个php数组,里面存放每一个子选项
$optarr=array();
//选项的多少决定了我们的循环次数
for($i=1;$i<$nodetotal+1;$i++){
 $optarr[$i]=$_REQUEST["opt${i}"];
 mysql_query("insert into votechildren(text,count,parentid) values ('".$optarr[$i]."',0,'".$pid."');");
 }; 
mysql_close($con); 
?>
</body>
</html>
<script>
alert("添加成功");
window.location.href="index.html";
</script>

 以上,管理员添加投票功能做完,下面是管理员删除投票功能
 4、delvote.php
先把voteparent中所有的删除位不为1的投票查询出来,然后降序排列,因为人们希望先看到最新添加的投票,生成节点的时候设置好每一个投票的删除按钮id,这个id就是在数据库中的voteparent的id,方便后续操作,删除按钮的脚本不用写什么,就是把这个id传到delvotehandle.php,删除处理页中就可以了

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>删除投票</title>
</head>

<body>
<h1>删除投票</h1>
<?php
$con=mysql_connect("localhost","root","root");
if(!$con){
 die("连接失败!");
}
mysql_select_db("test",$con);
mysql_query("set names utf8");
$result=mysql_query("SELECT * FROM voteparent where isdel=0 order by id desc;");
$i=1;
while($row=mysql_fetch_array($result)){
 echo "<div style='margin-right:10px;float:left'>投票${i}:<a href='vote.php?id=${row["id"]}'>${row["title"]}</a></div><div style='float:left'><button id='${row["id"]}' onclick='deljs(this.id)'>删除</button></div><div style='clear:both'></div>";
 $i++;
}
mysql_close($con);
?>
<p>
<a href="index.html">返回</a>
</p>
</body>
</html>
<script>
function deljs(id){
 if(confirm("确认删除?")){
 window.location.href="delvotehandle.php?id="+id;
 }
 }

</script>基本思想就是这样,其中这个页面采用了div布局,而不是table,详情可以参考我之前的《【CSS】关于div的对齐与网页布局》(点击打开链接) 

5、delvotehandle.php
 取到刚才传过来的id,根据这个id把相应的isdel删除位设定为1即可

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>删除投票处理中……</title>
</head>

<body>
<?php
$pid=$_REQUEST["id"];
$con=mysql_connect("localhost","root","root");
if(!$con){
 die("连接失败!");
 }
mysql_select_db("test",$con);
mysql_query("set names utf8");
mysql_query("update voteparent set isdel=1 where id=".$pid.";");
mysql_close($con); 
?>
</body>
</html>
<script>
alert("删除成功");
window.location.href="index.html";
</script>

 以上就是投票系统管理员部分,增加投票与删除投票的过程,按理说相关的处理页面,还需要进行session的保护,
避免直接输入网址就能够访问,这里没写,可以参考我之前的《php+MySql实现登录系统与输出浏览者信息功能》(点击打开链接)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
BBS(php &amp; mysql)完整版(七)
Oct 09 PHP
解决phpmyadmin中文乱码问题。。。
Jan 18 PHP
php中截取字符串支持utf-8
Jan 18 PHP
PHP与MySQL开发中页面乱码的产生与解决
Mar 27 PHP
PHP5+UTF8多文件上传类
Oct 17 PHP
PHP 实现代码复用的一个方法 traits新特性
Feb 22 PHP
PHP实现无限级分类(不使用递归)
Oct 22 PHP
php去除二维数组的重复项方法
Nov 03 PHP
Yii2 批量插入、更新数据实例
Mar 15 PHP
php 猴子摘桃的算法
Jun 20 PHP
PHP的简单跳转提示的实现详解
Mar 14 PHP
php判断数组是否为空的实例方法
May 10 PHP
PHP读书笔记_运算符详解
Jul 01 #PHP
php+MySql实现登录系统与输出浏览者信息功能
Jul 01 #PHP
php无法连接mysql数据库的正确解决方法
Jul 01 #PHP
Apache无法自动跳转却显示目录的解决方法
Nov 30 #PHP
Windows2003下php5.4安装配置教程(IIS)
Jun 30 #PHP
Windows2003下php5.4安装配置教程(Apache2.4)
Jun 30 #PHP
PHP环境搭建的详细步骤
Jun 30 #PHP
You might like
Php Ctemplate引擎开发相关内容
2012/03/03 PHP
PHP OPP机制和模式简介(抽象类、接口和契约式编程)
2014/06/09 PHP
Codeigniter检测表单post数据的方法
2015/03/21 PHP
PHP多线程模拟实现秒杀抢单
2018/02/07 PHP
PHP实现打包zip并下载功能
2018/06/12 PHP
jquery下操作HTML控件的实现代码
2010/01/12 Javascript
通过正则表达式实现表单验证是否为中文
2014/02/18 Javascript
深入理解Javascript中this的作用域
2014/08/12 Javascript
简易的投票系统以及js刷票思路和方法
2015/04/07 Javascript
如何通过js实现图片预览功能【附实例代码】
2016/03/30 Javascript
利用jquery实现瀑布流3种案例
2016/09/18 Javascript
js中用cssText设置css样式的简单方法
2016/09/19 Javascript
vue2.0实现倒计时的插件(时间戳 刷新 跳转 都不影响)
2017/03/30 Javascript
AngualrJs清除定时器遇到的坑
2017/10/13 Javascript
浅谈Vue数据绑定的原理
2018/01/08 Javascript
10 种最常见的 Javascript 错误(频率最高)
2018/02/08 Javascript
Vue 中使用 CSS Modules优雅方法
2018/04/09 Javascript
vue使用codemirror的两种用法
2019/08/27 Javascript
原生javascript单例模式的应用实例分析
2020/02/23 Javascript
urllib和BeautifulSoup爬取维基百科的词条简单实例
2018/01/17 Python
python实现微信发送邮件关闭电脑功能
2018/02/22 Python
python爬虫基本知识
2018/03/05 Python
解决vscode python print 输出窗口中文乱码的问题
2018/12/03 Python
python删除列表元素的三种方法(remove,pop,del)
2019/07/22 Python
pygame实现五子棋游戏
2019/10/29 Python
对django 2.x版本中models.ForeignKey()外键说明介绍
2020/03/30 Python
python numpy矩阵信息说明,shape,size,dtype
2020/05/22 Python
用CSS3和table标签实现一个圆形轨迹的动画的示例代码
2019/01/17 HTML / CSS
Html5插件教程之添加浏览器放大镜效果的商品橱窗
2016/01/07 HTML / CSS
HTML5+lufylegend实现游戏中的卷轴
2016/02/29 HTML / CSS
HTML5 Canvas基本线条绘制的实例教程
2016/03/17 HTML / CSS
美国乡村商店:Plow & Hearth
2016/09/12 全球购物
LN-CC美国:伦敦时尚生活的缩影
2019/02/19 全球购物
大学生大二自我鉴定
2013/10/28 职场文书
小学模范班主任事迹材料
2014/05/13 职场文书
创业计划书之都市休闲农庄
2019/12/28 职场文书