




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
構(gòu)建PHP互動(dòng)網(wǎng)頁第1頁/共34頁6.1.2接收表單數(shù)據(jù)提交表單數(shù)據(jù)后就可以在目標(biāo)頁面接收用戶輸入的數(shù)據(jù)。接收表單可以使用$_POST、$_GET和$_REQUEST來完成。$_POST用于接收POST方法傳來的值,$_GET用于接收GET方法傳來的值,$_REQUEST可以取得包括POST、GET和Cookie在內(nèi)的外部變量。表單中可以包含很多的控件,如文本框、單選按鈕、復(fù)選框、文件域、滾動(dòng)文本框、按鈕等。接收表單數(shù)據(jù)即指獲取表單控件的value屬性的值。不同的控件可以設(shè)置不同的name屬性,在接收數(shù)據(jù)時(shí)根據(jù)name屬性確定是哪個(gè)控件的值。不同的控件設(shè)置value屬性的方式也不一樣。例如,單選按鈕可能由多個(gè)選項(xiàng)組成,這些選項(xiàng)的name屬性值都相同時(shí)表示這些選項(xiàng)屬于同一個(gè)表單控件,每個(gè)選項(xiàng)都有一個(gè)value值,接收控件的值后可以根據(jù)這個(gè)value值判斷用戶選擇了哪個(gè)選項(xiàng)。又例如,復(fù)選框控件可以使用戶選擇多個(gè)選項(xiàng),復(fù)選框中選項(xiàng)的name屬性值都設(shè)置為相同,并且設(shè)置為數(shù)組的形式,如“name="XQ[]"”,而每個(gè)選項(xiàng)都有一個(gè)value值,接收數(shù)據(jù)時(shí)接收到的是一個(gè)數(shù)組,數(shù)組中保存了用戶選擇的選項(xiàng),遍歷數(shù)組的值就可以確定用戶選擇了哪些選項(xiàng)。第2頁/共34頁6.1.3常用表單數(shù)據(jù)的驗(yàn)證方法有些表單數(shù)據(jù)填寫時(shí)必須要符合一定的條件,例如,填寫出生日期時(shí)必須要符合日期的格式,填寫電話號(hào)碼時(shí)必須要填寫正確位數(shù)的數(shù)字。這時(shí)就需要通過驗(yàn)證表單數(shù)據(jù)來判斷用戶所填寫數(shù)據(jù)的正確性。表單數(shù)據(jù)的驗(yàn)證一般可以使用正則表達(dá)式(見4.3節(jié))來完成。例如,一個(gè)簡單的驗(yàn)證日期的正則表達(dá)式可以寫做“^\d{4}-(0?\d|1?[012])-(0?\d|[12]\d|3[01])$”。驗(yàn)證E-mail格式的正則表達(dá)式可以寫做“^[a-zA-Z0-9_\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$”。第3頁/共34頁6.1.4實(shí)例——使用PHP處理表單數(shù)據(jù)【例6.1】制作一個(gè)學(xué)生信息表單,包含學(xué)生學(xué)號(hào)、姓名、性別、出生日期、所學(xué)專業(yè)、備注、興趣愛好等信息。要求學(xué)號(hào)必須為6位數(shù)字,出生日期必須符合日期格式,學(xué)號(hào)和姓名不允許為空。表單數(shù)據(jù)以GET方法提交到另一個(gè)頁面,在另一個(gè)頁面判斷表單數(shù)據(jù)的正確性并輸出。新建EX6_1_Hpage.php文件,輸入以下代碼。新建EX6_1_Ppage.php文件,輸入以下代碼。第4頁/共34頁6.1.4實(shí)例——使用PHP處理表單數(shù)據(jù)運(yùn)行EX6_1_Hpage.php文件,如圖6.1所示。在表單中輸入學(xué)生信息,然后單擊【提交】按鈕驗(yàn)證輸入的信息。運(yùn)行結(jié)果示例如圖6.2所示。
圖6.1學(xué)生信息表單
圖6.2運(yùn)行結(jié)果第5頁/共34頁6.2獲取URL參數(shù)6.2.1獲取URL參數(shù)的方法URL通常的格式為:“url?參數(shù)1=值1&參數(shù)2=值2&參數(shù)3=值3…”。在頁面中使用“$_GET['參數(shù)']”即可獲得具體參數(shù)的值,例如:<ahref="?action=超鏈接&name=王林">單擊</a><?phpecho@$_GET['action']; //單擊超鏈接后輸出"超鏈接"echo@$_GET['name']; //單擊超鏈接后輸出"王林"?>第6頁/共34頁6.2.2解析URL在PHP中可以使用parse_url()函數(shù)解析一個(gè)URL,并返回包含其相關(guān)內(nèi)容的數(shù)組。語法格式如下:arrayparse_url(string$url)說明:$url為要解析的URL地址字符串。本函數(shù)不是用于解析URL的合法性,不完整的URL也可接受。除了對(duì)于嚴(yán)重不合格的URL,該函數(shù)將返回FALSE并發(fā)出警告外,函數(shù)將返回一個(gè)關(guān)聯(lián)數(shù)組,包含URL中出現(xiàn)的各個(gè)組成部分。其組成部分為(至少有一個(gè)):scheme。如http。host。如。port。端口號(hào)。user。用戶名。pass。密碼。path。路徑。query。在問號(hào)“?”之后的內(nèi)容。fragment。在散列符號(hào)#之后的內(nèi)容。第7頁/共34頁6.2.2解析URL例如:<?php$url='http://username:password@/index.php?arg=value#anchor';print_r(parse_url($url));/*輸出:Array([scheme]=>http[host]=>[user]=>username [pass]=>password[path]=>/index.php[query]=>arg=value [fragment]=>anchor)*/?>第8頁/共34頁6.2.3URL編碼與解碼在PHP中對(duì)URL編碼使用urlencode()函數(shù),語法格式如下:stringurlencode(string$str)說明:$str為要編碼的字符串,該函數(shù)返回一個(gè)編碼后的字符串。例如:<?php$url="";echourlencode($url); //輸出"http%3A%2F%2F"?>URL編碼后需要使用urldecode()函數(shù)進(jìn)行解碼,語法格式如下:stringurldecode(string$str)該函數(shù)將對(duì)字符串$str中所有以百分號(hào)“%”開頭后跟2位十六進(jìn)制數(shù)的3位字符串進(jìn)行解碼,并返回解碼后的字符串。例如:<?php$url="";$new_url=urlencode($url); //對(duì)$url進(jìn)行編碼$new2_url=urldecode($new_url); //對(duì)$new_url進(jìn)行解碼echo$new2_url; //輸出""?>第9頁/共34頁6.3頁面跳轉(zhuǎn)6.3.1使用header()函數(shù)在4.4.6節(jié)曾介紹過header()函數(shù)的作用,其中一個(gè)作用就是頁面跳轉(zhuǎn),只要在header()函數(shù)的參數(shù)中使用“Location:xxx”即可實(shí)現(xiàn)該功能。例如:<?php$var1="sa";$var2="sa";if($var1==$var2){ header("Location:");}else echo"頁面不能跳轉(zhuǎn)";?>第10頁/共34頁6.3.2使用HTML標(biāo)記最常用的跳轉(zhuǎn)頁面的方法是提交表單,將<form>標(biāo)記的action屬性設(shè)置為要跳轉(zhuǎn)到的頁面,提交表單后就跳轉(zhuǎn)到該頁面。例如:<formmethod="post"action="index.php"><inputtype="text"name="text"><inputtype="submit"name="bt"value="提交"></form>使用HTML的超鏈接標(biāo)記<a>也能夠?qū)崿F(xiàn)跳轉(zhuǎn)頁面的功能,例如:<?phpecho"<ahref='index.php?id=1&name=david'>單擊超鏈接</>";?>使用按鈕也可以進(jìn)行頁面跳轉(zhuǎn),只需要在按鈕控件的onclick方法中設(shè)置執(zhí)行的代碼即可,例如:<?phpecho'<inputtype="button"name="bt"value="頁面跳轉(zhuǎn)"onclick="location=\'index.php\'">';?>第11頁/共34頁6.3.2使用HTML標(biāo)記使用HTML實(shí)現(xiàn)頁面跳轉(zhuǎn)的另外一種方法是使用<meta>標(biāo)記,實(shí)例代碼如下:<metahttp-equiv="refresh"content="5;url=index.php">說明:以上代碼的作用是5秒之后跳轉(zhuǎn)到index.php頁面。content屬性中數(shù)字5表示5s之后跳轉(zhuǎn),設(shè)置為0則表示立即跳轉(zhuǎn),url選項(xiàng)可以指定要跳轉(zhuǎn)到的頁面。如果要刷新本頁面,則可以省略u(píng)rl選項(xiàng),代碼如下:<metahttp-equiv="refresh"content="5">第12頁/共34頁6.3.3使用客戶端腳本在PHP中還可以使用客戶端腳本實(shí)現(xiàn)頁面的跳轉(zhuǎn),例如,在PHP中使用JavaScript跳轉(zhuǎn)到index.php頁面的代碼如下:<?phpecho"<script>if(confirm('確認(rèn)跳轉(zhuǎn)頁面?'))";echo"window.location='index.php'</script>";//上面一句也可寫做echo"location.href='index.php';</script>";?>第13頁/共34頁6.4會(huì)話管理6.4.1會(huì)話的工作原理PHP的會(huì)話也稱為Session。PHP在操作Session時(shí),在用戶登錄或訪問一些初始頁面時(shí)服務(wù)器會(huì)為客戶端分配一個(gè)SessionID。SessionID是一個(gè)加密的隨機(jī)數(shù)字,在Session的生命周期中保存在客戶端。它可以保存在用戶機(jī)器的Cookie中,也可以通過URL在網(wǎng)絡(luò)中進(jìn)行傳輸。用戶通過SessionID可以注冊(cè)一些特殊的變量,稱為會(huì)話變量,這些變量的數(shù)據(jù)保存在服務(wù)器端。在一次特定的網(wǎng)站連接中,如果客戶端可以通過Cookie或URL找到SessionID,那么服務(wù)器就可以根據(jù)客戶端傳來的SessionID訪問會(huì)話保存在服務(wù)器端的會(huì)話變量。Session的生命周期只在一次特定的網(wǎng)站連接中有效,當(dāng)關(guān)閉瀏覽器后,Session會(huì)自動(dòng)失效,之前注冊(cè)的會(huì)話變量也不能再使用。第14頁/共34頁6.4.2實(shí)現(xiàn)會(huì)話1.初始化會(huì)話在實(shí)現(xiàn)會(huì)話功能之前必須要初始化會(huì)話,初始化會(huì)話使用session_start()函數(shù),語法格式如下:boolsession_start(void)該函數(shù)將檢查SessionID是否存在,如果不存在則創(chuàng)建一個(gè),并且能夠使用預(yù)定義數(shù)組$_SESSION進(jìn)行訪問。如果啟動(dòng)會(huì)話成功則函數(shù)返回TRUE,否則返回FALSE。會(huì)話啟動(dòng)后就可以載入該會(huì)話已經(jīng)注冊(cè)的會(huì)話變量以便使用。2.注冊(cè)會(huì)話變量自PHP4.1以后,會(huì)話變量保存在預(yù)定義數(shù)組$_SESSION中,所以可以以直接定義數(shù)組單元的方式來定義一個(gè)會(huì)話變量,格式如下:$_SESSION["鍵名"]="值";第15頁/共34頁6.4.2實(shí)現(xiàn)會(huì)話定義后該會(huì)話變量保存為$_SESSION數(shù)組的一個(gè)單元,例如:<?php$name="david";session_start();$_SESSION["name"]=$name;echo$_SESSION["name"]; //輸出"david"?>以上代碼運(yùn)行后,定義的會(huì)話變量在$_SESSION數(shù)組中的鍵名為“name”,值為“david”。會(huì)話變量定義后被記錄在服務(wù)器中,并對(duì)該變量的值進(jìn)行跟蹤,直到會(huì)話結(jié)束或手動(dòng)注銷該變量。在PHP4.1以前,還可以使用session_register()函數(shù)來注冊(cè)會(huì)話變量,語法格式如下:boolsession_register(mixed$name[,mixed$...])第16頁/共34頁6.4.2實(shí)現(xiàn)會(huì)話3.訪問會(huì)話變量要在一個(gè)腳本中訪問會(huì)話變量,首先要使用session_start()函數(shù)啟動(dòng)一個(gè)會(huì)話。之后就可以使用$_SESSION數(shù)組訪問該變量了。例如:<?phpsession_start();if(isset($_SESSION["name"])){ echo$_SESSION["name"];}else echo"會(huì)話變量未注冊(cè)";?>第17頁/共34頁6.4.2實(shí)現(xiàn)會(huì)話4.銷毀會(huì)話變量會(huì)話變量使用完后,刪除已經(jīng)注冊(cè)的會(huì)話變量以減少對(duì)服務(wù)器資源的占用。刪除會(huì)話變量使用unset()函數(shù),語法格式如下:voidunset(mixed$var[,mixed$var[,$...]])說明:$var是要銷毀的變量,可以銷毀一個(gè)或多個(gè)變量。例如:<?php$var="hello";session_start();$_SESSION["var"]=$var; //注冊(cè)會(huì)話變量unset($_SESSION["var"]); //刪除會(huì)話變量if(!isset($_SESSION["var"])) //判斷是否存在會(huì)話變量 echo"刪除成功";?>要一次銷毀所有的會(huì)話變量,可以使用以下語句:session_unset();第18頁/共34頁6.4.2實(shí)現(xiàn)會(huì)話5.銷毀會(huì)話使用完一個(gè)會(huì)話后,要注銷所有的會(huì)話變量,然后再調(diào)用session_destroy()函數(shù)銷毀會(huì)話,語法格式如下:boolsession_destroy(void)該函數(shù)將刪除會(huì)話的所有數(shù)據(jù)并清除SessionID,關(guān)閉該會(huì)話。例如:<?phpsession_start();session_destroy();?>【例6.2】
創(chuàng)建一個(gè)用戶登錄頁面,設(shè)定的用戶名和密碼分別為administrator和123456。表單提交到本頁面,當(dāng)用戶名和密碼輸入正確時(shí),啟動(dòng)Session,將用戶名和密碼值傳到用戶管理員頁面。如果不先登錄而訪問用戶管理員頁面則提示無權(quán)訪問。新建EX6_2_1.php文件,輸入以下代碼。第19頁/共34頁6.4.2實(shí)現(xiàn)會(huì)話新建EX6_2_2.php文件,輸入以下代碼:<?phpsession_start();$username=@$_SESSION['username'];$password=@$_SESSION['password'];if($username) echo"歡迎管理員登錄,您的密碼為$password";else echo"對(duì)不起,您沒有權(quán)限登錄本頁";?>第20頁/共34頁6.4.2實(shí)現(xiàn)會(huì)話運(yùn)行EX6_2_1.php文件,在頁面中輸入用戶名和密碼,如圖6.3所示。單擊【登錄】按鈕,結(jié)果如圖6.4所示。
圖6.3用戶登錄界面
圖6.4管理員界面第21頁/共34頁6.4.3在PHP中實(shí)現(xiàn)Cookie值得注意的是,Cookie技術(shù)有很多局限性,例如:多人共用一臺(tái)計(jì)算機(jī),Cookie數(shù)據(jù)容易泄露;一個(gè)站點(diǎn)存儲(chǔ)的Cookie信息有限;有些瀏覽器不支持Cookie;用戶可以通過設(shè)置瀏覽器選項(xiàng)來禁用Cookie。正是由于以上Cookie的一些局限性,所以在進(jìn)行會(huì)話管理時(shí),SessionID通常會(huì)選擇Cookie和URL兩種方式來保存,而不是只保存在Cookie中。第22頁/共34頁6.4.3在PHP中實(shí)現(xiàn)Cookie1.創(chuàng)建Cookie在PHP中創(chuàng)建Cookie使用setcookie()函數(shù),語法格式如下:boolsetcookie(string$name[,string$value[,int$expire[,string$path[,string$domain[, bool$secure[,bool$httponly]]]]]])本函數(shù)的參數(shù)如下:$name。表示Cookie的名字。$value。表示Cookie的值,該值保存在客戶端,所以不要保存比較敏感的數(shù)據(jù)。$expire。表示Cookie過期的時(shí)間,這是一個(gè)UNIX時(shí)間戳,即從UNIX紀(jì)元開始的秒數(shù)。對(duì)于$expire的設(shè)置一般通過當(dāng)前時(shí)間戳加上相應(yīng)的秒數(shù)來決定。例如,time()+1200表示Cookie將在20分鐘后失效。如果不設(shè)置則Cookie將在瀏覽器關(guān)閉之后失效。$path。表示Cookie在服務(wù)器上的有效路徑。默認(rèn)值為設(shè)定Cookie的當(dāng)前目錄。$domain。表示Cookie在服務(wù)器上的有效域名。例如,要使Cookie能在域名下的所有子域都有效,該參數(shù)應(yīng)設(shè)為"."。第23頁/共34頁6.4.3在PHP中實(shí)現(xiàn)Cookie$secure。表示Cookie是否僅允許通過安全的HTTPS協(xié)議傳輸。取值為1或0,當(dāng)設(shè)成1時(shí)Cookie僅允許通過HTTPS傳輸,設(shè)成0表示允許通過普通HTTP協(xié)議傳輸。默認(rèn)值為0。例如:<?phpsetcookie("user","administrator"); //設(shè)置Cookie的名稱和值setcookie("password","123456",time()+3600); //設(shè)置一個(gè)Cookie,1小時(shí)后失效setcookie("name","david",time()+3600,"\php5"); //創(chuàng)建只在php5目錄下有效的Cookiesetcookie("number","001",time()+3600,"","."); //創(chuàng)建在.有效的Cookie?>第24頁/共34頁6.4.3在PHP中實(shí)現(xiàn)Cookie2.訪問Cookie通過setcookie()函數(shù)創(chuàng)建的Cookie是作為數(shù)組的單元,存放在預(yù)定義變量$_COOKIE中的。也就是說,直接對(duì)$_COOKIE數(shù)組單元進(jìn)行賦值也可以創(chuàng)建Cookie。但$_COOKIE數(shù)組創(chuàng)建的Cookie在會(huì)話結(jié)束后就會(huì)失效。例如:<?phpsetcookie("name","王林");$_COOKIE["number"]="081101";print_r($_COOKIE);//輸出:Array([name]=>王林[number]=>081101)?>訪問Cookie的方法與Session類似,例如:<?phpsetcookie("name","david");if(isset($_COOKIE["name"])) echo$name;?>第25頁/共34頁6.4.3在PHP中實(shí)現(xiàn)Cookie3.刪除CookieCookie在創(chuàng)建時(shí)指定了一個(gè)過期時(shí)間,如果到了過期時(shí)間,Cookie將自動(dòng)被刪除。在PHP中沒有專門的刪除Cookie的函數(shù)。如果為了安全方面的考慮,在Cookie過期之前就想刪除Cookie,可以使用setcookie()函數(shù)或$_COOKIE數(shù)組將已知Cookie的值設(shè)為空。例如:<?php$_COOKIE["user"]="administrator";setcookie("password","123456",time()+3600);$_COOKIE["user"]=""; //使用$_COOKIE清除Cookiesetcookie("password",""); //使用setcookie()函數(shù)清除Cookieprint_r($_COOKIE); //輸出:Array([user]=>)?>【例6.3】制作一個(gè)登錄表單,將表單的值保存在Cookie中,并可以選擇Cookie的有效時(shí)間。新建EX6_3_1.php文件,輸入以下代碼。第26頁/共34頁6.4.3在PHP中實(shí)現(xiàn)Cookie新建EX6_3_2.php文件,輸入以下代碼:<?phpif($username=@$_COOKIE['username']){ echo"歡迎管理員".$username."登錄";}else echo"您沒有權(quán)限訪問本頁面";?>第27頁/共34頁6.4.3在PHP中實(shí)現(xiàn)Cookie運(yùn)行EX6_3_1.php文件,輸入用戶名administrator,密碼123456,Cookie選擇保存1天,如圖6.5所示。單擊【登錄】按鈕,結(jié)果如圖6.6所示。
圖6.5管理員登錄,保存Cookie 圖6.6管理員頁面第28頁/共34頁6.5實(shí)例——制作一個(gè)PHP互動(dòng)網(wǎng)頁【例6.4】制作一個(gè)智能問答系統(tǒng),系統(tǒng)根據(jù)存儲(chǔ)于文本文件中的用戶信息判斷用戶是否是合法登錄。用戶登錄后可以進(jìn)行智力問答,回答完后系統(tǒng)會(huì)計(jì)算其所得分?jǐn)?shù)。在Practice文件夾下新建一個(gè)EX6_4_info.txt文本文件,在其中保存用戶的信息,有用戶名、密碼兩個(gè)信息,中間用“|”隔開,如輸入如下幾行數(shù)據(jù):user1|123456user2|654321user3|111111第29頁/共34頁6.5實(shí)例——制作一個(gè)PHP互動(dòng)網(wǎng)頁新建EX6_4_login.php文件(登錄頁面),輸入以
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年舞蹈教師與兼職人員雇傭合同
- 2025年汽車貸款借款合同規(guī)范文本
- 2025年公共服務(wù)車輛維修保養(yǎng)合同
- 2025年企業(yè)消防安保服務(wù)合同范文
- 機(jī)械臂自主控制研究-深度研究
- 知識(shí)產(chǎn)權(quán)保護(hù)力度評(píng)估-深度研究
- 航空貨運(yùn)服務(wù)質(zhì)量評(píng)價(jià)-深度研究
- 茴香醛在食品添加劑中的應(yīng)用-深度研究
- 物流標(biāo)準(zhǔn)化與規(guī)范-深度研究
- 旅游信息化建設(shè)-深度研究
- 食品采購與進(jìn)貨臺(tái)賬
- GB/T 24353-2022風(fēng)險(xiǎn)管理指南
- GB/T 6284-2006化工產(chǎn)品中水分測(cè)定的通用方法干燥減量法
- GB/T 3003-2017耐火纖維及制品
- GB/T 22080-2016信息技術(shù)安全技術(shù)信息安全管理體系要求
- GB/T 13915-2013沖壓件角度公差
- 制藥工程導(dǎo)論課件
- 瑜伽師地論(完美排版全一百卷)
- 槳聲燈影里的秦淮河1-課件
- 蘇教版五年級(jí)下冊(cè)科學(xué)知識(shí)點(diǎn)全冊(cè)
- 古代歷史北京大學(xué)歷史學(xué)系課件
評(píng)論
0/150
提交評(píng)論