版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Good is good, but better carries it.精益求精,善益求善。phpmysql经典案例剖析版2011111最新版2011第第章章导读投票系统(PHP+MySQL)动态链接库投票添加功能区域统计图形显示IP来源判断投票系统是一般网站常用的一种系统。它是一种在网站上提出调查题目,由用户在线投票并对调查投票的统计结果直接显示的调查工具。网站可以通过投票系统统计的数据来了解用户对一些热点问题的看法。通常可以用投票系统来了解用户对网站的态度,对网站服务的评价或对网站新推出的新产品或服务的反映等。通过投票系统搜集的信息可以对网站做出相应改进。1.1系统分析本节通过系统背景、系
2、统模块分析和系统流程图3个方面来对系统进行分析。1.1.1系统背景从国际互联网到校园网、企业局域网,各种网上投票系统随处可见。意见调查、用户信息统计、经营情况调查都可以作为投票的内容。网上投票系统凭借其方便快捷等特点,已经成为互联网资源中不可缺少的一部分。网上投票系统是网站搜集用户需求并有效地实施市场策略的重要手段之一。通过开展问卷调查,可以迅速了解不同行业、不同区域用户的需求,客观地搜集需求信息,及时调整网站的营销策略以满足不同的需求。随着网络技术的发展,网上投票系统的作用将会越来越大。1.1.2系统模块分析为了更合理地设计投票系统,需要从以下3点进行分析。1投票的形式网上投票系统是网站搜集
3、用户需求信息的一个途径,可以根据网站的需要设置一个或多个调查。不同的调查需要设置不同的选项,不同的调查要求,选项的形式也是不同的(单选或多选),不同时间段又会有不同的调查。既然网站要通过投票系统搜集信息,那么投票就必须有结果和对用户信息的统计。2投票的特点由于互联网本身的开放性,使网上投票面临种种危险,也由此提出了相应的安全控制要求。信息保密性:投票者有保密的要求。如果用户名及投票内容被人知悉,就对用户的隐私权构成了侵害。因此在网上投票系统中一般均有匿名投票的要求。投票唯一性:一个投票者,其投票次数应当只有一次。若投票者可进行多次投票,这将对调查内容的可靠性构成严重的威胁。有了这些特殊性的要求
4、,就需要对用户的信息和投票进行检查和处理,以保证投票的客观和有效性。针对用户信息,如果无特殊的要求(例如只允许注册会员参加),那么系统就只需要记录的IP、投票时间、用户所在区域。投票结果的显示是非常重要的,一是用户希望自己的投票能够及时反映出来;二是投票的结果也是给希望投票的用户的一个参考。3投票系统结构根据投票系统对形式的需求和投票系统自身的特点,需要包含以下几个模块。投票管理模块:该模块可以添加、编辑和删除调查选项,设置调查选项为多选或单选,设置调查的时间期限,设置此调查是否启用,调查结果的统计显示。调查显示模块:该模块的功能是显示已启用、未过期的调查。投票处理模块:该模块需要对投票进行有
5、效性检查,并将投票结果和用户信息写入数据库。调查结果显示模块:该模块主要是计算每个调查选项统计结果的百分比并以图表的形式显示出来。数据库操作的基础模块:该模块定义了连接数据库、表的查询,数据的插入、更新和删除操作。该模块作为一个通用模块将会在后面的章节用到。1.1.3系统流程图根据以上分析,系统的流程如图1.1所示。在该流程中,网站管理员在投票管理里面添加调查数据,然后在调查显示模块里面显示出来。用户通过调查显示的“投票”按钮投票,数据被传递到投票处理模块,处理之后转到调查结果显示页面。用户也可以通过调查显示的“查看结果”按钮直接转到调查结果显示页面。图1.1系统流程图1.2数据库建立通过1.
6、1节对投票系统功能的分析可知,需要存储的信息有调查信息、调查选项信息和用户信息。因此,本系统需要建立调查信息表、调查选项信息表和用户信息表。先从图1.2来分析这几个表之间的关系。从图1.2可以看出调查信息、调查选项信息和用户信息都是1对多的关系,并通过调查信息ID关联。构架的投票系统数据库vote(采用MySQL数据库)如表1.1表1.3所示。图1.2数据表关系图表1.1调查信息表:EM_VOTE_INFO用于存储调查内容字段名类型(长度)描述主键是否为空默认值备注F_IDINT(10)表ID(唯一)是否自动增加F_VOTE_TITLEVARCHAR(255)调查标题否否F_VOTE_STAR
7、TINT(10)TIMESTAMP调查开始时间否是F_VOTE_ENDINT(10)TIMESTAMP调查结束时间否是F_VOTE_ITEM_TYPETINYINT调查选项类型否否11为单选(默认)2为多选F_VOTE_IS_DISPLAYTINYINT是否启用否否11为启用(默认)0为禁用表1.2调查选项信息表:EE_ITEM_INFO用于存储调查的选项信息字段名类型(长度)描述主键是否为空默认值备注F_IDINT(10)表ID(唯一)是否自动增加F_ID_VOTE_INFOINT(10)调查表ID否否与调查表关联F_ITEM_TITLEVARCHAR(50)选项标题否否F_ITEM_COU
8、NTINT(10)统计数量否否0F_ITEM_ORDERTINYINT选项排列顺序否否01为单选(默认)表1.3调查用户信息表:EE_VOTE_USER用于存储用户信息字段名类型(长度)描述主键是否为空默认值备注F_IDINT(10)表ID(唯一)是否自动增加F_ID_VOTE_INFOINT(10)调查表ID否否与调查表关联F_USER_IPINT(15)用户IP否否续表字段名类型(长度)描述主键是否为空默认值备注F_USER_TIMEINT(10)TIMESTAMP统计时间否否F_USER_AREAVARCHAR(20)用户所在区域否否1.3数据库操作基础模块数据操作基础模块主要实现数据库
9、连接以及对数据库表的一些基本操作功能。它包括配置文件和数据库操作文件。下面分别对它们做详细讲解。1.3.1配置文件config.inc.php建立配置文件是系统构架需要考虑的重点。因为在一个系统里会有一些常用的参数在很多地方可以用到,如果到使用的时候才定义,那么需要修改的时候就会相当的麻烦,而且容易出错,代码的可读性也很差。在配置文件里放的主要是数据库连接用的参数和一些全局变量。代码如下:1.3.2数据操作文件db.inc.phpPHP是一种面向对象的编程语言。这个数据操作文件主要用于建立一个类。该类的初始化构造函数可以连接数据库和表。其他的方法包括对表的查询、数据的插入、更新、删除操作和事务
10、处理。事务处理是用在执行多个更新或删除操作时为了保证数据完整性而使用的。把这些基本操作封装在一个模块里面对于代码的可读性、系统的扩展性和健壮性都有好处。代码如下:CONN=$conn;/*功能:数据库查询函数*参数:$sqlSQL语句*返回:二维数组或false*/publicfunctionselect($sql=)if(empty($sql)returnfalse;/如果SQL语句为空则返回falseif(empty($this-CONN)returnfalse;/如果连接为空则返回falsetry/捕获数据库选择错误并显示错误文件$results=mysql_query($sql,$th
11、is-CONN);catch(Exception$e)$msg=$e;include(ERRFILE);if(!$results)or(empty($results)/如果查询结果为空则释放结果并返回falsemysql_free_result($results);returnfalse;$count=0;$data=array();while($row=mysql_fetch_array($results)/把查询结果重组成一个二维数组$data$count=$row;$count+;mysql_free_result($results);return$data;/*功能:数据插入函数*参数
12、:$sqlSQL语句*返回:0或新插入数据的ID*/publicfunctioninsert($sql=)if(empty($sql)return0;/如果SQL语句为空则返回falseif(empty($this-CONN)return0;/如果连接为空则返回falsetry/捕获数据库选择错误并显示错误文件$results=mysql_query($sql,$this-CONN);catch(Exception$e)$msg=$e;include(ERRFILE);if(!$results)/如果插入失败就返回0,否则返回当前插入数据IDreturn0;elsereturnmysql_in
13、sert_id($this-CONN);/*功能:数据更新函数*参数:$sqlSQL语句*返回:TRUEORFALSE*/publicfunctionupdate($sql=)if(empty($sql)returnfalse;/如果SQL语句为空则返回falseif(empty($this-CONN)returnfalse;/如果连接为空则返回falsetry/捕获数据库选择错误并显示错误文件$result=mysql_query($sql,$this-CONN);catch(Exception$e)$msg=$e;include(ERRFILE);return$result;/*功能:数据
14、删除函数*参数:$sqlSQL语句*返回:TRUEORFALSE*/publicfunctiondelete($sql=)if(empty($sql)returnfalse;/如果SQL语句为空则返回falseif(empty($this-CONN)returnfalse;/如果连接为空则返回falsetry$result=mysql_query($sql,$this-CONN);catch(Exception$e)$msg=$e;include(ERRFILE);return$result;/*功能:定义事务*/publicfunctionbegintransaction()mysql_qu
15、ery(SETAUTOCOMMIT=0);/设置为不自动提交,因为MySQL默认立即执行mysql_query(BEGIN);/开始事务定义/*功能:回滚*/publicfunctionrollback()mysql_query(ROOLBACK);/*功能:提交执行*/publicfunctioncommit()mysql_query(COMMIT);?1.4投票管理模块投票管理模块用于实现网站管理员对投票数据的管理,可以添加、编辑、删除调查选项,还可以查看调查统计的信息。该模块包括调查类文件、调查列表文件、添加调查文件、编辑调查文件、删除调查文件以及用户统计文件。下面对这几个文件分别进行讲
16、解。1.4.1调查类文件vote.inc.php该文件是一个类文件。它的功能主要是对调查信息、表1.2和表1.3的操作,除一些基本操作外,在开发的过程中还可以根据需要添加其他的操作。调查类文件作为一个包含文件被调用。代码如下:单选,/定义选项类型2=多选);public$_display=array(0=禁用,/定义调查启用显示1=启用);privatefunction_construct()parent:_construct();/*功能:提取调查列表*返回:数组*/publicfunctiongetVoteList()$sql=SELECT*FROM.$this-_name;return$
17、this-select($sql);/*功能:提取指定表的指定ID的记录*参数:$id表ID,$name表名称*返回:数组*/publicfunctiongetInfo($id,$name)$sql=SELECT*FROM.$name.WHEREF_ID=$id;$r=$this-select($sql);return$r0;/*功能:向指定表中插入数据*参数:$name表名称,$data数组(格式:$data字段名=值)*返回:插入记录ID*/publicfunctioninsertData($name,$data)$field=implode(,array_keys($data);/定义S
18、QL语句的字段部分foreach($dataas$key=$val)/组合SQL语句的值部分$value.=.$val.;if($keyinsert($sql);/*功能:更新指定表指定ID的调查表记录*参数:$name表名称,$id表ID,$data数组(格式:$data字段名=值)*返回:TRUEORFALSE*/publicfunctionupdateData($name,$id,$data)$col=array();foreach($dataas$key=$value)$col=$key.=.$value.;$sql=UPDATE.$name.SET.implode(,$col).WH
19、EREF_ID=$id;return$this-update($sql);/*功能:删除指定ID的调查表记录及相关表记录*参数:$id调查表ID*返回:TRUEORFALSE*/publicfunctiondelData($id)$this-begintransaction();try$sql=DELETEFROM.$this-_item.WHEREF_ID_VOTE_INFO=.$id;$this-delete($sql);/删除调查选项里面的相关数据$sql=DELETEFROM.$this-_user.WHEREF_ID_VOTE_INFO=.$id;$this-delete($sql)
20、;/删除用户统计表里面的相关数据$sql=DELETEFROM.$this-_name.WHEREF_ID=.$id;$this-delete($sql);catch(Exception$e)$this-rollback();returnfalse;$this-commit();returntrue;/*功能:提取指定调查ID的选项*参数:$vote_id调查ID*返回:数组*/publicfunctiongetItemList($vote_id)$sql=SELECT*FROM.$this-_item.WHEREF_ID_VOTE_INFO=$vote_id;return$this-sele
21、ct($sql);/*功能:删除指定ID的选项表记录*参数:$id表ID*返回:TRUEORFALSE*/publicfunctiondelItemData($id)$sql=DELETEFROM.$this-_item.WHEREF_ID=$id;return$this-delete($sql);$sql.=“ORDERBYF_ITEM_ORDER”;/*功能:提取指定调查ID的用户统计信息*参数:$vote_id调查ID,$page当前页码*返回:数组*/publicfunctiongetUserList($vote_id,$page=1)$start=($1)*$this-_pagesi
22、ze;$sql=SELECT*FROM.$this-_user.WHEREF_ID_VOTE_INFO=$vote_id;$sql.=LIMIT$start,$this-_pagesize;return$this-select($sql);/*功能:提取指定调查ID用户统计记录的条数*参数:$vote_id调查ID*返回:记录条数*/publicfunctiongetUserCount($vote_id)$sql=SELECTCOUNT(F_ID)FROM.$this-_user.WHEREF_ID_VOTE_INFO=$vote_id;$r=$this-select($sql);return
23、$r00;/*功能:删除指定ID的用户统计记录*参数:$id用户统计表ID*返回:TRUEORFALSE*/publicfunctiondelUserData($id)$sql=DELETEFROM.$this-_user.WHEREF_ID=$id;return$this-delete($sql);?对单个表进行查询、插入、更新和删除时的代码很相似,唯一不同的是操作表的名称。这里可以把这些对单个表的基本操作放到基础类文件db.inc.php里面。加入如下代码:/*功能:提取指定表的指定ID的记录*参数:$id表ID,$name表名称*返回:数组*/publicfunctiongetInfo(
24、$id,$name)$sql=SELECT*FROM.$name.WHEREF_ID=$id;$r=$this-select($sql);return$r0;/*功能:向指定表中插入数据*参数:$name表名称,$data数组(格式:$data字段名=值)*返回:插入记录ID*/publicfunctioninsertData($name,$data)$field=implode(,array_keys($data);/定义SQL语句的字段部分$i=0;foreach($dataas$key=$val)/组合SQL语句的值部分$value.=.$val.;if($iinsert($sql);/
25、*功能:更新指定表指定ID的调查表记录*参数:$name表名称,$id表ID,$data数组(格式:$data字段名=值)*返回:TRUEORFALSE*/publicfunctionupdateData($name,$id,$data)$col=array();foreach($dataas$key=$value)$col=$key.=.$value.;$sql=UPDATE.$name.SET.implode(,$col).WHEREF_ID=$id;return$this-update($sql);/*功能:删除指定ID的表记录*参数:$id表ID,$name表名称*返回:TRUEORF
26、ALSE*/publicfunctiondelData($id,$name)$sql=DELETEFROM.$name.WHEREF_ID=$id;return$this-delete($sql);1.4.2调查列表文件VoteList.php该文件的功能是显示调查信息表1.1中的数据列表。该文件包含配置文件调查类文件。提取列表的数据是通过调查类文件里面的提取列表方法来实现的。首先声明一个调查类Vote的对象,通过这个对象来调用类的提取列表方法getVoteList()。通过这个页面连接到添加、编辑、选项管理、用户统计及删除操作页面。界面如图1.3所示。图1.3调查列表代码如下:getVote
27、List();$time=time();?序号调查标题开始时间结束时间选项类型是否过期是否启用操作$value)?_type$valueF_VOTE_ITEM_TYPE?$time)echo未过期;elseecho已过期;?_display$valueF_VOTE_IS_DISPLAY?ahref=EditVote.php?id=编辑ahref=ItemList.php?id=选项管理ahref=UserList.php?id=用户统计信息ahref=DelVote.php?id=删除1.4.3添加调查文件AddVote.php该文件的功能是添加新调查,将数据写入表1.1中。该文件由图1.3中
28、调查列表页面的“添加调查”按钮连接过来。用户填写完表单后单击“提交”按钮进行处理。表单提交给自身,通过判断是否为提交操作进行数据处理。数据的处理通过调查类Vote的对象调用父类DBSQL的insertData()方法实现的,界面如图1.4所示。图1.4添加调查1主程序部分该部分代码用于实现提交数据的处理和操作界面的显示。代码如下:insertData($vote-_name,$data)/判断是否操作成功echo操作成功;elseecho操作失败;echo返回;exit();?调查标题:所属类型:_typeas$key=$value)/循环显示类型选择下拉列表框echo$value;?开始时间
29、:?phpfor($i=1;$i=($year+1);$i+)/循环显示开始年份下拉列表框echo$i;?年?phpfor($i=1;$i=12;$i+)/循环显示开始月份下拉列表框if($i10)$i=0.$i;echo$i;?月?phpecho$day;/列表?日结束时间:?phpfor($i=1;$i=($year+1);$i+)/循环显示结束年份下拉列表框echo$i;?年?phpfor($i=1;$i=12;$i+)/循环显示结束月份下拉列表框if($i10)$i=0.$i;echo$i;?月?phpecho$day;?日是否启用:启用禁用2客户端程序(JavaScript)在主程序
30、代码里,表单提交之前会用到客户端语言JavaScript来实现日期的选择和数据正确性、完整性检查。数据正确性、完整性检查是在处理添加和编辑数据页时必需的。必须检查那些在数据库里面不能为空的字段和有特殊格式的字段,保证它的正确性和完整性。调用JavaScript是通过表单中的onsubmit=javascript:returncheck();实现的。这个调用的意思是:如果返回true,就提交表单;否则不提交。check()函数的代码如下:/功能:检查日期格式是否是有效格式functioncheckIsValidDate(str)if(str=)/如果参数为空,则返回falsereturnfals
31、e;vararrDate=str.split(-);/把参数用split函数分割成数组,它等同与PHP中的explode函数if(parseInt(arrDate0,10)parseInt(d2,10)/将两个字符串转化成整数,如果d1d2则开始日期大于结束日期returnfalse;elsereturntrue;/定义一个javascript的原形Stotype.len=function()/计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)returnthis.replace(/x00-xff/g,aa).length;functioncheck()varStart=docum
32、ent.form1.start_y.value+-+document.form1.start_m.value+-+document.form1.start_d.value;varEnd=document.form1.end_y.value+-+document.form1.end_m.value+-+document.form1.end_d.value;if(document.form1.title.value=)/判断标题是否为空,为空则返回falsealert(请填写调查名称);document.form1.title.focus();returnfalse;if(document.for
33、m1.title.value.len()100)/判断标题长度是否超过100alert(调查标题不能超过100个字)document.form1.title.focus();returnfalse;if(!checkDateEarlier(Start,End)/判断开始日期是否大于结束日期alert(开始日期因不能小于结束日期);returnfalse;日期处理JavaScript文件date.js的代码如下:/功能:显示开始日期指定月份的天数/参数:month月份functionregister_buildDay(month)varyearOb=document.getElementById
34、(start_y);/取得开始日期年份vardayOb=document.getElementById(start_d);/取得开始日期天数document.getElementById(start_d).length=0;varlastDay=register_getDay(yearOb.value,Number(month);/取得当月的天数for(vari=1;i=lastDay;i+)/循环输出下拉列表框vardayOption=document.createElement(OPTION);dayOb.options.add(dayOption);dayOption.innerText
35、=i;dayOption.value=i;dayOb.selectedIndex=0;/功能:重新设置开始日期的天数functionregister_resetDay()vardayObject=document.getElementById(start_d);vardayLength=dayObject.length;for(vari=1;idayLength;dayLength-)/将开始日期天数的下拉列表框循环移处dayObject.remove(i);/功能:显示结束日期指定月份的天数/参数:month月份functionregister_buildEndDay(month)varye
36、arOb=document.getElementById(end_y);/取得结束日期的年份vardayOb=document.getElementById(end_d);/取得结束日期的天数document.getElementById(end_d).length=0;varlastDay=register_getDay(yearOb.value,Number(month);/取得当月的天数for(vari=1;i=lastDay;i+)/循环输出下拉列表框vardayOption=document.createElement(OPTION);dayOb.options.add(dayOpt
37、ion);dayOption.innerText=i;dayOption.value=i;dayOb.selectedIndex=0;/功能:重新设置结束日期天数functionregister_resetEndDay()vardayObject=document.getElementById(end_d);vardayLength=dayObject.length;for(vari=1;idayLength;dayLength-)/将结束日期天数的下拉列表框循环移处dayObject.remove(i);/功能:取得指定年份和月份的天数/参数:year年份month月份functionreg
38、ister_getDay(Year,Month)varLastDay=0;switch(Month)/判断月份,1,3,5,7,8,10,12天数为31天,4,6,9,11为30天case1:case3:case5:case7:case8:Month=0+Month;case10:case12:LastDay=31;break;case4:case6:case9:Month=0+Month;case11:LastDay=30;break;case2:/判断是否为闰年,是则2月为29天,不是则为28天Month=0+Month;if(Year%4=0&Year%100!=0)|Year%400=
39、0)LastDay=29;elseLastDay=28;break;default:LastDay=0;returnLastDay;1.4.4编辑调查文件EditVote.php该文件的功能是编辑调查信息。该文件由图1.3中调查列表页面的操作列“编辑”连接过来传递调查ID参数。用户编辑表单数据后单击“提交”按钮进行数据处理。表单数据提交给自身,通过判断是否为提交操作来处理数据。处理数据通过调查类Vote的对象来调用父类DBSQL的updateData()方法实现的。其界面如图1.5所示。图1.5编辑调查代码如下:getInfo($_GETid,$vote-_name);$year=date(Y
40、);list($start_year,$start_month,$start_day)=explode(-,date(Y-m-d,$infoF_VOTE_START);list($end_year,$end_month,$end_day)=explode(-,date(Y-m-d,$infoF_VOTE_END);if($_SERVERREQUEST_METHOD=POST)/判断是否为提交请求$dataF_VOTE_TITLE=$_POSTtitle;$dataF_VOTE_START=mktime(0,0,0,$_POSTstart_m,$_POSTstart_d,$_POSTstart_
41、y);$dataF_VOTE_END=mktime(0,0,0,$_POSTend_m,$_POSTend_d,$_POSTend_y);$dataF_VOTE_ITEM_TYPE=$_POSTtype;$dataF_VOTE_IS_DISPLAY=$_POSTdisplay;if($vote-updateData($vote-_name,$_POSTid,$data)/判断是否操作成功echo操作成功;elseecho操作失败;echo返回;exit();?调查标题:inputname=titletype=textid=titlesize=40value=/所属类型:_typeas$key=
42、$value)echo$value;?开始时间:?phpfor($i=1;$i=($year+1);$i+)echo$i;?年?phpfor($i=1;$i=12;$i+)if($i10)$i=0.$i;echo$i;?月?phpecho$start_day;?日结束时间:?phpfor($i=1;$i=($year+1);$i+)echo$i;?年?phpfor($i=1;$i=12;$i+)if($i10)$i=0.$i;echo$i;?月?phpecho$end_day;?日是否启用:inputname=displaytype=radiovalue=1/启用inputtype=radio
43、name=displayvalue=0/禁用inputname=idtype=hiddenid=idvalue=/functioncheckIsValidDate(str)if(str=)returntrue;vararrDate=str.split(-);if(parseInt(arrDate0,10)parseInt(d2,10)returnfalse;elsereturntrue;Stotype.len=function()returnthis.replace(/x00-xff/g,aa).length;functioncheck()varStart=document.form1.sta
44、rt_y.value+-+document.form1.start_m.value+-+document.form1.start_d.value;varEnd=document.form1.end_y.value+-+document.form1.end_m.value+-+document.form1.end_d.value;if(document.form1.title.value=)alert(请填写调查名称);document.form1.title.focus();returnfalse;if(document.form1.title.value.len()100)alert(调查标
45、题不能超过100个字)document.form1.title.focus();returnfalse;if(!checkDateEarlier(Start,End)alert(开始日期因不能小于结束日期);returnfalse;比较添加调查和编辑调查文件,可以看出它们的代码很相似,不同的是在编辑时多了提取编辑信息的内容并显示出来。那么可以将添加调查和编辑调查文件合并处理,只需要增加一个判断就可以了。代码如下:$vote=newVote();if($_GETid)/判断是否有编辑信息的ID$info=$vote-getInfo($_GETid,$vote-_name);/提取编辑信息内容if
46、($_SERVERREQUEST_METHOD=POST)$dataF_VOTE_TITLE=$_POSTtitle;$dataF_VOTE_START=mktime(0,0,0,$_POSTstart_m,$_POSTstart_d,$_POSTstart_y);$dataF_VOTE_END=mktime(0,0,0,$_POSTend_m,$_POSTend_d,$_POSTend_y);$dataF_VOTE_ITEM_TYPE=$_POSTtype;$dataF_VOTE_IS_DISPLAY=$_POSTdisplay;if($_POSTid)/判断是否有编辑信息的IDif($vo
47、te-updateData($vote-_name,$_POSTid,$data)/执行编辑操作echo操作成功;echo返回;exit();elseif($vote-insertData($vote-_name,$data)/执行添加操作echo操作成功;echo返回;exit();1.4.5删除调查文件DelVote.php该文件的功能是删除调查及相关数据。该文件由图1.3中调查列表页面的操作列“删除”连接过来传递调查ID参数。删除数据通过调查类Vote的对象调用父类DBSQL的delData()方法来实现。代码如下:delData($_GETid)echo操作成功;echo返回;exit
48、();elseecho操作失败;echo返回;exit();?1.4.6调查选项列表文件ItemList.php该文件的功能是显示调查选项表1.2中的数据列表。该文件由图1.3中调查列表页面的操作列“选项管理”连接过来传递调查ID参数。该文件通过类Vote的对象调用父类的getItemList()方法实现的。通过这个页面可以连接到添加、编辑选项、删除选项和设置选项顺序页面。界面如图1.6所示。图1.6调查选项列表代码如下:getItemList($_GETid);?$info=$vote-getInfo($_GETid,$vote-_name);调查标题:序号选项标题统计操作$value)?次
49、ahref=EditItem.php?id=&voteid=编辑ahref=DelItem.php?id=&voteid=删除inputtype=submitname=Submit3value=添加选项onclick=javascript:window.location=AddItem.php?voteid=/inputtype=buttonname=Submitvalue=设置顺序onclick=javascript:window.location=SetOrder.php?voteid=/1.4.7添加、编辑调查选项文件OperItem.php该文件的功能是增加指定调查的选项和编辑指定调查
50、选项的信息。添加调查选项界面如图1.7所示。该文件由图1.6中调查选项列表页面的“添加选项”按钮连接过来传递调查ID参数。编辑调查选项界面如图1.8所示。该文件由图1.6中调查选项列表页面的操作列“编辑”连接过来传递调查ID参数、选项ID参数。这里添加和编辑作为一个文件来处理。判断当有选项ID参数传递时为编辑状态,提取该选项信息并显示。用户编辑或添加完表单数据后单击“提交”按钮进行数据处理。数据处理通过调查类Vote的对象调用父类的insertData()方法实现的,通过调用updateData()方法实现编辑。图1.7添加调查选项图1.8编辑调查选项代码如下:getInfo($_GETid,
51、$vote-_item);$title=编辑调查选项;if($_SERVERREQUEST_METHOD=POST)/判断是否提交请求$dataF_ID_VOTE_INFO=$_POSTvoteid;$dataF_ITEM_TITLE=$_POSTtitle;$dataF_ITEM_COUNT=0;$dataF_ITEM_ORDER=0;if($_POSTid)/有选项ID参数,则执行编辑操作if($vote-updateData($vote-_item,$_POSTid,$data)/判断是否操作成功echo添加操作成功;echo返回;exit();elseecho添加操作失败;echo返回
52、;exit();else/无选项ID参数,则执行添加操作if($vote-insertData($vote-_item,$data)/判断是否操作成功echo编辑操作成功;echo返回;exit();elseecho编辑操作失败;echo返回;exit();?调查管理$title调查标题:您对网站的满意程度?选项标题:inputname=titletype=textid=titlesize=40value=/inputtype=hiddenname=idid=idvalue=inputtype=hiddenname=voteidid=voteidvalue=functioncheck()if(
53、document.form1.title.value=)/判断标题是否为空,是则弹出提示框alert(请填写选项标题);document.form1.focus();returnfalse;returntrue;1.4.8选项顺序设置文件SetOrder.php该文件的功能是设置调查选项的显示顺序。该文件由图1.6中调查选项列表页面的“设置顺序”连接过来传递调查ID参数。用户在顺序文本框中输入顺序数值后单击“提交”按钮进行数据处理。选项按数值顺序从大到小排列。数据提交到本页判断是否为提交操作并进行处理。数据的处理通过调查类Vote的对象调用父类的setOrder()方法实现的。选项顺序设置界面
54、如图1.9所示。图1.9选项顺序设置在调查类文件vote.inc.php中加入下列代码:/*功能:设置指定调查的选项顺序*参数:$id选项ID数组,$order选项顺序数组*返回:TRUEORFALSE*/publicfunctionsetOrder($id,$order)if($id)$this-begintransaction();tryforeach($idas$key=$value)$sql=UPDATE.$this-_item.SETF_ITEM_ORDER=$order$keyWHEREF_ID=$value;$this-update($sql);catch(Exception$e
55、)$this-rollback();returnfalse;$this-commit();returntrue;下面这段代码定义了一个设置调查选项顺序的函数,这个函数在选项顺序设置文件中被调用。代码如下:getItemList($_GETvoteid);$info=$vote-getInfo($_GETvoteid,$vote-_name);if($_SERVERREQUEST_METHOD=POST)if($vote-setOrder($_POSTid,$_POSTorder)echo操作成功;echo返回;SetOrder.php?id=$_GETvoteid返回;exit();elsee
56、cho操作失败;echo返回;SetOrder.php?id=$_GETvoteid返回;exit();?调查管理调查选项顺序设置调查标题:序号选项标题顺序$value)?inputname=idtype=hiddenid=idvalue=/inputname=ordertype=textid=ordervalue=size=10/inputtype=hiddenname=voteidid=voteidvalue=1.4.9删除调查选项文件DelItem.php该文件的功能是删除指定选项记录。该文件由图1.6中调查选项列表页面的操作列“删除”连接过来传递调查ID参数、选项ID参数。选项的删除通
57、过类Vote的对象调用父类的delItemData()方法来实现。代码如下:delItemData($_GETid)/判断是否操作成功echo操作成功;echo返回;exit();elseecho操作失败;echo返回;exit();?1.4.10用户统计信息列表文件UserList.php该文件的功能是提取指定调查的用户统计信息列表。该文件由图1.3中调查列表页面的操作列“用户统计信息”连接过来传递调查ID参数。用户统计信息列表以分页显示,每页显示10条记录。分页的实现通过页码来计算每页提取记录的开始位置。计算公式为开始位置=(页码-1)每页显示数量。界面如图1.10所示。图1.10调查用户
58、统计信息代码如下:getUserList($_GETid,$cur_page);$count=$vote-getUserCount($_GETid);$pagecount=ceil($count/$vote-_pagesize);/计算总共的页数if(!$pagecount)$pagecount=1;/如果无总页数,则默认为1$url=?id=$_GETid&page=;/翻页跳转的地址?调查管理用户统计信息列表ahref=AreaList.php?id=点击查看区域统计序号用户IP所在区域投票时间$value)?共有信息共/页每页_pagesize?转到?phpfor($i=1;$i=$pa
59、gecount;$i+)echo$i;?inputtype=hiddenname=urlvalue=/页1.4.11区域统计文件AreaList.php在用户统计信息文件里显示了统计信息的列表,但这个列表对信息的统计不能一目了然。区域统计文件的功能就是按区域统计用户的信息。该文件是由图1.10中用户统计信息页面的“点击查看区域统计”连接过来传递调查ID参数。界面如图1.11所示。图1.11区域统计在调查类文件vote.inc.php中加入下列代码:/*功能:按区域统计用户信息*参数:$id调查ID*返回:数组*/publicfunctionareaList($id)$sql=SELECTCOU
60、NT(F_ID)ASC,F_USER_AREAFROM.$this-_user;$sql.=WHEREF_ID_VOTE_INFO=$idGROUPBYF_USER_AREA;return$this-select($sql);上面代码定义了按区域分组查询用户统计信息表的函数,这个函数在区域统计文件中被调用。代码如下:areaList($_GETid);?调查管理区域统计序号区域次数$value)?1.5调查显示模块调查显示模块的功能是把符合条件的调查提取并显示出来。这里的条件包括是否启用和是否过期。调查显示界面如图1.12所示。图1.12调查显示这里需要调查类文件vote.inc.php里有一
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 金属材料学备课笔记
- 中学食堂厨师招聘合同
- 机场物业管理招投标文件样本
- 政府办公楼环境卫生合同
- 冷链物流运输质量控制
- 物流中心车位租赁协议
- 儿童游乐场场地租赁合同范本
- 大型舞台设备维修吊车租赁合同
- 文化传媒公司董事长招聘协议
- 房地产销售技巧培训
- 20世纪时尚流行文化智慧树知到期末考试答案章节答案2024年浙江理工大学
- 国开(甘肃)2024年春《地域文化(专)》形考任务1-4终考答案
- (高清版)JTGT 3331-04-2023 多年冻土地区公路设计与施工技术规范
- 基于PLC的谷物烘干机控制系统设计--程序代码-附 录
- 社区治安巡逻队工作方案
- GHTF—质量管理体系--过程验证指南中文版
- 信用社(银行)借新还旧申请书(精编版)
- (完整版)苏教版五年级数学上册知识点归纳总结
- lampsite LTE 站点配置指导v1.1
- 放射性口腔粘膜炎的发病机制及危险因素
- 美能达807si相机中文说明书
评论
0/150
提交评论