PHP網(wǎng)站開發(fā)項目式教程任務9課件_第1頁
PHP網(wǎng)站開發(fā)項目式教程任務9課件_第2頁
PHP網(wǎng)站開發(fā)項目式教程任務9課件_第3頁
PHP網(wǎng)站開發(fā)項目式教程任務9課件_第4頁
PHP網(wǎng)站開發(fā)項目式教程任務9課件_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、任務九 在線投票與網(wǎng)站計數(shù)功能實現(xiàn)需要學習的主要知識點:文件系統(tǒng)中常用的函數(shù)功能介紹使用文件操作完成在線投票功能使用session禁止反復投票使用cookie禁止在同一主機中的重復投票網(wǎng)站計數(shù)器功能的實現(xiàn)任務說明在各類網(wǎng)站上經(jīng)常會出現(xiàn)各種在線投票頁面,例如評選我最喜愛的老師、十大杰出青年、我最喜愛的美食、我最喜愛的小明星等等。還有很多網(wǎng)站中都對訪客人數(shù)進行統(tǒng)計,例如統(tǒng)計訪問總量、本月訪問量、本周訪問量和今日訪問量等。要完成上述功能,需要將每個票數(shù)或者訪問量等數(shù)據(jù)都保存在服務器端的文本文件中,這需要使用PHP提供的各種文件訪問操作函數(shù)。打開文件fopen()函數(shù)fopen()函數(shù)的格式:fope

2、n(filename,mode,include_path,context);函數(shù)fopen()的作用打開參數(shù)filename指定的文件,若是文件存在并且被打開,則返回一個句柄,否則返回false。fopen()函數(shù)參數(shù)說明filename:必選參數(shù),用于提供要打開文件的路徑和名稱。mode:必選參數(shù),用于指定打開文件時的讀或?qū)懛绞?,系統(tǒng)為該參數(shù)設置了多種不同的取值,這里只介紹常用的四種。(1)r:以只讀方式打開,將文件指針指向文件頭;(2)r+:以讀寫方式打開,將文件指針指向文件頭;(3)w:以只寫方式打開,文件指針指向文件頭,打開同時清除文件所有內(nèi)容,如果文件不存在,則嘗試建立文件;(4)a

3、:以追加寫方式打開,文件指針指向文件末尾,若文件不存在,將嘗試建立文件。參數(shù)include_path和context都是可選參數(shù),這里不介紹。fopen()函數(shù)應用示例創(chuàng)建文件file.php,使用代碼$fp=fopen(file.txt,r)嘗試打開文本文件file.txt,若是打開成功,則輸出“成功打開文件file.txt”,否則輸出“無法打開文件file.txt”注意:文件file.txt是不存在的運行觀察效果之后,將$fp=fopen(file.txt,r)改為$fp=fopen(file.txt,w)之后,再次運行頁面觀察效果關閉文件fclose()函數(shù)打開的文件讀或?qū)懖僮鞫纪瓿芍?/p>

4、,必須要關閉文件,釋放內(nèi)存,使用fclose()函數(shù)完成。格式:fclose(int $handle)參數(shù)$handle表示之前打開文件時返回的句柄。例如,代碼fclose($fp)的作用是關閉句柄$fp所指向的文件。判斷文件是否存在file_exists()函數(shù)在打開或使用某個文件之前,通常要判斷該文件是否存在,這樣才能確定是使用讀方式直接打開一個已經(jīng)存在的文件,還是以寫方式創(chuàng)建并打開一個不存在的文件。判斷文件是否存在,使用函數(shù)file_exists()。格式為:file_exists(path)參數(shù)path是必需的,指定要檢查判斷的路徑。該函數(shù)的返回值是布爾值,若指定的文件存在,則返回TR

5、UE,否則返回FALSE。file_exists()函數(shù)應用小示例修改文件file.php,判斷文件file.txt是否存在,若是不存在,則使用w方式在打開時創(chuàng)建該文件,創(chuàng)建完成后立即關閉文件,重新使用r方式打開文件第一次運行:前提條件是file.txt不存在,在運行結(jié)束后創(chuàng)建該文件,在文件夾中打開該文件,適當添加內(nèi)容“這是文件的內(nèi)容”,保存關閉文件第二次運行,運行之后重新打開文件,觀察文件內(nèi)容是否發(fā)生變化,以確定是否又重新創(chuàng)建了文件fgets()函數(shù)函數(shù)fgets()可以從指定的文件中讀取當前文件指針所指的一行(一個段落)內(nèi)容,讀取結(jié)束的標志是遇到rn回車換行字符格式:string fget

6、s(int $handle, int $length)參數(shù):$handle:必需的,表示已經(jīng)打開的文件句柄;$length:可選的,指定了返回的最大字節(jié)數(shù)(是指當前段落中),最多可以返回的是$length-1個字節(jié)的字符串,若是沒有指定該參數(shù),默認為1024個字節(jié)。若$length超出了段落中字節(jié)個數(shù),則讀取實際段落內(nèi)容fgets()函數(shù)應用示例在file.txt文件中添加圖示內(nèi)容形式(每行10個字母),修改file.php文件,在以讀方式打開file.txt文件之后,依次使用fgets($fp)、fgets($fp,4)和fgets($fp)將獲取的內(nèi)容分別使用變量$str1、$str2、$

7、str3保存,換行輸出三個變量的內(nèi)容,觀察效果并思考原因使用fgets($fp,11)、fgets($fp)和fgets($fp)替換上面的fgets()函數(shù),重新運行觀察效果并思考原因。若是將11換做12呢,再換做13呢?feof()函數(shù)在讀取文件內(nèi)容時,經(jīng)常要判斷文件指針是否已經(jīng)到達文件末尾,若是已經(jīng)到達末尾,讀取過程必須要結(jié)束,使用函數(shù)feof()判斷文件指針是否到達文件末尾。格式:feof(int $handle)參數(shù)$handle表示之前打開文件時返回的句柄。文件操作小實例假設存在文本文件a.txt,里面有三行任意的內(nèi)容,創(chuàng)建頁面文件read.php,打開文件a.txt,使用循環(huán)結(jié)構

8、逐行讀出其中的內(nèi)容并輸出。代碼如圖所示:思考問題:第6行代碼是否可以使用代碼echo nl2br($line)取代?寫入文件fwrite()函數(shù)文件打開之后,要向文件中寫入內(nèi)容,通常會選用fwrite()方法。格式:fwrite($handle, $string ,$length)參數(shù):handle:必需的,表示之前打開的文件句柄;$string:必需的,表示要向文件中寫入的內(nèi)容;$length:可選的,若是指定該參數(shù),則寫入的內(nèi)容是$string串中前$length個字節(jié)的數(shù)據(jù);若是$length超出了$string的長度,則將變量$string的內(nèi)容全部寫進去。注意:該函數(shù)寫完內(nèi)容之后,并

9、不換行。fwrite()函數(shù)應用小示例創(chuàng)建頁面文件write.php,以寫方式打開并創(chuàng)建文件b.txt,向其中寫入兩行內(nèi)容分別是“這是第一行內(nèi)容”和“這是第二行內(nèi)容”。代碼如下:運行效果圖示問題思考:b.txt中內(nèi)容為什么沒有換行?如何解決該問題?若是在寫入串的后面增加標記是否起作用? 因為fwrite()函數(shù)寫完內(nèi)容之后,不能自動換行,需要在寫入內(nèi)容的后面綴上能夠在文本文件中起到回車作用的回車換行符rn,即,需要將第3行和第4行代碼修改為:fwrite($fp,這是第一行內(nèi)容rn);fwrite($fp,這是第二行內(nèi)容rn); 這里不能通過增加標記完成文件內(nèi)容的換行,標記只能在瀏覽器環(huán)境下才

10、能被解釋執(zhí)行,放在文本文件中只能顯示為標記。追加寫的應用以追加寫方式打開文件b.txt,添加內(nèi)容“這是追加進來的內(nèi)容”簡單在線投票功能實現(xiàn)對圖示的在線投票頁面的功能和布局結(jié)構進行說明簡單在線投票功能說明簡單在線投票,是指任何用戶登錄到投票頁面以后,都可以不受任何限制的進行任意次數(shù)的投票頁面布局結(jié)構與樣式定義整個頁面內(nèi)容包含在一個大盒子中,使用class類選擇符.wdiv定義,具體樣式要求:寬度1080px,高度620px,填充0,上下邊距0,左右邊距auto;每幅圖片以及圖片下方的票數(shù)、百分比、姓名等信息都放在一個小盒子中,使用class類選擇符ndiv定義,具體樣式要求:寬度160px,高度

11、300px,填充0,上邊距和右邊距都是0,下邊距10px,左邊距20px,向左浮動,盒子中的文本內(nèi)容在水平方向居中,文本字號12pt;頁面布局結(jié)構與樣式定義盒子ndiv內(nèi)部下方的文本有兩行,使用兩個段落標記控制,使用包含選擇符.ndiv p定義段落的上邊距為5px,其它邊距為0;盒子ndiv內(nèi)部所有圖片的邊框都使用包含選擇符.ndiv imgborder:0;設置為0,這是因為在頁面中所有圖片都要做成供用戶點擊來投票的超鏈接形式,在大部分瀏覽器中,做成超鏈接熱點的圖片都會帶上藍色的邊框,在頁面效果中不太美觀,將其設置為0即可解決該問題。圖片寬度和高度分別是160px和240px??偨Y(jié):整個頁面

12、的布局就是在作為父元素的盒子wdiv中分兩行向左浮動共排列了12個子元素ndiv。樣式代碼如圖創(chuàng)建文件vote.php,在首部增加如下樣式代碼在線投票功能要求-1(1)素材中的圖片文件命名方式必須是有規(guī)律的,這里提供素材的主文件名都是“img+數(shù)字序號”的方式,數(shù)字序號從0開始,而擴展名則可以是.jpg或者.gif,頁面中的圖片元素都要以超鏈接的形式存在,超鏈接指向的文件都是vote.php自身。(2)每幅圖下面都要顯示相應的得票數(shù)和姓名信息,另外還添加了該票數(shù)在總票數(shù)中的百分比。所有圖片對應的姓名信息,需要使用一個數(shù)組來保存,保存時,姓名對應的下標必須與圖片文件名中的序號是一致的。22在線投

13、票功能要求-2(3)為了能夠保存每幅圖的得票數(shù),做到即便是服務器突然出現(xiàn)故障,再度運行之后,也不會將原有票數(shù)全部清0,必須要使用文本文件記錄每幅圖的票數(shù),而不能使用簡單的變量或者數(shù)組的形式來保存,簡單的變量或數(shù)組存在的問題是,一旦頁面重新運行,保存的數(shù)據(jù)都會不復存在,因為變量與數(shù)組的生存周期就是程序的一次運行時間;但是同樣也沒有必要選用數(shù)據(jù)庫方式來保存,這樣會使問題變得過于復雜。23在線投票功能要求-3在文本文件中,一幅圖的票數(shù)占用一行,順序與圖片文件名稱中的序號也要保持一致,這樣方便進行票數(shù)的獲取和更新操作。這里使用的文本文件是vote.txt,文本文件可以不用事先創(chuàng)建,由參與投票的第一個用

14、戶在運行頁面文件時創(chuàng)建,因此在文件代碼開始必須要判斷文本文件vote.txt是否存在,不存在則采用fopen()函數(shù)以只寫方式打開來創(chuàng)建。每個用戶在打開頁面時,程序都要將當前每幅圖的票數(shù)投票從vote.txt文件中讀取出來,在完成投票之后,再將最新結(jié)果重新寫入vote.txt中。24在線投票功能要求-4(4)對于每幅圖及其下面的票數(shù)和名字信息,都是通過for循環(huán)語句來輸出的(循環(huán)變量取值從0到11),這種設計方法,在圖片隨意增多或者減少時,可以方便地進行控制,而不需調(diào)整頁面的內(nèi)容。例如,若是for循環(huán)變量的取值是5,則輸出的圖片只能是img5.jpg或者是img5.gif,到底是兩者中的哪一個

15、,要通過file_exists()函數(shù)判斷文件是否存在之后來確定。同時控制輸出存放姓名的數(shù)組元素的值,以及從文本文件vote.txt中讀出的相應票數(shù)。(5)點擊每一幅圖,都要向鏈接的頁面文件vote.php提交這幅圖對應的序號值,保證完成對這幅圖的投票,同時可在頁面中看到變化后的票數(shù)。25修改vote.php文件運行并觀察效果運行vote.php文件,任意點擊任意圖片觀察投票效果思考問題:要如何限制用戶只能投票一次?使用session禁止反復投票功能實現(xiàn)過程在頁面代碼開始處使用session_start()函數(shù)啟用session;當用戶點擊超鏈接投票、系統(tǒng)獲取到投票的信息之后,設置系統(tǒng)數(shù)組元素

16、$_SESSIONvoted=1;用于表示用戶已經(jīng)投過票當用戶試圖再次點擊超鏈接或者以刷新頁面的方式繼續(xù)投票時,將通過isset($_SESSIONvoted)判斷數(shù)組元素是否存在,若是已經(jīng)存在,則輸出腳本代碼提示用戶已經(jīng)投票不可再投,然后直接結(jié)束頁面文件的執(zhí)行增加與修改的代碼將原來的vote.php文件另存為voteSession.php(1)在代碼開始的?php定界符后面增加如下代碼:(2)在代碼if ($vote!=)$count$vote+; $sum+;的花括號中增加代碼$_SESSIONvoted=1,生成系統(tǒng)數(shù)組元素。函數(shù)exit()是結(jié)束文件voteSession.php運行過

17、程的方法,一旦結(jié)束就不可以再通過刷新方法重新運行繼續(xù)修改頁面文件除了上述要修改的內(nèi)容之外,所有圖片超鏈接要運行的文件都要改為voteSession.php用戶重復投票時的運行效果請大家嘗試:運行頁面文件voteSession.php,進行一次投票之后,在當前頁面繼續(xù)刷新或者再次點擊超鏈接還能否繼續(xù)投票?關閉當前瀏覽器,重新打開之后再次運行,是否可以繼續(xù)投票?使用session禁止重復投票的頁面中存在的問題如下:使用session時,在關閉瀏覽器后session會自動失效,session在失效之后,創(chuàng)建的數(shù)組元素$_SESSIONvoted就不復存在,因此只要用戶重新打開瀏覽器窗口再次運行就可以

18、繼續(xù)投票。要解決該問題,需要使用cookie關于cookiecookie是用戶瀏覽網(wǎng)站時,由服務器寫入用戶主機硬盤中的一個文本文件,其中保存了用戶訪問網(wǎng)站時的一些私有信息。當用戶下一次再訪問該網(wǎng)站時,網(wǎng)站的PHP文件就可以讀取這些信息,用于進行各種判斷。簡而言之,cookie是一種在本地瀏覽器端儲存數(shù)據(jù)并以此來跟蹤和識別用戶的機制。創(chuàng)建cookie在PHP中創(chuàng)建cookie時需要使用setcookie()函數(shù),語法格式如下:setcookie(name,value,expire,path,domain,secure)參數(shù):(1)name:必選的,設置cookie的名稱。(2)value:必選的

19、,設置cookie的值。(3)expire:可選的,設置cookie的有效期,這是一個UNIX時間戳,即從UNIX紀元開始的秒數(shù)。對于expire參數(shù)的設置一般通過當前時間戳time()加上相應的秒數(shù)來決定,例如time()+1200表示cookie將在20分鐘之后失效,若是不設置expire參數(shù),則cookie將在瀏覽器關閉時立即失效。創(chuàng)建cookie簡單應用舉例例如setcookie(name,zhangmanli,time()+3600)作用是創(chuàng)建一個名稱為name、取值為zhangmanli的cookie,該cookie的存活期是1個小時。訪問cookie通過setcookie()函數(shù)

20、創(chuàng)建的cookie作為數(shù)組元素,存放在系統(tǒng)數(shù)組$_COOKIE中,因此我們可以直接通過數(shù)組元素來訪問已經(jīng)創(chuàng)建的cookie。例如,對于上面創(chuàng)建的cookie,若是使用代碼echo $_COOKIEname;,將輸出zhangmanli。上述說法同時說明,我們可以用$_COOKIEname=zhangmanli方式創(chuàng)建一個cookie,但是這種cookie在會話結(jié)束時會消失。刪除cookie使用setcookie()函數(shù)創(chuàng)建cookie時通常都會指定一個過期時間,如果到了過期時間,cookie將會被自動刪除,若是在過期之前想要刪除cookie,則可以使用setcookie()函數(shù)重新創(chuàng)建cook

21、ie,將其過期時間設置為過去的時間,例如代碼setcookie(name,zhangmanli,time()-600)即可將名稱是name的cookie刪除掉。使用cookie禁止重復投票修改文件將原來的vote.php文件另存為voteCookie.php(1)在代碼開始的?php后面增加如下代碼:修改文件(2)在代碼if ($vote!=)$count$vote+; $sum+;的花括號中增加如下代碼:$tm=3600*120;setcookie(voted,$sessionID,time()+$tm);上面代碼生成系統(tǒng)名稱是voted的cookie,并且設置cookie的過期時間是5天。說明,本頁面中cookie的創(chuàng)建必須是在用戶的一次投票完成之后,這樣才能在下次想投票時用來做判斷條件。網(wǎng)站計數(shù)器功能實現(xiàn)創(chuàng)建頁面wzj

溫馨提示

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

評論

0/150

提交評論