吳春艷
摘要:在線投票是目前做網(wǎng)上調(diào)查時(shí)非常實(shí)用的功能。該文介紹了PHP設(shè)計(jì)投票管理系統(tǒng)的設(shè)計(jì)方法和實(shí)現(xiàn)思路,并給出了具體的實(shí)現(xiàn)代碼。
關(guān)鍵詞:PHP;庫;數(shù)據(jù)庫
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2014)35-8429-02
Designing Online Voting with PHP Programming Language
WU Chun-yan
(Henan Traffic and Senior Technical school, Zhumadian 463000, China)
Abstract:The voting system is very popular in on survey.The article introduce the way and the realized thread with php programming language,and it provides the detailed codes.
Key words: PHP; library; database
1 概述
投票系統(tǒng)可以實(shí)現(xiàn)在線投票、在線查看投票的結(jié)果。該文在對(duì)投票系統(tǒng)中的關(guān)鍵技術(shù),如動(dòng)態(tài)生成投票主題及選項(xiàng)、通過3D餅形圖分析投票結(jié)果、有效地限制投票次數(shù)等方面進(jìn)行了介紹。
2 數(shù)據(jù)庫設(shè)計(jì)
PHP設(shè)計(jì)程序時(shí),往往采用MySQL作為后臺(tái)數(shù)據(jù)庫。目前MySQL是完全網(wǎng)絡(luò)化的跨平臺(tái)的關(guān)系數(shù)據(jù)管理系統(tǒng),具用體積小,速度快,源碼開放,安全性高等特點(diǎn)。本系統(tǒng)數(shù)據(jù)庫名稱tp,主要涉及兩張表。
2.1 投票主題表tpzt,如表1所示
2.2 單項(xiàng)投票選項(xiàng)數(shù)據(jù)表dxtpxx,如表2所示
3 程序?qū)崿F(xiàn)
3.1 動(dòng)態(tài)生成投票主題和選項(xiàng)
通過Web頁面來實(shí)現(xiàn)主題及選項(xiàng)的添加,實(shí)際上是將表單中的數(shù)據(jù)添加至數(shù)據(jù)庫表中。部分程序代碼如下。
<? Php
$cx=”select * from tpzt”
$jg=mysql_query($cx);
While($myrow=mysql_fetch_array($result)){
?>
…
If ($submiit=”單選” and $files[‘tppic][‘name]!=””) { //判斷是否單選,并且有圖片上傳
$tptp=$_FILES[‘tppic][‘size];
3.2 通過3D餅形圖分析投票結(jié)果
使用3D餅形圖能夠比較直觀地展示投票結(jié)果,3D餅圖的創(chuàng)建使用的是jpgraph類庫。Jpgraph是一個(gè)強(qiáng)大的繪圖組件,能根據(jù)用戶的需要繪制任意圖形。用戶只要提供用戶數(shù)據(jù),就可以調(diào)用繪圖函數(shù)把處理的數(shù)據(jù)填進(jìn)去自動(dòng)繪制。另外jpgraph需要類庫的支持,如果用戶 jpgraph類庫僅對(duì)當(dāng)前有效,只需將jpgraph壓縮包下的src文件夾中的全部文件復(fù)制到網(wǎng)站所在目錄的文件夾中即可。
應(yīng)用jpgraph創(chuàng)建3D餅形圖時(shí),首先需要連結(jié)數(shù)據(jù)庫,應(yīng)用include_once語句引用指定的文件,然后編寫代碼實(shí)現(xiàn)投票數(shù)量的統(tǒng)計(jì),最后創(chuàng)建Graph對(duì)象,設(shè)置字體及圖例的字體和畫布的位置,將圖形輸出。關(guān)鍵代碼如下。
<?php
Include(“conn/conn.php”)
Include_once(“jpgraph/jpgraph/jpgraph_pie.php”)
Include_once(“jpgraphp/jpgraph_3d.php”);
$query=mysql_0uery(“select sum(tbx) as tpm from tbdx where tbzt=$GET[votezt]”);
$graph=new PieGraph(650,300),auto);
$graph→SetShadow( ); //創(chuàng)建畫布陰影
$graph→title→Set(“應(yīng)用3D餅形圖統(tǒng)計(jì)優(yōu)秀負(fù)責(zé)人”);
$graph→title→SetFont(FF_SIMSUN,F(xiàn)S_BOLD);
$graph→legend→SetFont(FF-SIMSUN,F(xiàn)S_NORMAL); //設(shè)置圖例字體
$p2=new PiePlot3D($resultes) //創(chuàng)建3D餅形圖對(duì)象
$p2→SetLegends($vote_content);
.?>
3.3 使用Cookie投票限制
Cookie是一種能夠讓網(wǎng)站服務(wù)器把少量數(shù)據(jù)儲(chǔ)存到客戶端的硬盤或內(nèi)存,或是從客戶端的硬盤讀取數(shù)據(jù)的一種技術(shù)。使用Cookie控制重復(fù)投票的原理是:當(dāng)用戶使用投票系統(tǒng)時(shí),系統(tǒng)將判斷當(dāng)前客戶端的Cookie的值是否為空,若為空則可以進(jìn)行投票。關(guān)鍵代碼如下。
While(list($name,$value)=each($_post)){
$k+=$name;
If(is_numeric($name)==true) {
Mysql_qurery(“update tpdx set tps= tps+1 where tp tbid=”$name””);
}
If($k=0)
Echo “”;
}
Else { if ($v_flag=0) {
$sql=”update tp_jl set tp_jls=tp_jls+1 where tp_jlh=$r”;
Mysql_query($sql,$conn);
$_SESSION[tp]=1
3.5 使用IP 限制投票
Cookie和Session都是對(duì)投票的時(shí)間間隔進(jìn)行控制,并沒有真正完全對(duì)重復(fù)投票進(jìn)行控制,通過IP地址可以限制重復(fù)投票,它的主要原理:當(dāng)用戶在在客戶端投票時(shí),先獲取得IP地址,如果該IP地址存在,則說明 已經(jīng)進(jìn)行過投票。關(guān)鍵的代碼如下。
$ip=getenv(“REMMOTE_ADDR”); //獲取客戶端的IP地址
If($submit==true) {
If(tb_pb_h==””) {
Echo“