【php】使用jpgraph完成投票系統的普普通通使用者部分

來源:互聯網
上載者:User
【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】登入系統與輸出瀏覽者資訊》(點擊開啟連結),來現實


  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.