【php】投票系统管理员部分,增加投票与删除投票

关于投票系统怎么样怎么样的引言就不多说,这不是毕业设计

主要说一下使用php实现投票系统,与其他普通系统一样,分为两部分,一个是管理员部分,一个是普通用户部分

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

关键在于设计好数据库的表,

拟定于这样存一个投票,voteparent表存这个投票的标题、描述是否被删除,votechildren表存这个投票的子选项与投票数


一、基本目标

首先投票系统是这样的:


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

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

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


预览图是使用IE6的,所以添加与删除选项反应得比较慢,

管理员填完投票信息之后,就能成功地添加投票了,


提交前会向管理员询问是否添加,防止误操作

这里的系统其实还应该使用xajax来调查这个投票数据里面是否有,而且有任意一项选项为空应该不让添加,才是,

详情可以参考《【php】注册系统和使用Xajax即时验证用户名是否被占用》一文(点击打开链接),这里没做,因为本文主要讲投票系统核心实现,这里就不扣这些小细节。


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


在每一个投票的末尾都有删除按钮,

点击每一个投票标题能够查看本投票:


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


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


二、基本思想

投票系统的管理员部分没有什么新的技术还是数据库的操作,

首先voteparent表的结构如下:


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

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


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



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


本文只说明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 οnclick="createbtn()">增加选项</button> <button οnclick="delbtn()">删除选项</button>
<!--onsubmit属性是为了下面脚本能够顺利弹出确认框,用户确认之后才提交这个表单-->
<form action="createvote.php" method="post" οnsubmit="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"]}' οnclick='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】登录系统与输出浏览者信息》(点击打开链接

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
响应式投票评选系统V3.2.1-礼物献花版(支持微信)本投票程序是一个PHP+MYSQL响应式投票系统,兼容手机,平板,PC电脑。本地测试可能会因为我们目录不一致导致图片不出现,重新上传即可。 本系统使用环境:PHP(5.4以下)+MYSQL 程序安装过程: 1、导入源码到服务器空间(FTP)本地请导入环境目录 2、导入SQL数据备份文件到数据库 3、配置INDEX.PHP文件为您自己的数据库信息 这样程序就能正常访问了 测试IP:127.0.0.1 后台路径:index.php?c=main&a=login 管理员初始帐号:mxszpt 密码:mxszptcom 本投票程序仅限于本地测试使用,如用于商业,造成任何损失,请自行负责!本系统已经备案开发专利,请购买正版VIP授权。 V3.2.1 礼物献花特别版 1.修改投票为免费和付费两种,免费票数用完后,可以选择礼物为选手投票,后台可配置每天免费投票数和选手每天获得总免费票数 2.新增新增视频库,点击自动切换大屏视频 3.新增前后台可控制选手分页数量,人性化设置 4.新增礼物模块-可设置不同礼物,上传对应图片和排序等等 5.新增统计功能-自动化删除所有数据,重置系统,并添加对应的数据统计表,可以灵活的无限开展多期活动。 6.新增评委功能,后台管理员可以给每个作品打评委分,并且转换成相应的票数 7.新增视频加票功能-判断作品里面的视频是否被点击和观看程度来增加对应票数 8.新增通过微信观看的视频,增加对应票数(需要对接微信公众号平台API) 9.新增直播功能-首页最上面通过 WEBAPI来增加直播功能(第三方插件) 10.新增微信支付接口(对应填写密钥等即可开启使用) 11.新增增加支付宝接口(对应填写密钥等即可开启使用) 12.新增选手详情,可独立增加音频和视频展示 13.新增背景色切换,在后台系统配置中,填写对应RGB值即可变色,用于对应不同类型活动 14.更多不同功能请登录系统自行调试 V3.2 VIP授权版修改: 1.新增终身授权,域名授权功能 2.新增人气功能,增加人气排行榜 3.新增总票数排名功能 4.去掉后台分类 5.用户增加余额,后台可设置付费投票金额,预留接口可二次开发 6.投票增加发表人,一个帐号发起一个投票 7.增加会员中心查看参赛详情等资料 8.报名投票可后台开启审核,开启报名就需要审核,不开启直接参赛 9.后台用户日志新增一键清空日志,一键清空投票信息,方便商家重新开启活动 10.详情页新增分享功能,方便客户转发,拉票 11.首页新增投票结束时间倒计时功能 12.修复首页图片不一样导致排版问题 13.修复VIP授权版投票报错 14.修复投票后票数不增加 15.整合时间控制到后台,可以后台直接操作,方便商家操作 16.后台首页新增数据统计,授权信息等。 17.美化后台投票查看界面
1、引言 1.1编写目的 在完成了针对《学生信息系统》软件市场的前期调查,同时与多位同学进行了全面深入地探讨和分析的基础上,提出了这份软件需求规格说明书。 此需求规格说明书对《学生信息系统》软件做了全面细致的用户需求分析,明确所要开发的软件应具有的功能、性能与界面,使系统分析人员及软件开发人员能清楚地了解用户的需求,并在此基础上进一步提出概要设计说明书和完成后续设计与开发工作。 1.2项目背景 由于文件多,种类多,文件创建者多,创建时间为不定期,要保护好一些公司重要的文件极为不便,同时由于人员的流动,对原有的文件的再现,显得力不从心,有时查找与重新整理文件要浪费许多的人力、物力。 为了有效的共享文件资源,保护好文件,及促进学生信息系统管理的信息化、规范化和集成化,本人多方听取意见、追加和完善大量实用功能,进而了解文件管理的流程,同时结合各部门、各专业与学科管理的方法,开发出一套适合于学生信息系统多而复杂的管理系统。 1.3定义、缩写词和符号 需求:用户解决问题或达到目标所需的条件或功能;系统或系统部件要满足标准,规范或其它正式规定文档所需具有的条件或权能。 1.4参考资料 张海藩:《软件工程导论》,清华大学出版社,2008年2月版 黄德才: 《数据库原理及其应用教程》,科学出版社,2006年2月版 2.任务概述 2.1目标 2.1.1开发目标 在当今世界电脑普及的时刻,人们已经习惯用电脑办公,结果自然会产生大量的电子文件,这些文件有宝贵的历史价值,但我们如果将更多的时间花费在寻找这些文件上,即费时又费力。本软件根据此需求进行开发的。 2.1.2应用目标 让学校能够有效的掌握,有效的共享文件资源,保护好文件,及促进学生信息系统管理的信息化、规范化和集成化,实现计算机的智能化管理,以提高工作效率和经济效益。 2.2运行环境 2.2.1硬件环境 A. 一台.NET系统的微机 B.内存足够大 2.2.2软件环境 A.windows 98 以上的操作系统 B.Microsoft Visual studio 2007 C.Microsoft SqlServer 2000 2.3条件与限制 此学生信息系统管理软件是应用于各个学校的。在功能上还可进一步实现安全防范、与E-Mail和因特网电话集成起来,成为学生信息系统管理软件。 3. 数据描述 3.1静态数据 1)Students表 2)Reports表 3)Courses表 4)Log on表 3.2动态数据 输入数据:菜单选项,添加项,查询项,修改项,删除项。 输出数据:由添加、查询、修改、删除所确定的数据库记录集合。 内部生成的数据:查询结果。 3.3数据库描述 本软件采用SQL数据库。 3.4数据流程图 《学生信息系统》软件的数据流程图是比较清晰的,对各功能模块来说都比较有规律。但完整的图比较繁琐,各个功能模块的基本流程图如下。 3.5数据字典 这里给出一个数据元素的字典卡片与具体数据卡片的含义: 名称:学生信息系统 描述:产生学生信息文件送交学生信息目录表 定义:学生信息系统=学生信息类型+安全级别 4. 功能要求 4.1功能划分 本系统有以下功能模块: 1)学生信息录入模块 2)学生信息查询模块 3)学生信息修改模块 4)学生信息删除模块  4.2功能描述 下面详细描述一下各个功能模块: 1)学生信息录入 (1) 学生信息目录管理:只限于一般用户和管理员操作。而且不同的用户级别所操作的信息类型是有限制的。用户可以向里面添加、修改和删除档案类型。也可设置信息类型的级别,以加强它们的保密性。 (2) 学生信息仓库:限于全体操作员工。一般浏览者只能查看学生信息,不能对学生信息做任何的修改。而且不同的用户级别所看到的档案是有限制的。一般用户可向里面添加、修改和删除档案。也可设置学生信息级别,以加强它们的保密性。 2)学生信息查询 (1) 查询单条学生信息记录:主要是适合于全体操作人员的。在窗体上,先可以选择查询的条件,再输入关键字名。按查询即可。查到记录后,也可双击记录即可显示详细信息。 (2) 查询全部学生信息:是给管理员用的,是为了方便管理员查找学生信息,也有按班级查询、按姓名查询和按学号查询。查到记录后,也可双击记录即可显示详细信息。 也有多种查询方法。查到记录后,也可双击记录即可显示详细信息。 3)学生信息修改 (1)修改单条学生信息:主要是适合于全体操作人员的。在窗体上,修改学生信息。修改记录后,也可双击记录即可显示详细信息。 (2)修改全部学生信息:是给管理员用的,是为了方便管理员修改学生信息。修改记录后,也可双击记录即可显示详细信息。 4)学生信息删除 (1)删除单条学生信息:主要是适合于全体操作人员的。在窗体上,删除学生信息。删除记录后,也可双击记录即可显示详细信息。 (2)删除全部学生信息:是给管理员用的,是为了方便管理员删除学生信息。删除记录后,也可双击记录即可显示详细信息。 5.性能需求 5.1数据精确度 A.要按照严格的数据格式输入,否则系统不给予响应进行处理。 B.查询时要保证查全率,所有相应域包含查询关键字的记录都应能查到。因为通常有文件的记录会很多,所以本系统采用了两种方法进行查询:按班级查询、按姓名查询和按学号查询。 5.2时间特性 一般操作的响应时间应在1~2秒内,对软磁盘和打印机的操作也应在可接受的时间内完成。 5.3适应性 满足学校使用的需求(记录量控制在1000项内)。 对前面提到的运行环境要求不应存在困难。 6. 运行需求 6.1用户界面 超越VB的界面,全新感觉,操作简便,一目了然,视图优美等特点。并且采用菜单界面驱动方式,给操作用户带来了极大的便利,对用户友好。对鼠标和键盘单独支持。 6.2硬件接口 本软件不需要特定的硬件或硬件接口进行支撑。 6.3软件接口 运行于Windows 2000及更高版本具有.net的操作系统之上。 6.4故障处理 正常使用时不应出错,若运行时遇到不可恢复的系统错误,也必须保证数据库完好无损。 调试中遇到的问题及解决的方案: 1)遇到跳出“数据库已经关闭“提示信息阻止程序运行时 可以查看一下进行此项操作时,操作的表是否已经被关闭了或者是在没有关闭此表的情况 下又一次运用打开语句打开此表。 2)关于空记录带来的麻烦 有些空记录往往会使程序无法运行。此时你可用“if not isnull”语句先判断一下是否为 空记录,再操作。 3)有些运行错误也可用如下语句排除 On Error GoTo Erropoint Erropoint : Msgbox Err.Descripton Exit sub 或用On Error resume Next 等语句进行处理。 7.其它要求 1)系统的功能实现情况: 用户可在本系统下实现各种用户要求的功能 2)系统的安全性: 对于系统的重要数据都有密码保护,具有一定的安全性 3)系统的容错性: 用户输错数据都有提示信息,具有较好的容错性能。 4)系统的封闭性: 用户的封闭性较好,用户基本上在提示信息下输数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值