好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

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

 8. 投票系统

在许多时候,我们需要收集上网者和网友们的意见。例如:新版页面与旧版页面的比较;对某一事情的看法;对体育比赛结果的预测等等。这时候,你需要一个非常有效的网上调查系统。

8.1 投票系统(mypolls.php3):

<?   $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>   <?   /* 如果想增加其它的选项可直接加上即可    */   } 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文本文件需要有写权限。

 

查看更多关于PHP新手上路(九) 投票系统的详细内容...

  阅读:47次