PHP網(wǎng)站開發(fā)項(xiàng)目式教程(微課版)(第2版)任務(wù)5 實(shí)現(xiàn)163郵箱注冊(cè)功能_第1頁(yè)
PHP網(wǎng)站開發(fā)項(xiàng)目式教程(微課版)(第2版)任務(wù)5 實(shí)現(xiàn)163郵箱注冊(cè)功能_第2頁(yè)
PHP網(wǎng)站開發(fā)項(xiàng)目式教程(微課版)(第2版)任務(wù)5 實(shí)現(xiàn)163郵箱注冊(cè)功能_第3頁(yè)
PHP網(wǎng)站開發(fā)項(xiàng)目式教程(微課版)(第2版)任務(wù)5 實(shí)現(xiàn)163郵箱注冊(cè)功能_第4頁(yè)
PHP網(wǎng)站開發(fā)項(xiàng)目式教程(微課版)(第2版)任務(wù)5 實(shí)現(xiàn)163郵箱注冊(cè)功能_第5頁(yè)
已閱讀5頁(yè),還剩94頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

PHP網(wǎng)站開發(fā)項(xiàng)目式教程(微課版)(第2版)任務(wù)5實(shí)現(xiàn)163郵箱注冊(cè)功能

在實(shí)現(xiàn)郵箱注冊(cè)功能的過程中,需要講解的相關(guān)知識(shí)點(diǎn)包括:使用PHP的圖像處理函數(shù)生成圖片驗(yàn)證碼、圖片驗(yàn)證碼在頁(yè)面中的插入與刷新、實(shí)現(xiàn)圖片驗(yàn)證碼的驗(yàn)證及表單數(shù)據(jù)的回填功能、使用Session機(jī)制在網(wǎng)站不同頁(yè)面間傳遞數(shù)據(jù)、創(chuàng)建與操作MySQL數(shù)據(jù)庫(kù)、PHP中訪問MySQL數(shù)據(jù)庫(kù)的常用方法等。

本任務(wù)需要完成以下6個(gè)任務(wù)。(1)設(shè)計(jì)注冊(cè)賬號(hào)的表單界面。(2)對(duì)用戶注冊(cè)的表單數(shù)據(jù)進(jìn)行合法性驗(yàn)證。(3)創(chuàng)建圖片驗(yàn)證碼。(4)將圖片驗(yàn)證碼應(yīng)用在頁(yè)面中并實(shí)現(xiàn)其刷新和驗(yàn)證功能。(5)創(chuàng)建MySQL數(shù)據(jù)庫(kù)email和數(shù)據(jù)表usermsg。(6)使用AJAX對(duì)用戶注冊(cè)的郵箱地址進(jìn)行查重,確定無(wú)重復(fù)后允許注冊(cè)保存。任務(wù)5-1實(shí)現(xiàn)簡(jiǎn)單注冊(cè)功能

需要解決的核心問題如何設(shè)計(jì)驗(yàn)證碼的“看不清楚?換一張”文本的樣式?如何定義進(jìn)行手機(jī)號(hào)合法性驗(yàn)證時(shí)使用的正則表達(dá)式?

這里的簡(jiǎn)單注冊(cè)功能是指不使用驗(yàn)證碼進(jìn)行驗(yàn)證,也不會(huì)把注冊(cè)數(shù)據(jù)保存到數(shù)據(jù)庫(kù)中,只是設(shè)計(jì)注冊(cè)界面,完成界面中的數(shù)據(jù)驗(yàn)證并將數(shù)據(jù)提交到服務(wù)器端進(jìn)行簡(jiǎn)單輸出。5.1.1郵箱注冊(cè)界面設(shè)計(jì)

創(chuàng)建頁(yè)面文件zhuce.html,設(shè)計(jì)圖5-1所示的163郵箱注冊(cè)界面。

完成郵箱注冊(cè)時(shí),將表單標(biāo)簽<form>中的method屬性的取值設(shè)置為post,因此獲取表單元素?cái)?shù)據(jù)時(shí)使用的系統(tǒng)數(shù)組是$_POST。圖5-1

163郵箱注冊(cè)界面1.頁(yè)面布局

整個(gè)頁(yè)面布局使用了上下排列的3個(gè)div,分別使用類選擇符.divshang、.divzhong和.divxia定義樣式,3個(gè)div的排列關(guān)系如圖5-2所示。圖5-2

郵箱注冊(cè)頁(yè)面布局使用的div結(jié)構(gòu)2.3個(gè)div的樣式

類選擇符.divshang:寬度為965px,高度為55px,填充為0,上下邊距為0,左右邊距為auto,背景圖為wbg_shang.jpg。

類選擇符.divzhong:寬度為965px,高度為auto,上填充為30px,其他填充為0,上下邊距為0,左右邊距為auto,背景圖片為wbg_zhong.jpg。

類選擇符.divxia:寬度為965px,高度為15px,填充為0,上下邊距為0,左右邊距為auto,背景圖片為wbg_xia.jpg。3.表格及文字樣式要求

在元素<divclass="divzhong">內(nèi)部,使用6行2列的表格排列表單元素和各種文字內(nèi)容,表格要求如下。(1)表格寬度為600px,在元素<divclass="divzhong">內(nèi)部居中對(duì)齊,單元格邊距和單元格間距都是0。(2)表格左側(cè)列樣式使用類選擇符.td1定義,寬度為150px,高度為60px,文本字號(hào)為12pt,文本在水平方向靠右對(duì)齊,在垂直方向頂端對(duì)齊。(3)表格右側(cè)列樣式使用類選擇符.td2定義,寬度為450px,文本字號(hào)為10pt,文本在垂直方向頂端對(duì)齊。4.表單元素要求(1)“郵箱地址”文本框的name和id屬性取值均為emailaddr,使用ID選擇符#emailaddr定義樣式。(2)“密碼”輸入框的name和id屬性取值均為psd1,使用ID選擇符#psd1定義樣式。(3)“確認(rèn)密碼”輸入框的name和id屬性取值均為psd2,使用ID選擇符#psd2定義樣式。(4)“手機(jī)號(hào)碼”文本框的name和id屬性取值均為phoneno,使用ID選擇符#phoneno定義樣式。(5)“驗(yàn)證碼”文本框的name和id屬性取值均為useryzm,使用ID選擇符#useryzm定義樣式。(6)所有表單元素的邊框都是1px、實(shí)線顏色為#aaf、半徑為2px的圓角效果;“郵箱地址”文本框、“驗(yàn)證碼”文本框的寬度為220px,“密碼”輸入框、“確認(rèn)密碼”輸入框和“手機(jī)號(hào)碼”文本框的寬度均為320px。5.樣式文件代碼6.頁(yè)面文件代碼

在頁(yè)面文件zhuce.html的<head>…</head>之間使用<link>標(biāo)簽引用樣式文件。5.1.2使用JavaScript驗(yàn)證注冊(cè)數(shù)據(jù)1.驗(yàn)證要求

在zhuce.html文件的表單元素中已經(jīng)使用HTML5自帶的數(shù)據(jù)合法性驗(yàn)證功能對(duì)郵箱地址、密碼、手機(jī)號(hào)碼等數(shù)據(jù)進(jìn)行了合法性驗(yàn)證,因此這里只需要對(duì)確認(rèn)密碼數(shù)據(jù)進(jìn)行驗(yàn)證,要求兩次輸入的密碼必須相同。2.腳本文件代碼5.1.3服務(wù)器端獲取并輸出注冊(cè)數(shù)據(jù)

創(chuàng)建文件zhuce.php,編寫代碼獲取zhuce.html頁(yè)面中emailaddr文本框、psd1密碼框、phoneno文本框提交的數(shù)據(jù),分別使用變量$emailaddr、$psd和$phoneno保存數(shù)據(jù),最后使用echo語(yǔ)句按照如下格式輸出獲取的數(shù)據(jù)。任務(wù)5-2使用圖片驗(yàn)證碼

需要解決的核心問題PHP中完成創(chuàng)建圖像、調(diào)配顏色、填充圖像、設(shè)置像素顏色、畫線段等操作的圖像處理函數(shù)分別是什么?它們各自需要幾個(gè)參數(shù)?如何創(chuàng)建并輸出包含指定個(gè)數(shù)的隨機(jī)字符的圖片驗(yàn)證碼?如何將圖片驗(yàn)證碼插入頁(yè)面指定位置并根據(jù)需要進(jìn)行刷新?

Session機(jī)制的作用是什么?如何啟用Session?如何使用Session?判斷驗(yàn)證碼的正確性需要在瀏覽器端還是服務(wù)器端進(jìn)行?需要注意什么問題?如何實(shí)現(xiàn)表單數(shù)據(jù)的回填?在一個(gè)PHP文件中如何引用另一個(gè)PHP文件或者HTML文件?5.2.1PHP的圖像處理函數(shù)

PHP的圖像處理函數(shù)都封裝在一個(gè)函數(shù)庫(kù)中,即GD庫(kù),GD庫(kù)默認(rèn)存放在PHP安裝目錄的ext子目錄下,名為php_gd2.dll。在PHP7中,php_gd2.dll默認(rèn)已經(jīng)自動(dòng)載入,不需要專門配置。

PHP提供的圖像處理函數(shù)有100多個(gè),此處只介紹其中幾個(gè)用于生成圖片驗(yàn)證碼的函數(shù)。1.imagecreatetruecolor()函數(shù)作用:創(chuàng)建一幅真彩色圖像。格式:imagecreatetruecolor(intw_size,inth_size)說明:imagecreatetruecolor()函數(shù)會(huì)返回一個(gè)圖像標(biāo)識(shí)符,代表一幅寬為w_size,高為h_size的黑色圖像。2.imagecreate()函數(shù)作用:新建一幅基于調(diào)色板的圖像。格式:imagecreate(intw_size,inth_size)說明:imagecreate()會(huì)返回一個(gè)圖像標(biāo)識(shí)符,代表一幅寬為w_size,高為h_size的空白圖像。3.imagecolorallocate()函數(shù)作用:為圖像分配顏色。格式:imagecolorallocate(resourceimage,intred,intgreen,intblue)

參數(shù)image表示imagecreate()函數(shù)或者imagecreatetruecolor()函數(shù)返回的圖像標(biāo)識(shí)符。

參數(shù)red、green和blue分別代表紅、綠、藍(lán)三原色分量值,取值范圍為十進(jìn)制數(shù)0~255,或者十六進(jìn)制數(shù)0x00~0xFF。

該函數(shù)會(huì)返回一個(gè)標(biāo)識(shí)符,代表由給定的紅、綠、藍(lán)顏色分量組成的顏色。

imagecolorallocate()函數(shù)用于設(shè)置在指定的圖像中可以使用的顏色,在創(chuàng)建圖像的PHP文件中會(huì)多次出現(xiàn)。若生成圖像時(shí)使用的是imagecreate()函數(shù),則imagecolorallocate()函數(shù)第一次出現(xiàn)時(shí)除了創(chuàng)建指定的顏色之外,還會(huì)將該顏色設(shè)置為圖像的背景色,之后可隨意設(shè)置要用于文本或圖形元素的顏色。4.imagefill()函數(shù)作用:使用指定的顏色填充指定的區(qū)域。格式:imagefill(resourceimage,intx,inty,intcolor)說明:imagefill()在指定圖像的坐標(biāo)(x,y)用color顏色填充區(qū)域。5.imagesetpixel()函數(shù)作用:設(shè)置一個(gè)單一像素的顏色。格式:imagesetpixel(resourceimage,intx,inty,intcolor)說明:imagesetpixel()在image圖像中用color顏色設(shè)置(x,y)坐標(biāo)位置指定的像素。6.imageline()函數(shù)作用:畫一條線段。格式:imageline(resourceimage,intx1,inty1,intx2,inty2,intcolor)說明:imageline()用color顏色在圖像image中從(x1,y1)坐標(biāo)到(x2,y2)坐標(biāo)畫一條線段。7.imagettftext()函數(shù)作用:在指定的圖像中輸出任意字符,可以是數(shù)字、字母或漢字。格式:imagettftext(resourceimage,intfontsize,intangle,intx,inty,intcolor,stringfontfile,stringtext)

參數(shù)fontsize定義要顯示的字符的字號(hào),在GD2庫(kù)中,默認(rèn)單位為磅。

參數(shù)angle定義要顯示的字符的角度,值為0表示從左向右閱讀文本(3點(diǎn)鐘方向),值為90則表示從下向上閱讀文本。

參數(shù)x和y是字符的坐標(biāo)(該坐標(biāo)值表示字符左下角的坐標(biāo)值)。

參數(shù)color定義字符的顏色。

參數(shù)fontfile指定選用的字體。

參數(shù)text指定即將輸出的字符。8.imagepng()函數(shù)作用:以PNG格式將圖像輸出到瀏覽器或文件。格式:imagepng(resourceimage[,stringfilename])說明:imagepng()將指定的圖像image以PNG格式輸出到標(biāo)準(zhǔn)輸出設(shè)備(通常為瀏覽器),或者如果用filename給出了文件名,則將其輸出到該文件。9.imagedestroy()函數(shù)作用:銷毀圖像。格式:imagedestroy(resourceimage)說明:imagedestroy()會(huì)釋放與image關(guān)聯(lián)的內(nèi)存。5.2.2創(chuàng)建圖片驗(yàn)證碼1.創(chuàng)建字符圖片驗(yàn)證碼

創(chuàng)建一幅寬為100px,高為25px的圖像,設(shè)置圖像的背景色為白色,在圖像中通過隨機(jī)產(chǎn)生坐標(biāo)的方式設(shè)置100個(gè)黑色像素作為干擾像素,通過隨機(jī)產(chǎn)生起始和結(jié)束坐標(biāo)的方式輸出兩條黑色線段作為干擾線段。圖像中要顯示4個(gè)驗(yàn)證碼字符,它們?yōu)?6個(gè)大寫英文字母和10個(gè)數(shù)字的任意組合。每個(gè)字符都以隨機(jī)產(chǎn)生的角度(這里要求范圍是?45°~45°)、隨機(jī)產(chǎn)生的顏色,以及隨機(jī)產(chǎn)生的位置輸出到圖像中。

以不同角度輸出字符的效果如圖5-3所示。圖5-3

不同角度輸出字符的效果2.創(chuàng)建漢字圖片驗(yàn)證碼

一個(gè)漢字在使用UTF-8編碼的情況下占3個(gè)字符的寬度,在使用GB2312編碼的情況下占2個(gè)字符的寬度,因此創(chuàng)建漢字驗(yàn)證碼時(shí),必須考慮頁(yè)面使用的字符集編碼問題,以防出現(xiàn)亂碼。5.2.3圖片驗(yàn)證碼的插入與刷新

需要解決的問題如下。(1)生成的圖片驗(yàn)證碼如何插入注冊(cè)界面中“驗(yàn)證碼”文本框的右側(cè)?(2)單擊“看不清楚?換一張”之后,如何實(shí)現(xiàn)驗(yàn)證碼的刷新?1.圖片驗(yàn)證碼的插入

圖片驗(yàn)證碼是以文件的形式保存的,創(chuàng)建時(shí)使用的文件是yzm.php,該文件中保存的是已經(jīng)創(chuàng)建的圖片,因此在插入圖片驗(yàn)證碼時(shí),只需要使用HTML中的<img>圖像元素即可。具體代碼為<imgsrc="yzm.php"name="yzm"id="yzm"align="top"/>,將這行代碼插入頁(yè)面文件zhuce.html中的代碼<inputtype="text"name="useryzm"id="useryzm"/>后面。2.圖片驗(yàn)證碼的刷新

刷新圖片驗(yàn)證碼必須在重新運(yùn)行yzm.php文件之后才能完成,使用http://localhost/email/yzm.php單獨(dú)運(yùn)行該文件時(shí),可以不斷單擊刷新按鈕完成刷新。把該文件加載到頁(yè)面文件zhuce.html內(nèi)部之后,因?yàn)轫?yè)面上可能已經(jīng)輸入了大量其他信息,不能再通過單擊刷新按鈕刷新zhuce.html文件來(lái)刷新圖片驗(yàn)證碼,所以圖片驗(yàn)證碼的刷新需要借助于JavaScript腳本函數(shù)來(lái)實(shí)現(xiàn)。5.2.4Session機(jī)制的原理與應(yīng)用1.zhuce.php文件解決的核心問題

zhuce.php文件解決的核心問題是判斷用戶輸入的驗(yàn)證碼是否正確,并根據(jù)判斷結(jié)果完成相應(yīng)的操作。

若用戶輸入的驗(yàn)證碼正確,則在頁(yè)面文件zhuce.php中獲取并顯示用戶提交的注冊(cè)信息(將注冊(cè)數(shù)據(jù)插入數(shù)據(jù)庫(kù)的相關(guān)知識(shí)后文會(huì)講解)。

若輸入的驗(yàn)證碼錯(cuò)誤,則需要在zhuce.php文件中實(shí)現(xiàn)如下功能。(1)重新運(yùn)行頁(yè)面文件zhuce.html。(2)回填“郵箱地址”文本框、“密碼”輸入框、“確認(rèn)密碼”輸入框和“手機(jī)號(hào)碼”文本框的數(shù)據(jù)。(3)在“驗(yàn)證碼”文本框中用紅色文本顯示提示信息“驗(yàn)證碼輸入錯(cuò)誤,請(qǐng)重新輸入”。

驗(yàn)證碼輸入錯(cuò)誤后的頁(yè)面效果如圖5-5所示。圖5-5

驗(yàn)證碼輸入錯(cuò)誤后的頁(yè)面效果2.Session機(jī)制的原理與應(yīng)用

Session可以簡(jiǎn)單理解為用戶訪問某個(gè)網(wǎng)站的一次會(huì)話過程。用戶開始訪問網(wǎng)站時(shí),會(huì)話開始,Session產(chǎn)生,用戶完成訪問關(guān)閉網(wǎng)站的所有頁(yè)面時(shí)會(huì)話結(jié)束,Session也就消失。

Session機(jī)制的原理是:服務(wù)器為每個(gè)訪問者創(chuàng)建一個(gè)唯一的ID,并基于這個(gè)ID來(lái)識(shí)別每個(gè)用戶并存儲(chǔ)用戶的變量信息,也就是說,任何用戶訪問任何網(wǎng)站,無(wú)論用戶是否直接使用,服務(wù)器都會(huì)為該用戶創(chuàng)建一個(gè)唯一的Session。

服務(wù)器為所有用戶創(chuàng)建的Session都存儲(chǔ)于服務(wù)器端,用戶可以使用Session保存自己的私密數(shù)據(jù),如登錄時(shí)的賬號(hào)和密碼信息等。當(dāng)用戶訪問網(wǎng)站的不同頁(yè)面時(shí),服務(wù)器將根據(jù)客戶端提供的SessionID得到用戶的信息,取得Session變量的值。

用戶的信息在網(wǎng)站的不同頁(yè)面之間傳遞時(shí),需要使用Session機(jī)制,也就是說,Session為用戶數(shù)據(jù)在同一網(wǎng)站不同頁(yè)面之間的傳遞搭建了“橋梁”。

網(wǎng)絡(luò)中應(yīng)用Session的實(shí)際案例:大家使用淘寶平臺(tái)網(wǎng)購(gòu)時(shí),只要在登錄界面中輸入賬號(hào)、密碼,登錄成功之后,就可以在淘寶網(wǎng)站的任意一家網(wǎng)店購(gòu)買東西而不需要反復(fù)登錄;使用郵箱時(shí),經(jīng)常要接收和發(fā)送郵件,只要登錄成功打開了郵箱,用戶就可以隨意完成收發(fā)郵件的操作。

使用Session機(jī)制傳遞數(shù)據(jù)的功能需要通過系統(tǒng)數(shù)組$_SESSION實(shí)現(xiàn),使用該數(shù)組時(shí),數(shù)組元素要由開發(fā)人員自己確定,使用的鍵名也由開發(fā)人員自己指定,數(shù)組元素的取值是需要在不同頁(yè)面間傳遞的數(shù)據(jù),需要使用的數(shù)組元素個(gè)數(shù)則由需要傳遞的數(shù)據(jù)個(gè)數(shù)確定。通常的做法是,在網(wǎng)站的一個(gè)文件中生成一個(gè)數(shù)組元素,在該網(wǎng)站的其他頁(yè)面中使用該數(shù)組元素。

更形象地說,可以將Session看作“管道”,該管道下面掛著對(duì)應(yīng)網(wǎng)站的多個(gè)(最少需要兩個(gè),無(wú)上限)PHP頁(yè)面文件,每個(gè)頁(yè)面文件都可以使用$_SESSION系統(tǒng)數(shù)組向管道提供需要傳遞的數(shù)據(jù),其他文件則可以使用$_SESSION系統(tǒng)數(shù)組從管道中取用數(shù)據(jù),如圖5-6所示。

圖5-6中的Session管道下面共掛有5個(gè)PHP文件,其中yzm.php文件通過數(shù)組元素$_SESSION['string']向管道提供系統(tǒng)生成的驗(yàn)證碼字符,之后zhuce.php文件通過$_SESSION['string']從管道中取用驗(yàn)證碼字符。

denglu.php文件通過數(shù)組元素$_SESSION['emailaddr']向管道提供用戶登錄時(shí)使用的賬號(hào)信息,之后writeemail.php和receiveemail.php文件通過數(shù)組元素$_SESSION['emailaddr']從管道中取用用戶賬號(hào)信息,其中denglu.php文件是輸入登錄信息之后運(yùn)行的文件,writeemail.php是寫郵件的頁(yè)面文件,receiveemail.php是收郵件的頁(yè)面文件。圖5-6

使用Session管道傳遞數(shù)據(jù)3.啟用Session

在頁(yè)面中使用$_SESSION系統(tǒng)數(shù)組之前,必須使用session_start()函數(shù)啟動(dòng)會(huì)話,該函數(shù)需要在使用Session的每個(gè)頁(yè)面中應(yīng)用,否則Session不起作用。除了這種啟用方式之外,還可以直接在php.ini文件中設(shè)置session.auto_start=1,這樣設(shè)置之后不需要在每個(gè)文件中使用session_start()函數(shù)來(lái)啟用Session。5.2.5實(shí)現(xiàn)圖片驗(yàn)證碼的驗(yàn)證功能1.修改yzm.php文件,為Session管道提供數(shù)據(jù)

需要對(duì)yzm.php文件進(jìn)行如下兩個(gè)方面的修改。(1)在開始處增加代碼session_start();,啟動(dòng)頁(yè)面對(duì)Session機(jī)制的應(yīng)用。(2)在生成驗(yàn)證碼字符之后,增加代碼$_SESSION['string']=$string;,使用系統(tǒng)數(shù)組$_SESSION保存生成的驗(yàn)證碼字符,從而為Session管道提供數(shù)據(jù)。2.修改zhuce.php文件,完成驗(yàn)證碼的判斷(1)在文件開始處使用代碼session_start();啟動(dòng)頁(yè)面對(duì)Session機(jī)制的應(yīng)用。(2)在獲取郵箱地址、密碼、手機(jī)號(hào)等表單元素?cái)?shù)據(jù)的代碼之后增加代碼,用變量$useryzm存放zhuce.html頁(yè)面中輸入的驗(yàn)證碼信息,即$useryzm=$_POST['useryzm']。(3)用變量$yzmchar存放$_SESSION數(shù)組中保存的原始驗(yàn)證碼信息,即$yzmchar=$_SESSION['string']。(4)使用函數(shù)strtoupper()將變量$useryzm保存的用戶輸入的驗(yàn)證碼字符中的小寫字母轉(zhuǎn)換為大寫字母,然后將其與變量$yzmchar中保存的系統(tǒng)生成的驗(yàn)證碼字符進(jìn)行比較,如果輸入的驗(yàn)證碼正確,則顯示用戶注冊(cè)時(shí)輸入的所有信息。3.大小寫字母轉(zhuǎn)換函數(shù)(1)小寫字母轉(zhuǎn)換為大寫字母。

strtoupper()函數(shù)用于將小寫字母轉(zhuǎn)換為大寫字母。函數(shù)格式:strtoupper(string)

作用說明:將參數(shù)string中存在的小寫字母都轉(zhuǎn)換為大寫字母,其余非小寫字母保持不變。例如,代碼echostrtoupper("Hello123!");,輸出結(jié)果為HELLO123!。(2)大寫字母轉(zhuǎn)換為小寫字母。

strtolower()函數(shù)用于將大寫字母轉(zhuǎn)換為小寫字母。函數(shù)格式:strtolower(string)

作用說明:將參數(shù)string中存在的大寫字母都轉(zhuǎn)換為小寫字母,其余非大寫字母保持不變。例如,代碼echostrtolower("Hello123!");,輸出結(jié)果為hello123!。4.驗(yàn)證碼輸入錯(cuò)誤之后需要實(shí)現(xiàn)的功能

在驗(yàn)證碼輸入錯(cuò)誤之后,系統(tǒng)需要實(shí)現(xiàn)如下功能。(1)重新運(yùn)行頁(yè)面文件zhuce.html。(2)將用戶填寫好的數(shù)據(jù)(郵箱地址、密碼、手機(jī)號(hào))重新回填到注冊(cè)界面中。(3)在“驗(yàn)證碼”文本框中使用紅色文本顯示提示信息“驗(yàn)證碼輸入錯(cuò)誤,請(qǐng)重新輸入”。5.2.6在PHP中引用外部文件

PHP程序的特色之一是它的文件引用功能,通過文件引用可以將常用的功能或代碼寫成一個(gè)文件,也可以將一個(gè)內(nèi)容非常多的頁(yè)面文件分割成幾個(gè)頁(yè)面文件,在需要的地方直接引用即可。這種方法既可以簡(jiǎn)化程序流程,又可以實(shí)現(xiàn)代碼復(fù)用。

引用文件的方法有兩種:使用include()和使用require()。

這兩種方法除了處理引用失敗的方式不同之外,其余功能完全相同。使用include()引用文件,在引用失敗時(shí)將產(chǎn)生警告信息,然后頁(yè)面代碼會(huì)繼續(xù)執(zhí)行下去;而使用require()在引用失敗時(shí)會(huì)導(dǎo)致一個(gè)致命錯(cuò)誤,將停止處理頁(yè)面內(nèi)容。

假設(shè)要引用的文件是zhuce.html,則使用include()引用時(shí)可以采用以下4種形式。(1)include("zhuce.html")。(2)include"zhuce.html"。(3)include('zhuce.html')。(4)include'zhuce.html'。

使用require()引用時(shí)類似。任務(wù)5-3PHP操作MySQL數(shù)據(jù)庫(kù)

需要解決的核心問題mysqli_connect()函數(shù)的作用是什么?參數(shù)有哪幾個(gè)?返回值是什么?mysqli_select_db()函數(shù)的作用是什么?參數(shù)是什么?返回值是什么?mysqli_query()函數(shù)的作用是什么?參數(shù)是什么?返回值是什么?

mysqli_num_rows()函數(shù)的作用是什么?參數(shù)是什么?返回值是什么?mysqli_real_escape_string()函數(shù)的作用是什么?參數(shù)是什么?返回值是什么?mysqli_close()函數(shù)的作用是什么?參數(shù)是什么?5.3.1mysqli_connect()及相關(guān)函數(shù)

在PHP程序中操作MySQL數(shù)據(jù)庫(kù)中的數(shù)據(jù),首要操作就是連接數(shù)據(jù)庫(kù)服務(wù)器,也就是建立一條PHP程序到MySQL數(shù)據(jù)庫(kù)之間的“通道”,實(shí)現(xiàn)該功能需要使用mysqli_connect()函數(shù)。函數(shù)格式:mysqli_connect(host,username,password,dbname,port,socket)參數(shù)host,可選,規(guī)定主機(jī)名或IP地址。參數(shù)username,可選,規(guī)定MySQL用戶名。參數(shù)password,可選,規(guī)定MySQL密碼。參數(shù)dbname,可選,規(guī)定默認(rèn)使用的數(shù)據(jù)庫(kù)。參數(shù)port,可選,規(guī)定嘗試連接到MySQL服務(wù)器的端口號(hào)。參數(shù)socket,可選,規(guī)定socket或要使用的已命名pipe。

該函數(shù)在應(yīng)用之后會(huì)返回一個(gè)到MySQL服務(wù)器的連接對(duì)象。

連接成功之后,可以使用函數(shù)mysqli_get_server_

info(connection)獲取MySQL服務(wù)器的版本信息,可以使用函數(shù)mysqli_get_host_info(connection)返回MySQL服務(wù)器的主機(jī)名和連接類型。若連接失敗,則可以使用函數(shù)mysqli_connect_errno()獲取錯(cuò)誤編號(hào),還可以使用函數(shù)mysqli_connect_error()獲取錯(cuò)誤信息。5.3.2mysqli_select_db()函數(shù)

mysqli_select_db()函數(shù)的功能可以理解為兩方面:選擇打開指定的數(shù)據(jù)庫(kù)和更改已經(jīng)選擇的數(shù)據(jù)庫(kù)。在建立MySQL數(shù)據(jù)庫(kù)連接時(shí),若mysqli_connect()函數(shù)中沒有指定要訪問的數(shù)據(jù)庫(kù)名稱,則在連接成功之后,需要使用mysqli_select_db()函數(shù)選擇并打開要操作的數(shù)據(jù)庫(kù),之后才能對(duì)這個(gè)數(shù)據(jù)庫(kù)中的數(shù)據(jù)表進(jìn)行增刪查改等各種操作。若在建立MySQL數(shù)據(jù)連接時(shí)指定了要訪問的數(shù)據(jù)庫(kù),則可以使用函數(shù)mysqli_select_db()更改指定的數(shù)據(jù)庫(kù)。

該函數(shù)需要使用兩個(gè)參數(shù),格式如下。mysqli_select_db(connection,dbname)參數(shù)connection,必需,規(guī)定要使用的MySQL連接。參數(shù)dbname,必需,表示要打開的數(shù)據(jù)庫(kù)。

使用該函數(shù)之后,會(huì)返回一個(gè)布爾值,若成功打開數(shù)據(jù)庫(kù)則返回true,否則返回false。圖5-12

mysql.php運(yùn)行效果5.3.3mysqli_query()函數(shù)

連接MySQL成功之后,需要完成的操作通常包含如下幾項(xiàng)。(1)創(chuàng)建一個(gè)MySQL數(shù)據(jù)庫(kù)。(2)創(chuàng)建一個(gè)MySQL數(shù)據(jù)表。(3)定義對(duì)數(shù)據(jù)表進(jìn)行增刪查改的操作語(yǔ)句,并執(zhí)行語(yǔ)句。

完成其中任何一種操作,都需要定義并執(zhí)行SQL語(yǔ)句,執(zhí)行這些SQL語(yǔ)句需要使用mysqli_query()函數(shù),該函數(shù)通常會(huì)使用兩個(gè)參數(shù),格式如下。mysqli_query(connection,SQL)參數(shù)connection,必需,規(guī)定要使用的MySQL連接。參數(shù)SQL,必需,表示定義的SQL語(yǔ)句。1.創(chuàng)建數(shù)據(jù)庫(kù)email圖5-13

create_DB_email.php文件運(yùn)行效果2.在數(shù)據(jù)庫(kù)email中創(chuàng)建數(shù)據(jù)表usermsg

數(shù)據(jù)表usermsg用于保存用戶注冊(cè)時(shí)輸入的郵箱地址、密碼、手機(jī)號(hào)和注冊(cè)日期信息,數(shù)據(jù)表中對(duì)應(yīng)的列名、類型和長(zhǎng)度等信息要求如表5-1所示。保存的信息列名類型和長(zhǎng)度是否允許為空是否為主鍵郵箱地址emailaddrvarchar(18)notnull是密碼psdvarchar(16)notnull

手機(jī)號(hào)phonenovarchar(11)

注冊(cè)日期zhucedatedatetimenotnull表5-1

數(shù)據(jù)表usermsg的結(jié)構(gòu)3.向數(shù)據(jù)表usermsg中插入記錄圖5-15

insert_usermsg.php文件運(yùn)行效果5.3.4mysqli_num_rows()函數(shù)

對(duì)數(shù)據(jù)表進(jìn)行查詢操作之后,通常需要獲取查詢結(jié)果記錄集中的記錄數(shù),用于判斷查詢結(jié)果是否存在,或者用于控制輸出查詢結(jié)果數(shù)據(jù)的次數(shù)。獲取查詢結(jié)果記錄集中的記錄數(shù)需要使用mysqli_num_rows()函數(shù),該函數(shù)只需要一個(gè)參數(shù),格式如下。mysqli_num_rows(resultset)

參數(shù)resultset表示查詢結(jié)果記錄集。5.3.5mysqli_real_escape_string()函數(shù)

應(yīng)用mysqli_real_escape_string()函數(shù)的目的是防止SQL注入攻擊。

SQL注入攻擊是黑客對(duì)數(shù)據(jù)庫(kù)進(jìn)行攻擊的常用手段。在編寫代碼時(shí),如果沒有判斷用戶輸入數(shù)據(jù)的合法性,使應(yīng)用程序存在安全隱患,惡意用戶就可以提交一段數(shù)據(jù)庫(kù)查詢代碼,從而根據(jù)程序返回的結(jié)果獲得他想惡意獲取的某些數(shù)據(jù),這就是所謂的SQL注入攻擊。5.3.6mysqli_close()函數(shù)

通過任何PHP文件訪問數(shù)據(jù)庫(kù)完成之后都需要關(guān)閉當(dāng)前的數(shù)據(jù)庫(kù)連接,這時(shí)需要使用mysqli_close()函數(shù),該函數(shù)只需要一個(gè)參數(shù),格式如下。mysqli_close(connection)參數(shù)connection:必需,表示規(guī)定要使用的MySQL連接。任務(wù)5-4使用數(shù)據(jù)庫(kù)保存注冊(cè)信息

需要解決的核心問題注冊(cè)郵箱地址時(shí)可使用何種技術(shù)完成郵箱地址的查重?這種技術(shù)的核心是什么?創(chuàng)建XMLHttpRequest對(duì)象實(shí)例時(shí)需要考慮什么問題?XMLHttpRequest對(duì)象有哪些屬性?屬性各種取值的含義是什么?

XMLHttpRequest對(duì)象有哪些事件?這些事件各在什么時(shí)候被觸發(fā)?XMLHttpRequest對(duì)象有哪些方法?它們各自的作用是什么?服務(wù)器端如何確定某個(gè)郵箱地址是否已經(jīng)被使用?md5()加密函數(shù)的格式和返回值是什么?5.4.1使用AJAX檢查郵箱地址的唯一性

所有用戶注冊(cè)的郵箱地址在數(shù)據(jù)庫(kù)中要求必須是唯一的,對(duì)這種唯一性的檢測(cè)需要訪問數(shù)據(jù)庫(kù)來(lái)完成,因此必須由服務(wù)器進(jìn)行,檢測(cè)應(yīng)在用戶改變“郵箱地址”文本框內(nèi)容之后立即完成,而不必在將表單所有元素?cái)?shù)據(jù)都提交到服務(wù)器之后再進(jìn)行。為了滿足這種檢測(cè)需求,需要使用AJAX(AsynchronousJavaScriptandXML,異步JavaScript和XML)技術(shù)。

郵箱地址重復(fù)注冊(cè)時(shí)的效果如圖5-19所示。

AJAX技術(shù)是一種創(chuàng)建交互式網(wǎng)頁(yè)應(yīng)用的網(wǎng)頁(yè)開發(fā)技術(shù),核心是JavaScript中的XMLHttpRequest對(duì)象,該對(duì)象用于在后臺(tái)與服務(wù)器交換數(shù)據(jù),這意味著可以在不重新加載整個(gè)網(wǎng)頁(yè)的情況下,對(duì)網(wǎng)頁(yè)中某個(gè)部分的內(nèi)容進(jìn)行更新。圖5-19

郵箱地址重復(fù)注冊(cè)時(shí)的效果1.創(chuàng)建XMLHttpRequest對(duì)象

XMLHttpRequest對(duì)象在不同瀏覽器中的實(shí)現(xiàn)方式分為兩種情況:IE把XMLHttpRequest實(shí)現(xiàn)為ActiveX對(duì)象(ActiveXObject);其他瀏覽器則把它實(shí)現(xiàn)為本地的JavaScript對(duì)象。因此在創(chuàng)建對(duì)象實(shí)例時(shí),必須考慮不同瀏覽器的兼容性問題。2.XMLHttpRequest對(duì)象的屬性和事件

XMLHttpRequest對(duì)象擁有多個(gè)屬性、方法和事件,以方便進(jìn)行腳本處理和控制HTTP請(qǐng)求與響應(yīng)。(1)readyState屬性。

當(dāng)XMLHttpRequest對(duì)象把HTTP請(qǐng)求發(fā)送給服務(wù)器時(shí)將要經(jīng)歷5種狀態(tài),之后才能接收響應(yīng)。每種狀態(tài)對(duì)應(yīng)的值分別是0、1、2、3、4,這些狀態(tài)值要通過屬性readyState獲取,對(duì)AJAXreadyState的5種狀態(tài)值的說明如下。0:未初始化,還沒有調(diào)用send()方法。1:載入,已調(diào)用send()方法,正在發(fā)送請(qǐng)求。2:載入完成,send()方法執(zhí)行完成,已經(jīng)接收到全部響應(yīng)內(nèi)容。3:交互,正在解析響應(yīng)內(nèi)容。4:完成,響應(yīng)內(nèi)容解析完成,可以在客戶端調(diào)用。(2)readystatechange事件。

無(wú)論readyState值何時(shí)變化,XMLHttpRequest對(duì)象都會(huì)觸發(fā)一個(gè)readystatechange事件,當(dāng)該事件被激活時(shí),使用代碼xml.onreadystatechange=function(){…}執(zhí)行匿名回調(diào)函數(shù)。

每次執(zhí)行都要判斷屬性readyState的值是否為4,屬性status的值是否為200,若這兩個(gè)條件同時(shí)成立,則表示此次“交易”成功,瀏覽器端將獲取并處理服務(wù)器端的應(yīng)答信息。(3)responseText屬性。

該屬性包含客戶端接收到的HTTP響應(yīng)的文本內(nèi)容。

當(dāng)readyState的值為0、1或2時(shí),responseText會(huì)包含一個(gè)空字符串。當(dāng)readyState的值為3(正在接收)時(shí),響應(yīng)中包含客戶端還未完成的響應(yīng)信息。當(dāng)readyState的值為4(已加載)時(shí),該responseText包含完整的響應(yīng)信息。(4)status屬性。

該屬性描述了HTTP狀態(tài)碼(一共有41個(gè)狀態(tài)碼,本書不詳細(xì)介紹),而且其類型為短整型。僅當(dāng)readyState的值為3(正在接收)或4(已加載)時(shí),該屬性才可用。當(dāng)readyState的值小于3時(shí),存取status的值將會(huì)引發(fā)異常。3.XMLHttpRequest對(duì)象的方法

XMLHttpRequest對(duì)象提供了各種方法用于初始化和處理HTTP請(qǐng)求。(1)open()方法。功能說明:該方法用于初始化請(qǐng)求參數(shù),供send()方法使用。格式:open(method,url,boolean)

參數(shù)method的常用取值是POST或者GET,兩者傳遞數(shù)據(jù)的方式不同(具體格式后面結(jié)合send()方法進(jìn)行說明)。

參數(shù)url指定請(qǐng)求服務(wù)器端要執(zhí)行的文件。

參數(shù)boolean指定此請(qǐng)求是否為異步方式,默認(rèn)為true,表示請(qǐng)求是異步的,說明腳本執(zhí)行send()方法后不等待服務(wù)器的執(zhí)行結(jié)果,而是繼續(xù)執(zhí)行腳本代碼。若將參數(shù)設(shè)置為false,則服務(wù)器請(qǐng)求是同步進(jìn)行的,也就是腳本執(zhí)行send()方法后會(huì)等待服務(wù)器返回執(zhí)行結(jié)果,若等待超時(shí),則不再等待,繼續(xù)執(zhí)行后面的腳本代碼。

調(diào)用open()方法后,XMLHttpRequest對(duì)象會(huì)把它的readyState屬性設(shè)置為1,并且把其他屬性恢復(fù)到它們的初始值。(2)send()方法。

功能說明:在通過調(diào)用open()方法準(zhǔn)備好一個(gè)請(qǐng)求之后,需要使用send()方法把該請(qǐng)求發(fā)送到服務(wù)器。格式:send(null||data)

參數(shù)是使用null還是data,取決于open()方法中的method參數(shù)的取值是GET還是POST。4.發(fā)送請(qǐng)求獲取響應(yīng)(1)定義函數(shù)check()。

在zhuce.js中定義函數(shù)check(),為要與之通信的服務(wù)器資源創(chuàng)建URL,執(zhí)行回調(diào)函數(shù),取得返回?cái)?shù)據(jù),并在指定位置顯示該數(shù)據(jù)。具體功能描述如下。①獲取瀏覽器端要上傳的數(shù)據(jù)。②調(diào)用函數(shù)createXML()得到XMLHttpRequest對(duì)象的實(shí)例。③通過實(shí)例應(yīng)用方法open(),這里method參數(shù)設(shè)置為POST。④通過實(shí)例應(yīng)用setRequestHeader()方法,設(shè)置請(qǐng)求的頭信息。⑤通過實(shí)例應(yīng)用send()方法,將請(qǐng)求發(fā)送給服務(wù)器。⑥在事件readystatechange的匿名處理函數(shù)中判斷交易是否成功,成功后要通過實(shí)例的responseText屬性獲取服務(wù)器返回的響應(yīng)信息,然后判斷響應(yīng)信息,若為空,則說明請(qǐng)求檢測(cè)的數(shù)據(jù)是可以使用的,否則彈出消息框提示用戶需要重新注冊(cè),將光標(biāo)定位到文本框中并清空內(nèi)容。(2)

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論