首页 > php入门 > PHP新手上路(九) 投票系统

PHP新手上路(九) 投票系统

建设一个简单交互的网站(五)

8. 投票系统

  在许多时候,我们需要收集上网者和网友们的意见。例如:新版页面与旧版页面的比较;对某一事情的看法;对体育比赛结果的预测等等。这时候,你需要一个非常有效的网上调查系统。使用PHP就可以非常方便地实帜愕恼庖还瓜搿?

8.1 投票系统(mypolls.php3):

<?php
$status=0; 
if(isset($polled)&&($polled=="c-e")){ 
$status=1; 
} 
#echo "$status"; 
if(isset($poll)&&($status==0)){ 
setcookie("polled","c-e",time() 86400,"/");#time=24h 
} 
?> 
<html> 
<head> 
<title>新版页面调查</title> 
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 
<style type="text/css"> 
<!-- 
.tb { border="1" bordercolor="#009933" cellspacing="0" font-size: 9pt; color: #000000} 
.head { font-family: "宋体"; font-size: 12pt; font-weight: bold; color: #009933; text-decoration: none} 
.pt9 { font-size: 9pt} 
a.p9:link { font-size: 9pt; color: #000000; text-decoration: none} 
a.p9:visited { font-size: 9pt; color: #000000; text-decoration: none } 
a.p9:hover { font-size: 9pt; color: #FF0000; text-decoration: underline} 
a.p9:active { font-size: 9pt; color: #FF0000; text-decoration: underline } 
--> 
</style> 
</head> 
<body bgcolor="#FFFFFF"> 
<div class="head">与旧版页面相比较您觉得新版页面:</div><br> 
<? 
if(!isset($submit)){ 
?> 
<form action="myPolls.php3" method="get"> 
<input type="radio" name="poll_voteNr" value="1" checked > 
<span class="pt9">信息量更大</span> <br> 
<input type="radio" name="poll_voteNr" value="2" > 
<span class="pt9">网页更精美</span> <br> 
<input type="radio" name="poll_voteNr" value="3" > 
<span class="pt9">没什么改进</span> <br> 
<input type="radio" name="poll_voteNr" value="4" > 
<span class="pt9">其它</span> <br> 
<input type="submit" name="submit" value="OK"> 
<input type="hidden" name="poll" value="vote"> 
<A HREF="myPolls.php3?submit=OK" class="p9">查看调查结果</A> 
</form> 
<?php
/*
如果想增加其它的选项可直接加上即可 
*/
} else {
    $descArray = array(
        1 => "信息量更大",
        2 => "网页更精美",
        3 => "没什么改进",
        4 => "其它"
    );
    $poll_resultBarHeight = 9; // height in pixels of percentage bar in result table
    $poll_resultBarScale = 1; // scale of result bar (in multiples of 100 pixels)
    $poll_tableHeader = "<table border=1 class=\"tb\">";
    $poll_rowHeader = "<tr>";
    $poll_dataHeader = "<td align=center>";
    $poll_dataFooter = "</td>";
    $poll_rowFooter = "</tr>";
    $poll_tableFooter = "</table>";
    $coutfile = "data.pol";
    $poll_sum = 0;
    // read counter-file
    if (file_exists($coutfile)) {
        $fp = fopen($coutfile, "rt");
        while ($Line = fgets($fp, 10)) {
            // split lines into identifier/counter
            if (ereg("([^ ]*) *([0-9]*)", $Line, $tmp)) {
                $curArray[(int)$tmp[1]] = (int)$tmp[2];
                $poll_sum = (int)$tmp[2];
            }
        }
        // close file
        fclose($fp);
    } else { //
        for ($i = 1; $i <= count($descArray); $i) {
            $curArray[$i] = 0;
        }
    }
    if (isset($poll)) {
        $curArray[$poll_voteNr];
        $poll_sum;
    }
    echo $poll_tableHeader;
    // cycle through all options编历数组
    reset($curArray);
    while (list($K, $V) = each($curArray)) {
        $poll_optionText = $descArray[$K];
        $poll_optionCount = $V;
        echo $poll_rowHeader;
        if ($poll_optionText != "") {
            echo $poll_dataHeader;
            echo $poll_optionText;
            echo $poll_dataFooter;
            if ($poll_sum) $poll_percent = 100 * $poll_optionCount / $poll_sum;
            else $poll_percent = 0;
            echo $poll_dataHeader;
            if ($poll_percent > 0) {
                $poll_percentScale = (int)($poll_percent * $poll_resultBarScale);
            }
            printf(" %.2f %% (%d)", $poll_percent, $poll_optionCount);
            echo $poll_dataFooter;
        }
        echo $poll_rowFooter;
    }
    echo "总共投票次数:<font color=red> $poll_sum</font>";
    echo $poll_tableFooter;
    echo "<br>";
    echo "<input type=\"submit\" name=\"Submit1\" value=\"返回主页\" onClick=\"javascript:location='http://gophp.heha.net/index.html'\">";
    echo " <input type=\"submit\" name=\"Submit2\" value=\"重新投票\" onClick=\"javascript:location='http://gophp.heha.net/mypolls.php3'\">";
    if (isset($poll)) {
        // write counter file
        $fp = fopen($coutfile, "wt");
        reset($curArray);
        while (list($Key, $Value) = each($curArray)) {
            $tmp = sprintf("%s %dn", $Key, $Value);
            fwrite($fp, $tmp);
        }
        // close file
        fclose($fp);
    }
}
?> 
</body> 
</html>

注释:从上面我们可以看出该投票系统的基本过程: 

1、打开文件取得数据到数组$curArray(文件不存在则初始化数组$curArray) 

2、编历数组,处理数据得到所需值 

3、计算百分比,控制统计bar图像宽度 

4、将数据保存到"data.pol"中

这里有一点是需要注意:这里的data.pol文本文件需要有写权限。


文章链接:http://www.phprm.com/start/fs9.html

随便收藏,请保留本文地址!

标签:新手上路

相关文章

发表留言