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

下載本文檔

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

文檔簡介

1、任務(wù)八 接收、閱讀、刪除郵件分頁瀏覽郵件打開并閱讀郵件刪除郵件8.1 分頁瀏覽郵件8.1.1 收郵件功能描述在收郵件界面中需要實現(xiàn)以下描述的功能任務(wù):(1)能夠獲取當(dāng)前用戶收件箱中尚未設(shè)置刪除標(biāo)志的郵件總數(shù)并顯示出來;(2)能夠?qū)崿F(xiàn)郵件的分頁瀏覽功能,輸出“首頁、上頁、下頁、尾頁”的文本或者超鏈接,若當(dāng)前顯示的是第一頁中的郵件信息,則“首頁”和“上頁”鏈接不可用,若當(dāng)前顯示的是最后一頁中的郵件信息,則“下頁”和“尾頁”鏈接不可用;(3)能夠根據(jù)用戶點擊的頁面超鏈接進行換頁,例如,若當(dāng)前正在顯示的是第2頁,點擊“下頁”超鏈接后,能夠?qū)㈨摯a3提交給服務(wù)器,以打開下頁中的郵件信息;若此時點擊“上頁”

2、超鏈接,能夠?qū)㈨摯a1提交給服務(wù)器,以打開上頁中的郵件信息;8.1.1 收郵件功能描述(4)能夠通過查詢語句中的限制子句limit獲取每頁中指定的郵件,能夠使用mysqli_fetch_array() 函數(shù)從查詢結(jié)果記錄集中獲取一條記錄(即一封郵件的所有信息),然后使用數(shù)組形式將每封郵件的發(fā)件人、主題、收發(fā)日期以及郵件中是否有附件等信息顯示到郵件列表中,若是有附件,就在指定列中顯示附件小圖標(biāo)flag-1.jpg;(5)點擊任意郵件中的發(fā)件人或者郵件主題信息時,能夠?qū)?dāng)前郵件的emailno列值(即郵件序號)提交給服務(wù)器,完成郵件的打開與閱讀功能;(6)選中需要刪除郵件左側(cè)的復(fù)選框,點擊“刪除”按

3、鈕之后,能夠?qū)⑦x中的所有郵件設(shè)置為已刪除郵件。8.1.2 用$_GET接收URL附加數(shù)據(jù)三個知識點使用超鏈接提交數(shù)據(jù)的功能說明用$_GET接收URL附加數(shù)據(jù)用一個文件實現(xiàn)數(shù)據(jù)的提交與接收演示項目文件打開收郵件界面,觀察如下效果將鼠標(biāo)停留在“首頁、上頁、下頁、尾頁”相關(guān)鏈接上,觀察顯示的URL信息將鼠標(biāo)停留在某封郵件鏈接上,觀察URL信息點擊超鏈接提交數(shù)據(jù)功能說明在收郵件界面中,使用非常多的一個功能是點擊超鏈接向服務(wù)器端提交數(shù)據(jù),也就是在打開鏈接文件的同時,向該文件中提交了指定的數(shù)據(jù)。例如,點擊首頁、上頁、下頁、尾頁時,需要向服務(wù)器提交一個數(shù)字值,作為將要顯示的頁面的頁碼信息;點擊任意郵件的發(fā)件

4、人或者郵件主題時,則需要向服務(wù)器提交當(dāng)前郵件的emailno列值,指定要打開閱讀的郵件序號。功能實現(xiàn)方案點擊超鏈接向服務(wù)器端提交數(shù)據(jù),之后在服務(wù)器端獲取該數(shù)據(jù),這兩個功能的實現(xiàn)可以分別在兩個文件中完成,也可以放在一個文件內(nèi)部來實現(xiàn)。例如在收郵件界面中,點擊某個郵件的發(fā)件人或主題打開郵件時,點擊的超鏈接元素屬于頁面文件receiveemail.php,超鏈接要打開的文件則是openemail.php,即提交數(shù)據(jù)的頁面是receiveemail.php,接收數(shù)據(jù)的頁面則是openemail.php;而收郵件界面中,點擊首頁、上頁、下頁、尾頁時,點擊的超鏈接元素屬于頁面文件receiveemail.

5、php,超鏈接要打開的文件還是receiveemail.php,即提交數(shù)據(jù)和接收數(shù)據(jù)的都是receiveemail.php文件。使用URL方式提交數(shù)據(jù)需要解決的問題需要解決的問題有兩個:第一,在超鏈接中需要如何設(shè)置,才能在點擊時將數(shù)據(jù)提交給服務(wù)器?第二,超鏈接提交的數(shù)據(jù)在服務(wù)器端如何使用系統(tǒng)數(shù)組$_GET獲???在超鏈接中設(shè)置向服務(wù)器端提交數(shù)據(jù),需要使用href=url?鍵名=鍵值來完成。使用$_GET鍵名獲取應(yīng)用示例-創(chuàng)建get.html創(chuàng)建文件get.html,在內(nèi)部設(shè)置超鏈接,鏈接熱點是“點擊超鏈接,觀察地址欄的變化”,鏈接打開的文件是get.php,點擊超鏈接時,向服務(wù)器端提交的數(shù)據(jù)對是

6、data=123。頁面主體內(nèi)容代碼如下:點擊超鏈接,觀察地址欄的變化點擊超鏈接時,將信息123使用鍵名data提交到服務(wù)器的$_GET系統(tǒng)數(shù)組中,只要使用代碼$_GETdata即可獲取信息123應(yīng)用示例-創(chuàng)建get.php文件創(chuàng)建文件get.php,獲取并輸出get.html文件中超鏈接提交的數(shù)據(jù)。核心代碼如下:將提交數(shù)據(jù)與接收數(shù)據(jù)功能合并在一個文件中實現(xiàn)將提交數(shù)據(jù)與接收數(shù)據(jù)功能合并在一個文件中實現(xiàn),是指在這個文件中創(chuàng)建超鏈接,超鏈接href屬性指定要鏈接的文件仍舊是該文件本身,即點擊超鏈接提交的數(shù)據(jù)仍舊由當(dāng)前文件自己接收并處理,提交數(shù)據(jù)在瀏覽器端完成,而接收數(shù)據(jù)在服務(wù)器端完成。簡單描述如下:

7、一個文件先提交數(shù)據(jù),而后接收并處理自己所提交的數(shù)據(jù)修改get.php文件修改頁面文件get.php,按如下結(jié)構(gòu)合并原get.html文件代碼和get.php文件代碼 點擊超鏈接,觀察地址欄的變化 文件get.php運行結(jié)果如下:左圖為點擊超鏈接之前,初始運行效果,右圖為點擊超鏈接之后的結(jié)果思考問題:為什么在左側(cè)圖中會出現(xiàn)提示信息“undefined index: data”即,在頁面文件get.php代碼$data=$_GETdata;中出現(xiàn)未定義的下標(biāo)索引data?該如何解決?問題分析與解決方案說明產(chǎn)生問題的原因:頁面文件get.php第一次運行時,尚未點擊超鏈接,也就是說還沒有使用data

8、=123向超鏈接指向的文件get.php中提交數(shù)據(jù),所以在系統(tǒng)數(shù)組$_GET中也就不存在鍵名下標(biāo)data,而在點擊超鏈接之后數(shù)據(jù)被提交到頁面文件get.php中,存在系統(tǒng)數(shù)組元素$_GETdata,獲取之后就可以顯示出來解決該問題需要使用isset()函數(shù)在使用系統(tǒng)數(shù)組元素$_GETdata之前,先使用isset()函數(shù)判斷該元素是否已經(jīng)設(shè)置,若是設(shè)置了,再獲取其中保存的數(shù)據(jù),否則不做任何處理修改頁面文件get.php修改頁面文件get.php,增加條件判斷語句,修改后的代碼如下: 點擊超鏈接,觀察地址欄的變化 使用isset($_GETdata)檢測系統(tǒng)數(shù)組元素$_GETdata是否設(shè)置,即

9、檢測其是否存在,若是存在,返回真值,則if()條件成立,進而執(zhí)行后續(xù)兩行代碼處理該數(shù)組元素中保存的數(shù)據(jù)。使用超鏈接同時提交多個數(shù)據(jù)若是要在點擊超鏈接時向鏈接的文件中傳遞多個數(shù)據(jù),可以在href屬性取值中使用&符號連接新的鍵名與鍵值,例如href=get.php?data=123&name=jinnan,點擊超鏈接之后就可以使用系統(tǒng)數(shù)組元素$_GETdata獲取提交的第一個數(shù)據(jù),使用$_GETname獲取提交的第二個數(shù)據(jù)。8.1.3 處理查詢結(jié)果記錄集中的記錄打開收件箱后,在顯示每頁中的郵件信息時,需要從查詢結(jié)果記錄集中逐條獲取記錄,然后再使用數(shù)組形式獲取每條記錄中每個列的列值。PHP中提供了m

10、ysqli_fetch_array()、mysqli_fetch_row()、mysqli_fetch_object()、mysqli_fetch_assoc() 等多種不同的函數(shù)來處理查詢結(jié)果記錄集中的記錄,此處講解mysqli_fetch_array() 和mysqli_fetch_object() 這兩個常用的函數(shù)。1. mysqli_fetch_array() 函數(shù)使用該函數(shù)可以從查詢結(jié)果記錄集中獲取記錄指針?biāo)赶虻挠涗?。格式為:array mysqli_fetch_array(查詢結(jié)果記錄集)返回結(jié)果是數(shù)組形式保存的記錄信息或者是false如果記錄指針指向某條存在的記錄,則將獲取記錄

11、中所有的列,并且以一個數(shù)組的形式保存;如果記錄指針指向最后一條記錄之后,則返回false。數(shù)組元素的訪問對于存放記錄信息的數(shù)組,可以使用兩種形式訪問數(shù)組元素:第一種是使用從0開始的數(shù)字索引,索引0代表查詢結(jié)果中第一個列的信息,索引1代表第二個列的信息;第二種是使用鍵名訪問,使用數(shù)據(jù)表中的列名作為數(shù)組元素的鍵名,因為這種形式更直觀更容易理解,使其成為程序中的主要用法。小實例創(chuàng)建頁面文件fetch_array.php,查詢數(shù)據(jù)表emailmsg中emailno列值為1的記錄信息,然后完成下面操作:假設(shè)獲取的查詢結(jié)果記錄集為$res,需要使用如下步驟輸出:使用$row=mysql_fetch_arr

12、ay($res)獲取記錄集中的記錄使用$rowemailno、$rowsender、$rowreceiver等分別輸出郵件序號、發(fā)件人和收件人等信息實例擴展獲取emailmsg表中發(fā)件人為wangaihua11的記錄,以表格形式輸出,輸出時,表格標(biāo)題行內(nèi)容:發(fā)件人、收件人、主題、收發(fā)日期執(zhí)行完查詢語句之后輸出表格標(biāo)記和標(biāo)題行內(nèi)容使用循環(huán)結(jié)構(gòu)輸出表格數(shù)據(jù)行,循環(huán)條件為$row=mysql_fetch($res),獲取到記錄則循環(huán),否則結(jié)束循環(huán)循環(huán)之后輸出表格結(jié)束標(biāo)記2.mysqli_fetch_object() 函數(shù)使用該函數(shù)可以從查詢結(jié)果記錄集中獲取記錄指針?biāo)赶虻挠涗洝8袷綖椋簅bject

13、mysqli_fetch_object(查詢結(jié)果記錄集)。若是指向的記錄存在,則將返回的結(jié)果保存為對象,使用表中的列名作為對象的屬性來獲取各個列的值;若是指向的記錄不存在,則返回false。實現(xiàn)收件箱基本功能三個知識點收件箱頁面布局說明收件箱郵件總數(shù)查詢方法說明獲取并顯示收件箱郵件總數(shù)收件箱頁面運行效果點擊email.php頁面中左側(cè)的“收信”或者“收件箱”超鏈接時,要從右側(cè)的浮動框架子窗口中顯示右圖所示的頁面運行效果8.1.4 分頁瀏覽郵件在眾多的動態(tài)頁面中,要瀏覽保存在數(shù)據(jù)庫中的大量數(shù)據(jù),都需要使用分頁瀏覽技術(shù),例如一個留言板下面的數(shù)千條留言、郵箱中的數(shù)千封郵件等等,使用分頁瀏覽技術(shù)之后,

14、無論數(shù)據(jù)量怎樣變化,都能保證頁面的長度不會發(fā)生任何變化,變化的只有頁數(shù),只要用戶點擊進入自己需要的頁面查閱信息即可。收件箱頁面布局需要創(chuàng)建的文件需要創(chuàng)建的文件有樣式文件receiveemail.css和頁面文件receiveemail.php,在頁面文件中引用樣式文件。收件箱頁面的頁面邊距要定義為0(需要在receiveemail.css文件中增加樣式代碼bodymargin:0;)盒子div1的樣式要求盒子div1的樣式要求如下:寬度為自動,高度為25px,上下填充為0,左右填充為10px,邊距是0,盒子中文本字號為10pt,文本的行高是25px查詢條件分析獲取當(dāng)前登錄賬號收件箱中郵件總數(shù)時

15、需要使用的查詢語句中條件比較復(fù)雜,假設(shè)有四封郵件的收件人receiver列值分別如下:第一封:; ;第二封:;第三封:;第四封:;思考問題:設(shè)變量$uname的內(nèi)容是,如何設(shè)置條件,保證正確查到第一封和第二封郵件?能否直接使用receiver like %$uname%,為什么?使用receiver like %$uname%將獲取到這四封郵件,不符合要求,所以不可使用查詢條件設(shè)置方法正確設(shè)置方法為:receiver like $uname% or receiver like %;$uname%即若是要查詢的賬號在所有收件人開始的位置,則通過receiver like $uname%條件一定能

16、夠找到;若要查詢的賬號在中間的某個位置,則通過receiver like %;$uname%一定能夠精確找到。獲取并顯示收件箱中的郵件總數(shù)內(nèi)容設(shè)計步驟設(shè)計這一部分內(nèi)容需要通過如下幾個操作步驟來實現(xiàn):第一步,啟用session,獲取$_SESSION數(shù)組中存儲的登錄賬號信息,并在后面連接上,為設(shè)計查詢條件做好準(zhǔn)備;第二步,連接打開數(shù)據(jù)庫,查詢表emailmsg列receiver中包含當(dāng)前登錄賬號且沒有被刪除的郵件信息第三步,獲取查詢結(jié)果記錄集中的記錄數(shù),即為當(dāng)前用戶收件箱中的郵件總數(shù),在div1內(nèi)部輸出。完成div1內(nèi)容的代碼在receiveemail.php文件中增加如下代碼盒子div2及子元

17、素的樣式要求盒子div2的樣式:寬度自動,高度自動,上下填充5px,左右填充20px,上下邊距5px,左右邊距0,背景淺灰色#eee,下邊框1像素、實線、顏色#aaf。(最后要清除高度塌陷)盒子div2-1的樣式:寬度自動,高度自動,填充是0,邊距是0,向左浮動;使用樣式選擇符.div2-1 input定義盒子內(nèi)的兩個按鈕中顯示的文本字號是10pt。盒子div2-2的樣式:寬度自動,高度自動,填充0,邊距0,向右浮動,文本行高25px,文本字號10pt。刪除和刷新按鈕說明刪除按鈕的功能:在頁面中選擇要刪除的郵件之后,點擊“刪除”按鈕時能夠?qū)⑧]件設(shè)置為已刪除狀態(tài),該功能需要通過執(zhí)行指定的dele

18、te.php文件來完成,該按鈕需要設(shè)置為submit類型;點擊刷新按鈕時,要保證在當(dāng)前窗口中重新運行頁面文件receiveemail.php,目的是若用戶收到了新的郵件,能夠及時刷新頁面(為了降低復(fù)雜性,該項目中沒有使用自動刷新顯示新郵件功能),該按鈕需要設(shè)置為普通的button按鈕。添加div、刪除和刷新按鈕在receiveemail.php中div1盒子的后面增加div2和內(nèi)部嵌套的div2-1,添加如下內(nèi)容:確定每頁中要顯示的記錄數(shù)和郵件的總頁數(shù)每頁中要顯示的記錄數(shù),直接在代碼中給定即可,例如$pagesize=5;收件箱中的郵件頁數(shù)根據(jù)郵件總數(shù)和每頁中的記錄數(shù)來計算,因為得到的郵件頁數(shù)

19、可能是小數(shù),所以需要使用函數(shù)ceil()取得不小于該數(shù)的最小整數(shù)。例如,若獲取的記錄總數(shù)$reccount為17,設(shè)置的每頁記錄數(shù)$pagesize為5,則兩者相除之后的結(jié)果為3.4,使用ceil(3.4)得到的結(jié)果是不小于3.4的最小整數(shù)4;在receiveemail.php中獲取到郵件總數(shù)之后插入上面代碼確定當(dāng)前要顯示郵件信息的頁碼若是用戶剛剛打開收件箱,顯示的應(yīng)當(dāng)是第一頁的郵件信息,之后則根據(jù)用戶點擊的“首頁、上頁、下頁、尾頁”超鏈接獲取當(dāng)前要顯示的郵件信息的頁碼。例如,假設(shè)當(dāng)前正在顯示的是第3頁內(nèi)容,若點擊“上頁”超鏈接,接下來要顯示的一定是第2頁,這個頁碼數(shù)字將通過點擊超鏈接的方式提

20、交給服務(wù)器。確定當(dāng)前要顯示郵件信息的頁碼例如,假設(shè)每個超鏈接都在href屬性中使用鍵名pageno向服務(wù)器提交數(shù)據(jù),要判斷用戶是不是剛剛打開收件箱,需要通過檢測這些超鏈接有沒有向服務(wù)器端提交數(shù)據(jù)來實現(xiàn),若元素$_GETpageno存在,說明已經(jīng)通過點擊超鏈接向服務(wù)器提交數(shù)據(jù)了,此時需要獲取元素$_GETpageno的數(shù)據(jù)作為當(dāng)前將要顯示的郵件信息的頁碼,否則當(dāng)前必須顯示第一頁郵件信息。在receiveemail.php中獲取到總頁數(shù)之后插入該語句設(shè)計 “首頁、上頁、下頁、尾頁”時的原則若收件箱中郵件頁數(shù)為0,則首頁、上頁、下頁、尾頁都是文本若當(dāng)前顯示第一頁,則“首頁”設(shè)置為普通文本,否則 “首

21、頁”為超鏈接,點擊時向服務(wù)器提交頁碼1;若當(dāng)前顯示第一頁,則 “上頁”設(shè)置為普通文本,否則 “上頁”為超鏈接,在點擊時需要向服務(wù)器提交的頁碼是當(dāng)前正在顯示的頁面頁碼減去1;若當(dāng)前顯示最后一頁,則 “下頁”設(shè)置為普通文本,否則 “下頁”為超鏈接,在點擊時需要向服務(wù)器提交的頁碼是當(dāng)前正在顯示的頁面頁碼加上1;若當(dāng)前顯示最后一頁,則 “尾頁”設(shè)置為普通文本,否則設(shè)置的“尾頁”超鏈接在點擊時需要向服務(wù)器提交的頁碼是總頁數(shù)值。完善div2的代碼獲取當(dāng)前頁中要顯示記錄(郵件)的起始記錄號查詢當(dāng)前用戶的郵箱時,若查詢結(jié)果記錄集$res中的記錄數(shù)$reccount為17,則系統(tǒng)給定的記錄編號是從0到16的數(shù)列

22、,若每頁顯示的記錄數(shù)$pagesize為5思考問題:當(dāng)前頁碼與當(dāng)前頁中第一條記錄編號之間存在著怎樣的關(guān)系?即第一頁從哪條開始顯示?第二頁從哪條開始?第三頁?第四頁?第一頁從第0條開始,顯示04條第二頁從第5條開始,顯示59條第三頁從第10條開始,顯示1014條第四頁從第15條開始,顯示1516條當(dāng)前頁碼與當(dāng)前頁中第一條記錄編號之間的關(guān)系根據(jù)上表中顯示的數(shù)字關(guān)系,依據(jù)頁碼獲取當(dāng)前頁起始記錄編號的公式如下:$pagestart= ($pageno-1)* $pagesize在receiveemail.php中獲取到頁碼之后插入該語句獲取當(dāng)前頁中要顯示的若干條記錄實現(xiàn)這一功能,需要考慮在收件箱中顯示

23、郵件信息時,要將最后收到的郵件排列在第一頁第一條,即要按照收發(fā)郵件的日期進行降序排序,因此設(shè)計select語句時,要使用order by子句按照郵件的收發(fā)日期進行降序排序,使用limit子句設(shè)置要獲取記錄的起始編號和記錄數(shù);在定義的查詢收件箱所有記錄的查詢語句的基礎(chǔ)上增加order by和limit兩個子句的應(yīng)用,注意order by前面一定要保留一個空格,與之前的條件子句分隔開執(zhí)行定義的查詢語句之后,使用變量$result保存查詢結(jié)果記錄集。在receiveemail.php中獲取到當(dāng)前頁起始記錄編號之后添加上面代碼盒子div3及子元素的樣式要求盒子div3的樣式要求為:寬度自動,高度自動,

24、填充0,邊距0;盒子內(nèi)部超鏈接的初始狀態(tài)樣式:顏色黑色、沒有下劃線,文本加粗顯示;訪問過的狀態(tài)為:顏色為黑色、沒有下劃線,文本非加粗顯示。div3內(nèi)部表格的樣式要求使用包含選擇符.div3 table定義樣式:寬度100%。表格單元格使用包含選擇符.div3 table td定義樣式:高度30px,下邊框1像素、實線、顏色#aaf,單元格內(nèi)容在垂直方向居中,文本字號10pt。這里的下邊框用于設(shè)置每封郵件下面的橫線。表格需要包含5個列,列寬分別是30px、150px、自動auto、20px和120px,分別使用class類選擇符.td1, .td2,.td3,.td4和.td5定義修改recei

25、veemail.php文件在盒子div2后面增加下面代碼,添加盒子div3及內(nèi)部需要的表格教學(xué)目標(biāo)通過循環(huán)結(jié)構(gòu),逐條獲取當(dāng)前頁中的記錄,去掉發(fā)件人信息中的部分,處理日期信息得到下圖所示的日期格式思考問題在變量$result中已經(jīng)包含了當(dāng)前頁要顯示的全部記錄,使用怎樣的程序結(jié)構(gòu)、采取何種方法從該變量中逐條取出記錄并輸出?因為最后一頁剩下的記錄數(shù)并不確定,所以$result變量中的記錄數(shù)也是不確定的,因此此處可采用的最佳方案是使用while循環(huán)結(jié)構(gòu),循環(huán)條件是$row=mysqli_fetch_array($result),若是能夠從$result中取出記錄,則條件成立,接下來可輸出記錄的信息,若

26、是沒有取出記錄,則條件不成立,說明$result記錄指針已經(jīng)指向最后一條記錄之后,循環(huán)結(jié)束即可處理$row中的數(shù)據(jù)處理$row記錄中的數(shù)據(jù),為輸出做準(zhǔn)備獲取當(dāng)前郵件的emailno列值,保存在變量$emailno中備用;截取當(dāng)前郵件sender列值中符號前面的用戶名部分,保存在變量$sender中備用(使用list($sender)=explode(,$rowsender)實現(xiàn));處理當(dāng)前郵件datesorr列值中的日期時間信息,得到“Y年m月d日”的形式保存在變量$riqi中備用;使用空格做分割符,分割$rowdatesorr內(nèi)容,保留前面日期部分保存在$datesorr中,使用-做分割符,

27、分割$datesorr的內(nèi)容,年月日分別保存在$y,$m,$d中,連接$y,$m,$d的內(nèi)容,得到“Y年m月d日”形式修改receiveemail.php文件修改receiveemail.php文件,在div3的表格內(nèi)部設(shè)計循環(huán),獲取記錄,處理記錄中的數(shù)據(jù)為輸出做準(zhǔn)備輸出郵件信息輸出表格的行起始標(biāo)記輸出表格第一列的標(biāo)記(引用選擇符td1)及內(nèi)容,內(nèi)容是復(fù)選框,name定義為markup,value屬性取值為變量$emailno的值;輸出表格第二列的標(biāo)記(引用選擇符td2)及內(nèi)容,內(nèi)容是超鏈接,鏈接熱點為變量$sender的值,鏈接打開的文件是openemail.php,點擊后使用鍵名email

28、no向服務(wù)器端提交變量$emailno的值;輸出表格第三列的標(biāo)記(引用選擇符td3)及內(nèi)容,內(nèi)容是超鏈接,鏈接熱點為當(dāng)前郵件subject列值,鏈接打開的文件是openemail.php,點擊后使用鍵名emailno向服務(wù)器端提交變量$emailno的值;輸出郵件信息輸出表格第四列的標(biāo)記(引用選擇符td4)及內(nèi)容,判斷當(dāng)前郵件附件列attachment的值是否為空,為空,則在單元格中輸出空格字符(該字符不可或缺,若是該字符不存在,很多瀏覽器中將無法顯示該單元格的下邊框線);若附件列的列值不為空,則輸出圖片flag-1.jpg;輸出表格第五列的標(biāo)記(引用選擇符td5)及內(nèi)容,內(nèi)容是變量$riqi

29、的值;輸出表格的行結(jié)束標(biāo)記。修改receiveemail.php文件在準(zhǔn)備好要輸出的數(shù)據(jù)之后,增加如下代碼分頁瀏覽頁面存在的問題問題分析:在運行receiveemail.php的頁面中,若是選擇了一封或者幾封郵件,點擊“刪除”按鈕時,需要運行delete.php文件將選中的文件放入已刪除文件夾中,但是若用戶沒有選擇要刪除的郵件而直接點擊了“刪除”按鈕,需要怎樣阻止運行delete.php文件?需要對receiveemail.php文件中的表單進行數(shù)據(jù)驗證,判斷如果沒有選擇要刪除的郵件,則阻止運行delete.php文件需要完成的設(shè)置在receiveemail.php的標(biāo)記中設(shè)置action為d

30、elete.php創(chuàng)建腳本文件receiveemail.js,在receiveemail.php文件中引用該腳本文件定義函數(shù)validate()函數(shù)validate()的功能說明使用document.f1.markup獲取當(dāng)前頁面中的所有復(fù)選框,構(gòu)成一個組,使用數(shù)組markup表示;定義一個變量result,初始值為false,若是判斷后發(fā)現(xiàn)頁面中有被選擇的復(fù)選框,則該變量值要修改為true,否則保持為false。使用for結(jié)構(gòu)逐個判斷復(fù)選框組中每個元素是否被選中,只要有一個被選中,則將result的值修改為true,然后使用break退出循環(huán);使用“markupi.checked”作為條件判

31、斷相應(yīng)復(fù)選框是否被選中。根據(jù)result的值確定用戶有沒有選擇復(fù)選框,若是沒有,則彈出消息框顯示提示信息,并通過return false語句結(jié)束函數(shù)的執(zhí)行。函數(shù)validate()的代碼如下函數(shù)validate()的調(diào)用在receiveemail.php文件的標(biāo)記中使用onsubmit=“return validate()”代碼調(diào)用函數(shù)即可8.2 打開并閱讀郵件在receiveemail.php頁面中,點擊每一封郵件的發(fā)件人或者郵件主題時,將打開超鏈接所指定的頁面文件openemail.php,閱讀選擇的郵件內(nèi)容,同時還可以閱讀或下載附件。界面效果展示左圖為不帶附件的郵件閱讀界面;右圖為帶附件

32、的郵件閱讀界面8.2.1 打開并閱讀郵件頁面的布局結(jié)構(gòu)及功能說明div1-顯示郵件基本信息div2-顯示郵件內(nèi)容div3-顯示附件功能說明(1)能夠根據(jù)用戶選擇的郵件序號獲取并顯示郵件信息。(2)能夠計算出附件的個數(shù)并在頁面中輸出。(3)顯示郵件內(nèi)容時,必須能夠?qū)l(fā)件人在編輯郵件內(nèi)容時按下的回車鍵轉(zhuǎn)換為本頁面中的段落標(biāo)記,否則無論原來的郵件內(nèi)容有多長,都顯示在一個段落中;要求每個段落第一行都要縮進兩個字符;任何情況下都要求為內(nèi)容區(qū)保留一定的頁面空間,若盒子div2的高度不夠200px,則將高度設(shè)置為200px,否則高度根據(jù)郵件內(nèi)容高度來確定。功能說明(4)能夠根據(jù)是否存在附件來確定是否顯示盒子

33、div3。(5)顯示盒子div3時,除了將放在數(shù)據(jù)表中存儲的附件信息輸出之外,在用戶點擊“下載”或“打開”鏈接時能夠?qū)崿F(xiàn)附件的下載或打開操作。在顯示的附件信息中包含了隨機數(shù)標(biāo)識、附件名稱及附件大小三部分信息,這是為了保證用戶在接收附件之前可以確定附件的大小。當(dāng)用戶點擊“打開”或“下載”超鏈接時,要打開或下載的附件都是保存在upload文件夾下的文件,這些文件名稱前面都帶有“(隨機數(shù)標(biāo)識)”前綴,為了保證用戶能夠正常打開或下載附件,設(shè)計超鏈接時,要在文件名前面增加“(隨機數(shù)標(biāo)識)”前綴。8.2.2 字符串替換函數(shù)思考問題:用戶從寫郵件界面的表單元素content中輸入內(nèi)容時,怎樣實現(xiàn)回車換行?h

34、tml頁面中對內(nèi)容換行時需要怎樣實現(xiàn)?如何將用戶輸入的回車換行轉(zhuǎn)換成頁面中換行標(biāo)記或者是段落標(biāo)記?用戶按下回車鍵即可通過頁面在瀏覽器中輸出內(nèi)容要進行回車換行時,使用的是換行標(biāo)記或段落標(biāo)記使用字符串替換函數(shù)nl2br()或str_replace()函數(shù)nl2br()該函數(shù)名字中的數(shù)字2表示to函數(shù)作用:簡單理解,就是把在文本域中輸入文本時按下的回車鍵所生成的字符替換為HTML的換行符標(biāo)記精確解釋,是在字符串中的每個新行 (n) 之前插入 HTML 換行標(biāo)記 函數(shù)格式: nl2br(string)參數(shù)string是必需的,規(guī)定要檢查的字符串。函數(shù)nl2br()應(yīng)用示例創(chuàng)建頁面文件nl2br.php

35、,其中包含兩部分代碼,第一部分代碼生成表單界面,包含一個name屬性為txt的文本區(qū)域元素和一個submit類型的按鈕“提交”;第二部分是php代碼,用于接收和處理本頁面中表單元素提交的數(shù)據(jù)。在表單文本區(qū)域元素中輸入帶有回車的文本內(nèi)容并提交之后,重新運行頁面文件nl2br.php,獲取用戶提交的文本信息,進行兩種處理:第一,直接輸出獲取到的信息;第二,將所獲取信息中的回車字符使用函數(shù)nl2br()替換為換行標(biāo)記后再輸出,對比觀察兩種輸出的不同效果。代碼如下生成表單界面使用isset()函數(shù)判斷$_POSTtxt數(shù)組元素是否存在,頁面第一次運行時,該元素不存在,所以不需要執(zhí)行下面的php代碼,點

36、擊提交按鈕之后,該元素就存在了,需要執(zhí)行中的代碼。原樣輸出文本區(qū)域提交的內(nèi)容將文本區(qū)域提交數(shù)據(jù)中的回車鍵使用換行標(biāo)記替換之后輸出到瀏覽器端運行界面左圖為初次運行并輸入內(nèi)容的界面右圖為點擊提交按鈕之后的輸出界面輸入三段內(nèi)容直接輸出,無換行,瀏覽器不解釋回車換行鍵將回車換行替換為之后的結(jié)果str_replace()函數(shù)函數(shù)功能:將用戶指定的任意子串全部替換成另一個子串;函數(shù)格式:str_replace(find,replace,string,count);參數(shù)解釋:find:必需,規(guī)定要查找的子串,也就是將要被替換掉的子串;replace:必需,規(guī)定要用來進行替換的子串;string:必需,規(guī)定被

37、搜索的字符串;count:是可選參數(shù),對替換次數(shù)進行計數(shù),通常很少使用。str_replace()函數(shù)應(yīng)用示例創(chuàng)建頁面文件strreplace.php,其中包含兩部分代碼,第一部分代碼生成表單界面,包含一個name屬性為txt的文本區(qū)域元素和一個submit類型的按鈕“提交”;第二部分是php代碼,用于接收和處理本頁面中表單元素提交的數(shù)據(jù)。在表單文本區(qū)域元素中輸入帶有回車的文本內(nèi)容并提交之后,重新運行頁面文件strreplace.php,獲取用戶提交的文本信息,進行兩種處理:第一,直接輸出獲取到的信息;第二,將所獲取信息中的回車字符使用函數(shù)str_replace()替換為段落標(biāo)記后再輸出,對比

38、觀察兩種輸出的不同效果。代碼如下被替換掉的字符是“chr(13).chr(10)”,其中chr(13)是回車符,chr(10)是換行符,13是回車符在ASCII碼表中的值,10是換行符在ASCII碼表中的值,用戶編輯文本時按下的回車鍵將同時生成回車符和換行符,這兩個字符不可顛倒順序;用來替換的字符是設(shè)置了縮進2個字符的段落標(biāo)記。運行效果圖思考問題:為什么使用str_replace()函數(shù)處理之后,第一個段落與后面兩個段落的效果是不同的?要如何修改?問題解答:用戶在文本域中輸入文本時,并沒有在開始時就按下回車鍵,所以第一個段落前面不能替換出段落標(biāo)記;解決的方法是,在輸出前先使用代碼echo 輸出

39、一個帶有縮進兩個字符的段落標(biāo)記,問題即可解決。完整代碼8.2.3打開并閱讀郵件的功能實現(xiàn)設(shè)計打開并閱讀郵件頁面,需要創(chuàng)建的文件有樣式文件openemail.css和頁面文件openemail.php。分別創(chuàng)建兩個文件,并在openemail.css文件中使用代碼bodymargin:0;定義整個頁邊距為0。之后,在設(shè)計過程中,我們按照頁面內(nèi)容的順序分別設(shè)計元素、和。1.設(shè)計元素(1)元素及內(nèi)部元素的樣式要求選擇符#div1:寬度自動(保證能夠適應(yīng)浮動框架窗口寬度的變化),高度自動(根據(jù)實際內(nèi)容的多少來確定),上下填充10px,左右填充0,邊距0,背景色#eef,下邊框2像素實線顏色為#aaf。

40、頁面中所有段落的樣式直接使用html標(biāo)記名選擇符p定義:上下邊距5px,左右邊距都0,上下填充0,左右填充10px(保證段落內(nèi)容左右不貼邊),段落中的字號10pt,文本行高20px。1.設(shè)計元素(2)設(shè)計div中的內(nèi)容設(shè)計元素中的內(nèi)容需要三個操作步驟:第一步,獲取要打開的郵件的郵件序號;第二步,連接打開數(shù)據(jù)庫email,以指定的郵件序號為條件查詢數(shù)據(jù)表emailmsg,得到指定序號的郵件信息;第三步,從服務(wù)器端輸出元素,并在其內(nèi)部輸出需要的郵件信息。盒子div1的內(nèi)容閱讀帶附件的郵件時,盒子div1中的內(nèi)容如下圖所示思考問題:如何判斷是否有附件并獲取附件個數(shù)?解決附件個數(shù)的問題使用explod

41、e()和分號字符分割當(dāng)前郵件附件列中的附件名稱信息,分割后的結(jié)果保存在數(shù)組$attment中;獲取數(shù)組元素的個數(shù),減去1之后,即可得到附件個數(shù),保存在變量$attmentcount中。因為每個附件名稱后面都帶有分號,若是存在三個附件,則有三個分號,使用explode函數(shù)分割之后,會存在四個子串,即數(shù)組$attment長度為4,但實際只有三個附件,所以將數(shù)組長度值減去1之后作為附件個數(shù)來使用;修改openemail.php文件在div1結(jié)束之前添加下面代碼判斷附件是否為空使用分號分割各個附件名稱信息獲取附件個數(shù)2.設(shè)計元素(1)元素及內(nèi)部元素的樣式要求選擇符#div2:寬度自動,高度自動,上下填

42、充10px,左右填充0,邊距0。元素內(nèi)部控制輸出郵件內(nèi)容的所有段落都要增加縮進2個字符的樣式,直接使用包含選擇符#div2 p定義即可。2.設(shè)計元素(2)設(shè)計div中的內(nèi)容設(shè)計元素中的內(nèi)容需要兩個操作步驟。第一步,輸出元素,在div內(nèi)部開始處先增加一個段落標(biāo)記,然后將當(dāng)前郵件內(nèi)容中的回車換行符號使用段落標(biāo)記替換之后,在div中輸出;第二步,判斷元素的高度是否小于200px,若是小于200 px,則將其設(shè)置為200 px,否則該元素的高度根據(jù)內(nèi)容的多少來自動設(shè)置修改openemail.php文件在盒子div1的下方增加如下代碼3.設(shè)計元素(1)元素及內(nèi)部元素的樣式要求選擇符#div3:寬度自動,

43、高度自動,填充0,邊距0,邊框1像素實線顏色為#aaf。元素中用來顯示附件個數(shù)的段落樣式與其它段落樣式不同,這里使用包含選擇符#div3 .p1進行定義,樣式要求:邊距0,背景色#eef,文本行高40px。3.設(shè)計元素(2)設(shè)計div中的內(nèi)容首先要判斷是否需要輸出元素,若是當(dāng)前郵件中有附件,則要輸出,否則不需要輸出。輸出元素中的內(nèi)容需要三個操作步驟。第一步,使用類名為p1的段落控制輸出附件個數(shù);第二步,分割數(shù)據(jù)表emailmsg中attachment的列值,獲取一個個附件的信息,格式為“(隨機數(shù)標(biāo)識符)文件名稱.擴展名(文件大小)”,作為即將顯示的附件名稱信息第三步,對上面附件信息進行處理,獲

44、取用于超鏈接打開或下載的附件名稱信息,格式為“(隨機數(shù)標(biāo)識符)文件名稱.擴展名”,這是在文件夾upload中存儲的文件名稱格式。思考問題如何根據(jù)附件名稱信息“(隨機數(shù)標(biāo)識符)文件名稱.擴展名(文件大小)”格式得到“(隨機數(shù)標(biāo)識符)文件名稱.擴展名”格式?第一步, 使用explode函數(shù)和圓點分割符把附件名稱分為前后兩部分,前面一部分中包括了放在圓括號中的隨機數(shù)和主文件名,使用變量$attname保存,后面一部分中包括了擴展名和放在圓括號中的文件大小信息,使用變量$kuozhanm保存;第二步,繼續(xù)使用explode函數(shù)和左圓括號字符分割$kuozhanm中保存的信息,將其分為擴展名和文件大小兩部分,第一部分使用變量$kuozm保存,目的是去掉文件大小部分,這樣才能得到可用于下載或打開的文件名信息;第三步,將$attname中包含的隨機數(shù)信息和主文件名信息與$kuozm中包含的擴展名信息連接起來,中間再插入一個圓點,構(gòu)成完整可用的文件

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論