【php】使用jpgraph完成投票系統的普通使用者部分
本文接上一篇《【php】投票系統管理員部分,增加投票與刪除投票》(點擊開啟連結)
上次三個連結只完成了管理員部分的兩個
現在完成最後的一個普通使用者這一個,同樣是沒有登入系統部分,請自行補充
一、基本目標
投票系統的普通使用者部分如所示:
首先顯示現存的投票列表給使用者,之後,點擊進入其中一個投票,能夠投票
投票皆為單選,不設定為多選,當然,你設定為多選也行,反正每一頁都是一個表單,
點擊“投票”按鈕則,詢問使用者是否確定,是則投票成功哦,否則不發生任何事
當投票的任何一項都大於1時,則彈出兩個統計圖,一個柱狀圖與餅狀圖,表示投票人數與比例
二、基本思想
柱狀圖與拼餅圖用Jpgraph來做
Jpgraph的下載與安裝與其他外掛程式類似,把需要的東西拖到下載目錄就可以了
首先開啟Jpgraph的官網(點擊開啟連結)選擇Download->Download Jpgraph
之後選擇第一個就可以,我也為大家上傳了一份(點擊開啟連結)
這東西雖然不是zip或者rar來結尾,但用最新的winrar能夠開啟並解壓,解壓之後把裡面的src放到網站目錄,並改名為jpgraph檔案夾就可以詳細可以看上一篇《【php】投票系統管理員部分,增加投票與刪除投票》(點擊開啟連結)的目錄結構
三、製作過程
1、voteindex.php
這是一個顯示所有投票列表的頁面,比刪除投票列表頁面delvote.php更加簡單,沒有刪除按鈕
注意給查詢出來的每一個超級連結,附上?get尾碼,通過get方法,給vote.php傳遞使用者到底開啟那一個投票的參數
投票投票系統
";$i++;}mysql_close($con);?>返回
2、vote.php
用request方法拿到voteindex.php傳遞過來的id參數就開始工作了
查處該投票的投票標題與投票描述與各個子選擇的各種屬性,建立一個表單,
並且要構造一個每個子選項的得票數,類似與?opt1=1&&opt2=99&&opttotal=2的字串附在引入圖片的連結後面,其中opttotal是本投票存在多少選項。如果此投票僅2個選項,那麼opttoal=2。這裡是為jpgraph的工作需要。詳情請看代碼:
<?phpecho "${ptitle}";?>返回
這個頁面同樣存在一定小問題,如果使用者沒有選擇任何選項,就點擊投票沒有空值處理,
具體可以在前台,用javascript處理一下,具體可以參考《【JavaScript】表單即時驗證,不成功不讓提交》(點擊開啟連結)
3、jpgraph.php
這一頁是用來畫柱狀圖,然後再被vote.php用img標籤引用,具體看下面代碼:
SetScale("textlin");//下面兩行是為了設定樣式的,false與true有不同的樣式$graph->SetBox(false);$graph->ygrid->SetFill(false);//y軸的4個值,分別為子選項最大得票數的0,1/3,2/3,1$graph->yaxis->SetTickPositions(array(0,$optmaxcount/3,$optmaxcount*2/3,$optmaxcount));//下三行意思是x軸的柱子長度是$optarr的數組的第0項,第1項……$b1plot = new BarPlot($optarr);$gbplot = new GroupBarPlot(array($b1plot));$graph->Add($gbplot);//柱子的邊線為白色$b1plot->SetColor("white");//柱子顏色分別為#aa0000,#00aa00……如果還有$b1plot->SetFillColor(array('#aa0000','#00aa00','#0000aa','#aaaa00','#aa00aa','#00aaaa','#000000','#cc0000','#00cc00','#0000cc'));//標題為中文需要如下寫$graph->title->SetFont(FF_SIMSUN,FS_BOLD);$graph->title->Set(iconv("UTF-8","gb2312","得票情況"));//指定動作$graph->xaxis->SetTickLabels($xaxisarr);$graph->Stroke();?>
4、jppie.php
這是用來畫餅狀圖的,總體來說比畫柱狀圖的jpgraph.php簡單一點,
部分的代碼原理與jpgraph.php是一樣的
title->SetFont(FF_SIMSUN,FS_BOLD);$graph->title->Set(iconv("UTF-8","gb2312","得票比率"));//不用自己計算比率,直接塞進去,就會自動計算$p1 = new PiePlot($optarr);$graph->Add($p1);$p1->SetSliceColors(array('#aa0000','#00aa00','#0000aa','#aaaa00','#aa00aa','#00aaaa','#000000','#cc0000','#00cc00','#0000cc'));//把餅狀圖放到350x250畫布中的橫向50%,縱向60%的位置$p1->SetCenter(0.5,0.6);$graph->Stroke();?>
通過上述的兩個處理步驟,在首頁面vote.php用img標籤引入這個兩個php,實質為映像的頁面就好
5、votehandel.php
這是使用者在投票頁面,選擇完一個選項之後,點確定投票的頁面
搞完最難的jpgraph,這裡就不難了,
就操作資料庫,把votechildren表中,相應的子選項,用update語句把它的得票數加1就可以了
處理投票
四、展望
自此,連同《【php】投票系統管理員部分,增加投票與刪除投票》(點擊開啟連結),整個投票系統的核心骨就完成了
需要的是避免sql注入與javascript一些空值處理還有同xajax技術來驗證是否重複等,
加上登入系統,與用server對象取走使用者ip來防止重複投票,這方面的技術可以參考我之前的《【php】登入系統與輸出瀏覽者資訊》(點擊開啟連結),來現實