PHP網站開發項目式教程任務8課件_第1頁
PHP網站開發項目式教程任務8課件_第2頁
PHP網站開發項目式教程任務8課件_第3頁
PHP網站開發項目式教程任務8課件_第4頁
PHP網站開發項目式教程任務8課件_第5頁
已閱讀5頁,還剩94頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

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

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

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

12、ay($res)獲取記錄集中的記錄使用$rowemailno、$rowsender、$rowreceiver等分別輸出郵件序號、發件人和收件人等信息實例擴展獲取emailmsg表中發件人為wangaihua11的記錄,以表格形式輸出,輸出時,表格標題行內容:發件人、收件人、主題、收發日期執行完查詢語句之后輸出表格標記和標題行內容使用循環結構輸出表格數據行,循環條件為$row=mysql_fetch($res),獲取到記錄則循環,否則結束循環循環之后輸出表格結束標記2.mysqli_fetch_object() 函數使用該函數可以從查詢結果記錄集中獲取記錄指針所指向的記錄。格式為:object

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

溫馨提示

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

評論

0/150

提交評論