PHP網(wǎng)站開發(fā)項目式教程(微課版)(第2版)任務(wù)9 實現(xiàn)在線投票與網(wǎng)站計數(shù)功能_第1頁
PHP網(wǎng)站開發(fā)項目式教程(微課版)(第2版)任務(wù)9 實現(xiàn)在線投票與網(wǎng)站計數(shù)功能_第2頁
PHP網(wǎng)站開發(fā)項目式教程(微課版)(第2版)任務(wù)9 實現(xiàn)在線投票與網(wǎng)站計數(shù)功能_第3頁
PHP網(wǎng)站開發(fā)項目式教程(微課版)(第2版)任務(wù)9 實現(xiàn)在線投票與網(wǎng)站計數(shù)功能_第4頁
PHP網(wǎng)站開發(fā)項目式教程(微課版)(第2版)任務(wù)9 實現(xiàn)在線投票與網(wǎng)站計數(shù)功能_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

PHP網(wǎng)站開發(fā)項目式教程(微課版)(第2版)任務(wù)9實現(xiàn)在線投票與網(wǎng)站計數(shù)功能任務(wù)9-1運用文件系統(tǒng)函數(shù)

需要解決的核心問題fopen()函數(shù)中需要的參數(shù)有幾個?打開文件的模式有哪幾種?函數(shù)file_exists()的作用是什么?返回值是什么?從文本文件中讀取的漢字,如何將其編碼轉(zhuǎn)換為UTF-8?使用fgets()函數(shù)默認會讀取多少內(nèi)容?使用fwrite()函數(shù)寫完內(nèi)容之后要如何換行?9.1.1文件的打開與關(guān)閉1.打開文件——fopen()函數(shù)函數(shù)格式:fopen(filename,mode,include_path,context)

參數(shù)filename,必需,用于提供要打開文件的路徑和名稱。

參數(shù)mode,必需,用于指定打開文件時的讀或?qū)懛绞?,系統(tǒng)為該參數(shù)設(shè)置了多種不同的取值,本書只介紹常用的幾種取值。'r':以只讀方式打開,將文件指針指向文件頭。'r+':以讀寫方式打開,將文件指針指向文件頭。'w':以只寫方式打開,文件指針指向文件頭,打開的同時清除文件所有內(nèi)容,如果文件不存在,則嘗試建立文件。'a':以追加寫方式打開,文件指針指向文件末尾,若文件不存在,則嘗試建立文件。

函數(shù)fopen()的作用是打開指定的文件,若文件存在并且被打開,則返回一個句柄,否則返回false。2.判斷文件是否存在——file_exists()函數(shù)

在打開或使用某個文件之前,通常要判斷該文件是否存在,這樣才能確定是使用只讀或讀寫方式直接打開一個已經(jīng)存在的文件,還是以只寫方式在打開的同時創(chuàng)建該文件。

判斷文件是否存在需要使用函數(shù)file_exists()。

函數(shù)格式:file_exists(path)

參數(shù)path是必需的,指定要檢查、判斷的路徑。

該函數(shù)的返回值是布爾值,若指定的文件存在,則返回true,否則返回false。3.關(guān)閉文件——fclose()函數(shù)

對打開的文件進行的讀操作或者寫操作都完成之后,必須關(guān)閉文件,以釋放內(nèi)存,可使用fclose()函數(shù)完成文件的關(guān)閉操作。函數(shù)格式:fclose(int$handle)

參數(shù)$handle表示之前打開文件時返回的句柄。9.1.2文件的讀取與寫入1.讀取一行內(nèi)容——fgets()函數(shù)

函數(shù)fgets()可以從指定的文件中讀取當(dāng)前文件指針?biāo)傅囊恍袃?nèi)容。

函數(shù)格式:stringfgets(int$handle[,int$length])

參數(shù)$handle,必需,表示已經(jīng)打開的文件句柄。

參數(shù)$length,可選,指定返回的最大字節(jié)數(shù),考慮到文本文件中的行結(jié)束符,最多可以返回$length-1字節(jié)的字符串,若沒有指定該參數(shù),則默認為1024字節(jié)。2.判斷文件指針是否到達文件末尾——feof()函數(shù)

在讀取文件內(nèi)容時,經(jīng)常要判斷文件指針是否已經(jīng)到達文件末尾,若已經(jīng)到達文件末尾,則讀取過程必須結(jié)束??墒褂煤瘮?shù)feof()判斷文件指針是否到達文件末尾。

函數(shù)格式:feof(int$handle)

參數(shù)$handle表示之前打開文件時返回的句柄。3.寫入文件——fwrite()函數(shù)

文件打開之后,要向文件中寫入內(nèi)容通??墒褂胒write()函數(shù)。

函數(shù)格式:fwrite($handle,$string[,$length])

參數(shù)$handle,必需,表示之前打開的文件句柄。

參數(shù)$string,必需,表示要向文件中寫入的內(nèi)容。

參數(shù)$length,可選,若指定該參數(shù),則寫入的內(nèi)容是$string串中前$length個字節(jié)的數(shù)據(jù);若$length超出了$string中字符串的長度,則將變量$string的內(nèi)容全部寫進去。任務(wù)9-2實現(xiàn)在線投票功能

需要解決的核心問題如何將讀取出來的數(shù)字文本轉(zhuǎn)換為數(shù)字?如何在文件中保存不同對象的票數(shù)?如何獲取并修改相應(yīng)的票數(shù)?如何使用Session禁止重復(fù)投票?禁止之后還存在什么問題?如何使用Cookie禁止重復(fù)投票?9.2.1簡單在線投票功能的實現(xiàn)1.頁面布局結(jié)構(gòu)與樣式定義

整個頁面內(nèi)容包含在一個父元素div中,使用類選擇符.wdiv定義,具體樣式要求為:寬度為1080px,高度為900px,填充為0,上下邊距為0,左右邊距為auto。

每幅圖片以及圖片下方的票數(shù)、百分比等信息都放在一個個子元素div中,使用類選擇符.ndiv定義,具體樣式要求為:寬度為250px,高度為300px,填充為0,上邊距和右邊距都為0,下邊距為10px,左邊距為20px,向左浮動,div中的文本內(nèi)容在水平方向上居中對齊,文本字號為12pt。圖9-2

在線投票頁面效果

元素<divclass='ndiv'>內(nèi)部下方的文本有兩行,使用兩個段落標(biāo)簽控制。使用包含選擇符.ndivp定義段落的上邊距為5px,其他邊距為0。

元素<divclass='ndiv'>內(nèi)部所有圖片的邊框都使用包含選擇符.ndivimg設(shè)置為0,即{border:0;}。這是因為在頁面中,所有圖片都要做成供用戶單擊來投票的超鏈接形式,在大部分瀏覽器中,做成超鏈接熱點的圖片都會帶上藍色的邊框,在頁面中不太美觀,將其設(shè)置為0即可解決該問題。

總結(jié):整個頁面的布局就是在父元素<divclass='wdiv'>中分兩行向左浮動,每行6個子元素,共排列了12個子元素<divclass='ndiv'>。2.功能要求

要創(chuàng)建的頁面文件是vote.php。

單擊來投票的頁面需要包含以下5個方面的操作。(1)素材中的圖片文件命名方式必須是有規(guī)律的,素材的主文件名都是“img+數(shù)字序號”的形式,數(shù)字序號從0開始,而擴展名則可以是.jpg或者.gif,圖片都要以超鏈接的形式存在。(2)每幅圖片下面都要顯示相應(yīng)的票數(shù)信息,除此之外還要顯示該票數(shù)占總票數(shù)的百分比。(3)為了能夠保存每幅圖片的票數(shù),要求即便是因服務(wù)器突然出現(xiàn)故障停止運行,當(dāng)服務(wù)器再度運行之后,也不會將原有票數(shù)清零,必須使用文本文件記錄每幅圖片的票數(shù),而不能使用簡單的變量或者數(shù)組的形式保存。(4)對于每幅圖片及其下面的票數(shù)信息,都是通過for循環(huán)結(jié)構(gòu)輸出的,使用這種設(shè)計方法在圖片隨意增多或者減少時,可以方便地進行控制,而不需要調(diào)整頁面的任何內(nèi)容。(5)用戶單擊每一幅圖片時,都要向鏈接的頁面文件vote.php提交這幅圖片對應(yīng)的序號,保證完成對這幅圖片的投票,同時在頁面中可看到變化后的票數(shù)。3.頁面代碼9.2.2使用Session禁止重復(fù)投票

上面設(shè)計的實現(xiàn)簡單投票功能的頁面存在一個很嚴(yán)重的問題,任何用戶打開頁面之后,都可以任意單擊超鏈接不斷投票。為了避免這個問題,需要增加Session機制的應(yīng)用,對程序進行優(yōu)化,禁止用戶打開頁面后重復(fù)投票。1.功能說明

將vote.php文件另存為voteSession.php文件,在文件中增加Session機制的應(yīng)用,實現(xiàn)下面3個功能。(1)在頁面代碼開始處使用session_start()函數(shù)啟用Session。(2)當(dāng)用戶單擊超鏈接投票、系統(tǒng)獲取到投票信息之后,設(shè)置系統(tǒng)數(shù)組元素$_SESSION['voted']=1。(3)當(dāng)用戶試圖再次單擊超鏈接或者以刷新頁面的方式繼續(xù)投票時,通過代碼isset($_SESSION['voted'])判斷數(shù)組元素是否存在,若已經(jīng)存在,則輸出腳本代碼提示用戶已經(jīng)投票不可再投,然后直接結(jié)束頁面文件的執(zhí)行。2.增加與修改代碼

需要對文件的兩個位置進行修改。

當(dāng)用戶重復(fù)投票時,頁面的運行效果如圖9-3所示。圖9-3

重復(fù)投票時彈出消息框9.2.3使用Cookie禁止重復(fù)投票

請大家嘗試:

運行頁面文件voteSession.php,進行一次投票之后,在當(dāng)前頁面繼續(xù)刷新或者再次單擊超鏈接能否繼續(xù)投票?

關(guān)閉當(dāng)前瀏覽器,重新打開之后再次運行文件,是否可以繼續(xù)投票?

也就是說,使用Session禁止重復(fù)投票的頁面存在什么問題?

問題解答請看下面的內(nèi)容。

Session是有“生命周期”的,在關(guān)閉瀏覽器后Session會自動失效,Session失效之后,創(chuàng)建的數(shù)組元素$_SESSION['voted']就不復(fù)存在。因此只要用戶重新打開瀏覽器窗口再次運行就可以繼續(xù)投票,這在投票系統(tǒng)中是絕對不允許的。

使用Cookie可以解決上述問題,Cookie是用戶瀏覽網(wǎng)站時由服務(wù)器寫入用戶主機硬盤的文本文件,其中保存了用戶訪問網(wǎng)站時的一些私有信息。當(dāng)用戶下一次再訪問該網(wǎng)站時,可以使用PHP文件讀取這些信息,用于進行各種判斷。簡而言之,Cookie是一種在本地瀏覽器端儲存數(shù)據(jù)并以此來跟蹤和識別用戶的機制。1.創(chuàng)建Cookie

在PHP中創(chuàng)建Cookie需要使用setcookie()函數(shù),其語法格式如下。setcookie(name,value,expire,path,domain,secure)

參數(shù)name,必需,設(shè)置Cookie的名稱。

參數(shù)value,必需,設(shè)置Cookie的值。

參數(shù)expire,可選,設(shè)置Cookie的有效期,這是一個UNIX時間戳,即從UNIX紀(jì)元開始的秒數(shù),對于expire參數(shù)的設(shè)置一般通過當(dāng)前時間戳(用time()表示)加上相應(yīng)的秒數(shù)來確定。例如,time()+1200表示Cookie將在20分鐘之后失效。若不設(shè)置expire參數(shù),則Cookie將在瀏覽器關(guān)閉時立即失效。

參數(shù)path,可選,表示Cookie在服務(wù)器上的有效路徑,默認值為設(shè)定Cookie的當(dāng)前目錄。

參數(shù)domain,可選,表示Cookie在服務(wù)器上的有效域名。例如,要使Cookie在域名下的所有子域都有效,該參數(shù)應(yīng)該設(shè)置為.。

參數(shù)secure,可選,表示Cookie是否允許通過安全的HTTPS(HypertextTransferProtocolSecure,超文本傳輸安全協(xié)議)傳輸。2.訪問Cookie

通過setcookie()函數(shù)創(chuàng)建的Cookie會作為數(shù)組元素存放在系統(tǒng)數(shù)組$_COOKIE中,因此可以直接通過數(shù)組元素來訪問已經(jīng)創(chuàng)建的Cookie。3.刪除Cookie

使用setcookie()函數(shù)創(chuàng)建Cookie時通常都會指定一個“過期時間”,到了過期時間,Cookie將被自動刪除,若在過期之前想要刪除Cookie,則可以使用setcookie()函數(shù)重新創(chuàng)建Cookie,將其過期時間設(shè)置為過去的時間。4.使用Cookie禁止重復(fù)投票任務(wù)9-3網(wǎng)站計數(shù)功能的實現(xiàn)

需要解決的核心問題如何統(tǒng)計訪問總量、今日訪問量、當(dāng)月訪問量等信息?如何將文本數(shù)字改為數(shù)值數(shù)字?

創(chuàng)建頁面文件wzjsq.php,在其中統(tǒng)計并輸出本頁面的訪問總量和今日訪問量,效果如圖9-4所示。圖9-4

網(wǎng)站計數(shù)器運行效果1.功能說明

頁面要顯示訪問總量和今日訪問量,需要使用的信息有3項,分別是訪問總量、今日訪問量和用戶訪問網(wǎng)站時的日期,使用文本文件counter.txt保存這3項信息。

保存日期的目的是讀取該日期之后

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論