分析:
我們利用一個檔案(data.dat)來儲存投票欄目.每個欄目佔據一行.
這樣一來,便可隨意加入和減去想要投票的欄目.
我們再利用一個檔案(votes.dat)來儲存我們的投票結果.
並紀錄最近一位投票者的IP地址,簡單的防止一人多投.
所以,您應該在該程式目錄下自行建立兩個檔案data.dat和votes.dat
程式運行過程部分
程式運行時應該先有一個投票的HTML表單,等待投票.
當有人在HTML表單上投票時,判斷它的IP是否為最近一位投票者的IP,
如果此人剛剛投過票,則兩個值應該相等,顯示"您已投過票了,謝謝您的參與!"
如果此人沒投過票,則兩個值不等,將它的投票寫入檔案(votes.dat)
(這裡得到投票者的IP方法是:Web客戶機在對伺服器發送請求時需要提供一個表識,
這個表識就儲存在環境變數REMOTE_ADDR裡,我們引用它就可以了.)
最後是顯示投票結果,通常我們是以"橫條圖表+百分數"來顯示投票情況.
所以,我們要選擇一個顏色單一的矩形圖形,以適應橫向縮放的要求.
--------------------------------------------------------------------------------
程式碼部分 可下載程式代碼
//投票欄目隱藏檔,您可變更檔名
$data="data.dat";
//投票結果儲存檔案
$votes="votes.dat";
//用以顯示投票結果比例的圖形檔案名稱圖形檔案名稱,
//用單一顏色的矩形較好,方便投票結果橫向縮放,
//自行上傳到本程式目錄下
$path_img="vote.gif";
//投票標題
$poll_name="您喜歡我的哪個欄目?";
// 以下部分不需改動 //
//開啟投票欄目檔案,並以數組的形式將全部內容存在變數$dataf中備用
$dataf=file($data);
if ($go !=1)
{
//顯示投票程式表單
echo "
$poll_name
n";
echo "";
echo "查看結果";
}
else
{
// $go==1 表示有人投票, // 現在將投票情況以另外一種方式從檔案中讀出 $file_votes=fopen($votes, "r");
$line_votes=fgets($file_votes, 255);
fclose($file_votes);
// 並將資料按指定的字串切開,再將字串傳回到陣列變數中
$single_vote=explode("|", $line_votes);
//準備寫入投票結果
if ($result!=1)
{
//檢查IP地址是否重複
$file_votes=file($votes, "r");
if ($REMOTE_ADDR == $file_votes[1])
{
echo "您已投過票了,謝謝您的參與! ";
exit;
}
//如果IP不重複,則執行以下程式
$ficdest=fopen($votes, "w");
for ($i=0; $i<=count($dataf)-1; $i++)
{
//判斷投了那一個欄目
if ($i == $vote)
{
$single_vote[$i]+=1;
}
//將資料寫迴文件
fputs($ficdest, "$single_vote[$i]|");
}
//寫入投票者IP
fputs($ficdest, "n$REMOTE_ADDR");
fclose($ficdest);
$result=1; //投票成功
}
//寫入投票結果後並顯示投票結果
if ($result==1)
{ echo "
"; for ($i=0; $i<=count($dataf)-1; $i++) { //取得投票總數 $tot_votes+=$single_vote[$i]; } for ($i=0; $i<=count($dataf)-1; $i++) { //計算百分比 $stat[$i]=$single_vote[$i]/$tot_votes*100; echo "
"; echo "$dataf[$i] |
"; echo " "; //輸出百分數 printf("%.1f", "$stat[$i]"); echo "% |
"; //輸出本欄目投票數 echo "$single_vote[$i]"; echo " |
"; } echo "
";
echo "總投票數:$tot_votes ";
}
}
?>