您的位置:首页 > 编程语言 > PHP开发

简易在线投票系统(php)——投票页面

2016-01-10 22:31 615 查看
登陆后才可以进入投票页面,否则将自动回到主页。投票页面分为多选和单选两种形式。在投票完成后根据投票活动发布时设置的是否允许查看结果来确定是否自动跳转到结果页面。若不允许,会自动弹出提示框,并返回主页。

1、获取投票信息

if($ouser == ''){
echo "<script>alert('请先登录!');location.href='index.php';</script>";
}else{
$voteid=@$_GET['vid'];
if($voteid == ''){
echo "location.href='index.php';</script>";
}else{
$sql="select vname,starttime,uid,vintro,open,more,max,min from vote where vid='".$voteid."'";
$voteitem=mysql_query($sql);
$vitem=mysql_fetch_array($voteitem);

$sql2="SELECT itemcount,item,num FROM votetitle where vid='".$voteid."'";
$votetitle=mysql_query($sql2);
$vtitle=mysql_fetch_array($votetitle);

$sql3="SELECT username FROM users where uid='".$vitem['uid']."'";
$uname=mysql_query($sql3);
$username=mysql_fetch_row($uname);
(此处也是我认为这个系统的一大问题,对数据库的访问过于频繁)

一共三次访问数据库,获得所需的全部投票信息。

2、投票活动信息的显示

将php代码结合进html中方便显示。

<center><h2><?php echo $vitem['vname']; ?></h2></center>
<div id="vote">
<table>
<tr>
<td>发布人:<?php echo $username[0];?></td><td>发布时间:<?php echo $vitem['starttime']; ?></td>
</tr>
</table>
<div id="vote_intro">
<?php echo $vitem['vintro'] ?>
</div>
<div id="vote_contend">


3、对表单的设置

$itemcount=$vtitle['itemcount'];
$multi=$vitem['more'];
$option=explode('*',$vtitle['item']);
分别获得投票活动的选项数目、是否为多选、将各个选项储存在option对象中

(1)单选

a、前台表单

if($multi==0){//单选
$out="<form id='choice' name='choice' action='' method='post'><table>".
"<tr><td>注意:只能选择一项!</td></tr>";
for($i=0;$i<$itemcount;$i++){
$j=$i+1;
$out=$out."<tr><td><label><input type='radio' name='RadioGroup1' value='".$i."' id='".$j."' />".$option[$i]."</label></td></tr>";
}
$out=$out."<tr><td><input type='submit' name='choiceSend' value='提交并查看结果'/> <input type='reset'/></td></tr>".
"</table></form>";
echo $out;
}
通过循环,将各个选项的单选框显示出来,并以数字顺序命名,以choiceSend为名提交信息

b、后台处理

<?php
//单选投票
if(@$_POST['choiceSend']){
$ouser=@$_GET['user'];
$voteid=@$_GET['vid'];
if($ouser == ''){
echo "<script language='javascript'> alert('请先登录!'); </script>";
}else{
$sql="SELECT itemcount,item,num FROM votetitle where vid='".$voteid."'";
$votetitle=mysql_query($sql);
$vtitle=mysql_fetch_array($votetitle);

$sql2="select open from vote where vid='".$voteid."'";
$voteitem=mysql_query($sql2);
$vitem=mysql_fetch_array($voteitem);

$open='';
if($vitem['open']==0){
$open="alert('您无权查看投票结果!');location.href='./index.php?user=".$ouser."';";
}else{
$open="location.href='./result.php?user=".$ouser."&vid=".$voteid."';";
}

$ballot=explode('*',$vtitle['num']);
$decide=$_POST['RadioGroup1'];
$ballot[$decide]=$ballot[$decide]+1;
$num=implode('*',$ballot);
$sql2="UPDATE votetitle SET num = '".$num."' WHERE vid = '".$voteid."'";
mysql_query($sql2);
echo "<script language='javascript'>alert('投票成功!');".$open."</script>";
}
}
?>
点击提交后,会先检查是否处在登录的状态,通过查找数据库的方式确定信息,再将投票增加的选票添加到原有的投票统计中,并组成字符串,对数据库做出相应的更改,以实现投票的操作。

确定能否显示投票结果的过程:

if($vitem['open']==0){
$open="alert('您无权查看投票结果!');location.href='./index.php?user=".$ouser."';";
}else{
$open="location.href='./result.php?user=".$ouser."&vid=".$voteid."';";
}
计算并更改的过程:

$ballot=explode('*',$vtitle['num']);
$decide=$_POST['RadioGroup1'];
$ballot[$decide]=$ballot[$decide]+1;
$num=implode('*',$ballot);
$sql2="UPDATE votetitle SET num = '".$num."' WHERE vid = '".$voteid."'";
mysql_query($sql2);
(2)多选

a、前台表单

elseif($multi==1){//多选
$out="<form id='mult' name='mult' method='post' action=''><table>".
"<tr><td>注意:最多选择".$vitem['max']."项,最少选择".$vitem['min']."项!</td></tr>";
for($i=0;$i<$itemcount;$i++){
$j=$i+1;
$out=$out."<tr><td><label><input type='checkbox' name='checkbox[]' value='".$i."' id='".$j."' />".$option[$i]."</label></td></tr>";
}
$out=$out."<tr><td><input type='submit' name='mutiSend' value='提交并查看结果'/> <input type='reset'/></td></tr>".
"</table></form>";
echo $out;
}
大部分内容与单选相同,只是在获取信息时专门获取多选的两个信息:max最多选项、min最少选项。并提示用户

b、后台处理

<?php
//多选投票
if(@$_POST['mutiSend']){
$ouser=@$_GET['user'];
$voteid=@$_GET['vid'];
if($ouser == ''){
echo "<script language='javascript'> alert('请先登录!'); </script>";
}else{
$sql="SELECT itemcount,item,num FROM votetitle where vid='".$voteid."'";
$votetitle=mysql_query($sql);
$vtitle=mysql_fetch_array($votetitle);

$sql2="select open from vote where vid='".$voteid."'";
$voteitem=mysql_query($sql2);
$vitem=mysql_fetch_array($voteitem);

$open="";
if($vitem[0]==0){
$open="alert('您无权查看投票结果!');location.href='./index.php?user=".$ouser."';";
}else{
$open="location.href='./result.php?user=".$ouser."&vid=".$voteid."';";
}

$itemcount=$vtitle['itemcount'];
$ballot=explode('*',$vtitle['num']);
$decide=$_POST['checkbox'];
for($i=0;$i<$itemcount;$i++){
for($j=0;$j<count($decide);$j++){
if($i==$decide[$j]){
$ballot[$i]=$ballot[$i]+1;
}
}
}
$num=implode('*',$ballot);
$sql2="UPDATE votetitle SET num = '".$num."' WHERE vid = '".$voteid."'";
mysql_query($sql2);
echo "<script language='javascript'>alert('投票成功!');".$open."</script>";
}
}
?>
大多与单选相似,通过循环的方式将表单提交的投票信息逐条添加到投票统计信息中。

逐条添加的循环过程:

for($i=0;$i<$itemcount;$i++){
for($j=0;$j<count($decide);$j++){
if($i==$decide[$j]){
$ballot[$i]=$ballot[$i]+1;
}
}
}
此处发现了一个bug,前台可以正确的获取选择的限制信息,但在后台却没有有效的甄别机制,所以这个max和min的数据并没有起到它的作用。要修复并不难,只需在后台获取max和min的信息并用一个if语句进行确认,因为时间关系,暂时不做修改,希望有机会可以不断的完善。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: