




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
項目三充案案例3-1 表單的GET與POST使用一、案例描述1考核知識點2練習目標3需求分析4設計思路創建一個表單,分別以GET方式和POST方式發送數據,數據接收頁面為showinfo.php表單中設置以下幾個表單元素,、、,通過按鈕點擊提交,可以重置在showinfo.php中接收傳輸的數據,并打印輸出到瀏覽器二、案例實現1、首先創建一個以GET方式請求的表單頁面index.html,發送給showinfo.php<!doctype<!doctype<title>Web表單<form<table<tdclass="title" <td><inputtype="text"name="name" <td><input<td><inputtype="text"name="age" <td><inputtype="text"name="sex"<inputtype="submitvalue="提交表單class="button<inputtype="resetvalue="重新填寫class="button以上代碼輸出echo'<pre>';echoecho'<pre>';echo輸出效果圖<!--修改表單以POST方式提交<formaction="showinfo.php"3、將表單的請<!--修改表單以POST方式提交<formaction="showinfo.php"echo'<pre>';echo'</pre>';5、運行結果展示三、案例總結1 不同方式的請求,傳輸數據的形式不同,接收數據的方式也不同2GETHTTPurlurl3GET1024字節,POSTphp.ini8M,可案例3- 1考核知識Web表單文件上2練習目掌握HTTP請求中POST3需求分在項目實際開發中,為了使作者的的內容豐富多彩,會采用圖文并茂的方式給讀者體現。那么的上傳在這里將會很重要,上傳時通過表單的文件域獲取文件的路徑,通<form>表單元素encype="multipartform-daa"屬性設置表單的MIME編碼,此時表單內的數據是以二進制的方式進4、設計思路(實現原理編寫用于上傳文件的html表單頁面indexhtml編寫接收數據的PHP文件upload.php實現文件上傳的功能及效果顯示二、案例實現1 編寫上傳文件使用的表單頁面,代碼如下<!doctype<!doctype<title>文件上傳<table<th>形 <td><inputtype="file"name="file"<inputtype="submitvalue="上傳文件class="button<inputtype="resetvalue="重新選擇class="button2、運行程序,結果如下圖所示header('Content-Type:text/html;charset=utf-exit('沒有文件上傳}//if($_FILES['file']['error']>}echo文件的名稱:$_FILES['file']['nameecho文件的類型:$_FILES['file']['typeecho文件的大小:$_FILES['file']['sizeecho文件的臨時路徑:$_FILES['file']['tmp_name'//ifif(file_exists('./upload/'.}// iconv('UTF- .{echo'上傳成功:./upload/'.$_FILES['file']['name'].'<br/>';echo'<imgsrc="./upload/$_FILES['file']['name'/><br}else}上傳的文件展示三、案例總結2 文件接收數據時必須使用$_FILES獲取表單提交的文件信息案例3- 表單數據過一、案例描述1考核知識表單數據過2練習目3、需求分析當接收表單時,用戶輸入的內容中可能會有HTML、CSS、JavaScript代碼,如果PHP將這些輸入數據原樣顯示到HTML中,就會對網頁造成破壞,而且JavaScript代碼也會被瀏覽器執行,影響網站的安全。在PHP中,可以使用strip_tags()函數過濾表單中的HTML。4設計思創建一個表單,表單中有一個輸入用戶的表單元素該表單數據傳輸給showinfo.phpshowinfo.php向表單元素中輸入正常的值,查看頁面顯示效果返回該表單,在輸入的前添加<strong>,在傳輸給 查看顯示效果重復上一步操作,在showinfo.php中使用strip_tags()函數對該變量進行處理,再次查看頁面二、案例實現"/><!doctype<!doctype<metacharset="utf-8"<title>表單過濾<formaction="showinfo.php"<table<th><td><inputtype="text"name="name"<input<inputtype="submitvalue="提交class="button<inputtype="resetvalue="重置class="button查看網頁展示header('Content-Type:text/html;charset=utf-$name=isset($_POST['name'])?$_POST['name']://下面的代碼用于過濾//$name=<!doctype<title>表單數據安全驗證結果<table<thcolspan="2"你好!<?phpecho$name歡迎來到傳智播客。3 在表單中輸入“”,提交表單,效果圖如下4 在表單中輸入“<strong></strong>”,提交表單運行結果如下當在PHP頁面使用strip_tags()函數對變量進行處理后,結果如下三、案例總結1 表單數據如果不經過安全性處理,輕則破壞頁面布局和顯示,重則影響安全案例3- 一、案例描述1考核知識$_REQUEST的使2練習目掌握$_REQUEST的使用方法,了解$_REQUEST3需求分而不清楚使用何種請求方式來獲取value時,可以使用$_REQUEST。$_REQUEST會按照php.ini中variables_order設定的“GPCS”順序獲取數據,即$_GET、$_POST、$_和$_SERVER的順4設計思在HTML文件中創建一個表單,該表單用于保存個人信息該表單分別以GETPOST方式請求showinfo.php頁面showinfo.php頁面使用$_REQUEST二、案例實現<!doctype<metacharset="utf-8"<title>$_REQUEST的使用<table <!doctype<metacharset="utf-8"<title>$_REQUEST的使用<table <td><inputtype="text"name="name" <td><inputtype="text"name="age" <td><inputtype="text"name="gender"<inputtype="submitvalue="提交class="button<inputtype="resetvalue="重置class="button3、showinfo.php頁面,使用$_REQUEST接收請求的數據信息echo'<pre>';echo運行效果如下圖三、案例總結2、$_REQUEST中的變量是通過GET、POST和 和$_在$_REQUEST中出現的順序依賴于PHP的配置文件php.ini中variables_order配置指令案例3- 一、案例描述1考核知識$_SERVER的使2練習目掌握 的使用及其各信息的用途3需求分4設計思創建一個PHP文件,獲取以下信Web客戶端操作系統和瀏覽器信二、案例實現header('Content-Type:text/html;charset=utf-echo客戶端操作系統和瀏覽器信息:',$_SERVER['HTTP_USER_AGENT'],'<br/><brecho'IP地址:',$_SERVER['SERVER_ADDR'],'<br/><br/>';header('Content-Type:text/html;charset=utf-echo客戶端操作系統和瀏覽器信息:',$_SERVER['HTTP_USER_AGENT'],'<br/><brecho'IP地址:',$_SERVER['SERVER_ADDR'],'<br/><br/>';2、案例運行結果三、案例總結$_SERVER保存的信息,根據web服務器和運行文件的不同會有所不同案例3- 一、案例描述1考核知識$GLOBALS的使用2練習目掌握$GLOBALS的使用了解局部變量和全局變量的區3需求分在 開發中,如果希望在一個函數中調用函數外的一個變量,那么就需要使用$GLOBALS4設計思定義一個函數,在函數外定義一個變量,使用 把函數外的變量全局化在函數內調用該變量以顯示二、案例實現1test函數,該函數內有變量$addr,函數外部同樣設置一個變量$addr,在函數內分別輸出這functiontest()$addr=echo'$addris'.$addr,'<br/>';echo'$addris'.}$addr=2、案例運行結果三、案例總結$GLOBALS保存了PHP中所有全局變量的數組,變量名就是數組的鍵案例3-7 一、案例描述1考核知識2、練習目標掌 preg_match()函數的使用方法,熟悉該函數的使用效果3需求分4設計思 一個變量,為變量設置一個任意長度的字符串定義一個正則表達式,用以匹配以上變量使 preg_match()函數執行該正則表達式,顯示匹配結果二、案例實現header('Content-Type:text/html;charset=utf-$str=//匹配一個兩位的數$reg='/[0-9][0-9]/';preg_match($reg,$str,$arr);header('Content-Type:text/html;charset=utf-$str=//匹配一個兩位的數$reg='/[0-9][0-9]/';preg_match($reg,$str,$arr);echopreg_match匹配后:';echo'<pre>';echo案例結果三、案例總結1、使用preg_mach()函數時,通常設置三個參數,第一個參數是正則表達式,是字符串類型,第二個參數是要匹配的字符,第三個參數是可選參數,如果提供了該參數,匹配所得的結果將填充到該參數中,該參數是一個數組類型。2、preg_match()函數在成功匹配到一個元素后就會停止匹配,即使后面仍然有符合匹配條件的字符案例3- preg_match_all()函一、案例描述1考核知識2、練習目標掌握preg_match_all()函數的使用,熟悉該函數的使用效果3需求分在案例3-7中,字符串“na12sicmea92xisax3”有兩處符合正則的篩選條件,分別是12和92,但preg_match()函數在成功匹配到第一個,也就是12后就停止匹配,將結果返回了。如果需要preg_match_all()函數。4設計思二、案例實現header('Content-Type:text/html;charset=utf-$str=//匹配一個兩位的數$reg='/[0-9][0-9]/';preg_match_all($reg,$str,$arr);echopreg_match_all匹配前:'.$str.'<brheader('Content-Type:text/html;charset=utf-$str=//匹配一個兩位的數$reg='/[0-9][0-9]/';preg_match_all($reg,$str,$arr);echopreg_match_all匹配前:'.$str.'<brecho'preg_match_all匹配后:';echo'<pre>';echo2、案例運行結果三、案例總結從上面的案例可以看出,preg_mach_al()函數會一直匹配到目標最后才停止,獲取到所有匹配的結果以二維數組的形式返回。案例3- preg_grep()函一、案例描述1考核知識2、練習目標掌握preg_grep()3需求分在程序開發中,經常需要使用正則表達式對數組中的元素進行匹配,此時可以使 preg_grep()數4設計思使用正則表達式匹配name數組中所有以n結尾的英文名通過preg_grep()二、案例實現$reg=$name[]=$reg=$name[]=$name[]=$name[]=$name[]=$name[]=$name[]=$name[]=$res=$res=preg_grep($reg,$name);2、案例運行結果如下三、案例總結preg_grep()函數可以對數組中的元素進行匹配案例3- preg_split()函一、案例描述1考核知識2、練習目標掌握preg_split()函數的使用3需求分有些時候需要對中文字符串進行截取,而中文字符屬于多字節字符,使用一般的substr()函數會出現亂碼,PHP提供了一種處理多字節字符的函數mb_substr()PHP加載了mbstring擴展,而有些時候不知道PHP是否加載了這個擴展,當不能使用這個擴展時,想要4設計思 一個函數,函數名substr_utf8度。首先將目標字符串使 preg_split()函數利用正則表達式分割成數組中的元素再使 array_slice()函數根據傳入的截取開始位和截取長度,從該數組中取出一段最后使 implode()函數將截取出來的數組重新轉化成字符串并返回二、案例實現header('Content-Type:text/html;charset=utf-利用正則表達式截取UTF-8@paramstring$str@paramint$start@paramheader('Content-Type:text/html;charset=utf-利用正則表達式截取UTF-8@paramstring$str@paramint$start@paramint$length@return functionreturnimplode('',array_slice(preg_split('//u',$str,-1,PREG_SPLIT_NO_EMPTY),$start,$length));}$strPHP學院$res=echo2、案例運行結果三、案例總結1、由于數組下標是從0開始計算,所以開始位置2的中文字符為“播2、preg_split()函數有兩個必填參數,第一個為用于搜索的模式,也就是正則表達式,第二個為要匹配的目標,字符串類型。第三個參數為可選參數,如果指定,則將顯示分割得到的子串最多只能有指定的個數,最后一個參數也是可選參數,具體細節請參考手冊。4 implode()函數是將數組以指定字符連接成字符串案例3- 1考核知識點文2練習目標掌握文件掌握在程序中如何運用文3需求分析通過本案例將完成“本文留言板”中的文件的功能。同時運用PHP的序列化(seralie)與反序列化(unseralie)函數來將變量轉換為可保存的字符串。4、設計思路(實現原理定義數組$message,數組元素有作者author、郵箱、時間time、留言內容content。3)到文本文件1.txt中4)編寫PHP程序1.txt,反序列化后顯示到網頁中1、編寫“留言板”的留言表單頁面indexhtml,代碼如下<!doctype<!doctype<metacharset="utf-8"<title>文本留言板<formaction="message.php"<table<th><td><input<td><inputtype="text"name="author"<th><td><inputtype="text" "<td><textarea<inputtype="submitvalue="提交留言class="button<inputtype="resetvalue="重新填寫class="button2、在瀏覽器中“留言”頁面,并填寫留言信息,效果如下圖所示3、接收用戶輸入的數據,將接收后的數組序列化后輸出網頁上。編 message.php,代碼如下if(isset($_POST['author'])&&isset($_POST[' '])&&$message='author'=> '' => =>date('Y-m-d'content'=> //}4、在瀏覽器 ,運行結果如下圖所示5、5、從瀏到文本文件中,保存為1.txt,與message.php放在同 下6、編寫 程序 文件,反序列化到數組中,然后將數據顯示到頁面上。代碼如下 文本$str=//反序列化$data=<!doctype<metacharset="utf-8"<title>文本留言板<table 7、從瀏覽器問show.php程序,結果如下圖所示1、file_get_contents()函數可以將文件的內容全部到一個字符串中2、 提供的序列化與反序列化函數可以使輕松地將各種類型的變量保存為字符串案例3-12 1、考核知識點寫入文2練習目標掌握文件的寫掌握如何運用文件保存數3需求分析GET4、設計思路(實現原理接收表單,將表單中提交的數據序列化后以“日期時間序號.dat”為文件名保存文件。序號通過隨機數生成。實現從GET接收參數(文件名)1、從案例3-11index.html文件3、提交表單測試“留言”功能,結果如下圖所示header('Content-Type:text/html;charset=utf-//$data=array('time'=>date('Y-m-d3、提交表單測試“留言”功能,結果如下圖所示header('Content-Type:text/html;charset=utf-//$data=array('time'=>date('Y-m-d ','content')as$data[$v]=isset($_POST[$v])?htmlspecialchars($_POST[$v]):}//生成文件名,根據時間戳和隨機$filename=time().rand(1,//}exit('沒有提交4、實現接收GET參數顯示指定留言。編寫show.php,代碼如下header('Content-Type:text/html;charset=utf-//通過GET$filename=isset($_GET['filename'])?$_GET['filename']://$filename=preg_match('/\d+/',$filename,$filename)?$filename[0].'.txt':exit('exit('} $str=$data=<!doctype<metacharset="utf-8"<title>文本留言板<table 5、點擊留言文件名測試顯示留言,結果如下圖所示1、file_put_contents()函數可以用來對文件進行寫入操2、當程序并發數比較高時可能會出現問題,可以通過生成文件名來盡可能避3、當留言數量比較多時,會造成一 下存在大量文件,可以通過創 來解決案例3-13 1、考核知識點文件加鎖機2練習目標了解文件加鎖機制原掌握在程序中應用文件加鎖機3需求分析對于上線的eb程序,先的就是并的問題,而在文件操作方面為明顯。分析留板的“寫入文本留言”案例,思考該案例中的程序在遇到高并發時會出現什么問題,本案例將用文件加鎖機制來改進。4、設計思路(實現原理在判斷文件是否存,添加文件鎖在文件寫入成功后,解除文件鎖functioncreateFileName(){returntime().rand(1,}//$filename=$filenamecreateFileName()}functioncreateFileName(){returntime().rand(1,}//$filename=$filenamecreateFileName()}上述代碼通過循環判斷程序自動生成文件名的文件是否存在,如果存在則重新生成再繼續判斷,如果不存在則創建該文件,并將$daa序列化保存到文件中。2、運用文件加鎖機制,將存在并發問題的代碼放入文件鎖中。代碼如下////通過lock.dat$fp=fopen('lock.dat',//if(flock($fp,LOCK_EX))//$filename=}flock($fp,exit('文件不能鎖定}上述代碼通過flock()數為lock.dat”文件添加了LOCK_EX獨占鎖定,當一個用戶進程在文件時加上鎖,其他用戶進程想要對該文件進行時,就必須等到鎖定被,這樣就可以避免并發時出現問題。1、當程序并發時,可能會有多個進程判斷為同一序號的文件不存在,造成兩個進程只寫了同一序號的文件,而使用文件加鎖機制就可以避免這個問題了。2、在編寫程序時,需要留意什么樣的程序存在并發問題,需要使用文件加鎖機制案例3- 1、考核知識點添加文2練習目標掌握信息,寫入信息的函了解添加文字的原理以及過3需求分析在本案例中首先載入一副PNG圖像,這幅圖像將作為文本的背景,來自表單的字符串直接作為生成的文本,通過設置字體、具體的位置,創建并輸出融合文字后的圖像。4、設計思路(實現原理設計一接收來自表單提交的數據并載入背景通過圖像處理函數添加文本信息到中顯示添加文本后的圖<!doctype<metacharset="utf-8"<title>學生信息卡片<formaction="card.php"<table<!doctype<metacharset="utf-8"<title>學生信息卡片<formaction="card.php"<table <td><inputtype="text"name="name"<th>學科<td><inputtype="text"name="subject"<th>學號<td><inputtype="text"name="number" <td><inputtype="text"name="url"<inputtype="submitvalue="制造卡片class="button<inputtype="resetvalue="重新填寫class="button2、通過瀏覽 程序,并填寫表單,效果如下圖所示//從$_POST取 、學科、學號$data=array();foreach(array('name','subject','number','url')as$v){$data[$v]=isset($_POST[$v])?$_POST[$v]://從$_POST取 、學科、學號$data=array();foreach(array('name','subject','number','url')as$v){$data[$v]=isset($_POST[$v])?$_POST[$v]:}$image=//為圖像分$color=imagecolorallocate($image,51,102,//使用Windows自帶的宋體字體將文本寫$font=//輸出圖像, 顯示在瀏覽器}exit('沒有輸入//輸出圖像, 顯示在瀏覽器header('Content-Typeimage/png')//輸出圖像, 顯示在瀏覽器header('Content-Typeimage/png')PNG//輸出圖像//銷毀圖像資//5、在瀏card.php,提交表單后,運行效果如下圖所示1、本案例著重已有信息,并添加文本到中,指定文本的位置和顏色2、本案例的知識點主要用于生成信息,可用于,生 、條形碼圖形等案例3-15 文件1、考核知識點文件2練習目標掌握通過HTTP響應消息頭實現文件3需求分析當需要在Web服務器中文件時,可以先將文件保存到服務器,然后通過服務器自動識別文件名進4、設計思路(實現原理實現將字符串作為文件實現文件進行1、1、創建文 index.php,實現通過瀏覽 一個字符串內容的文件。具體代碼如下2、在瀏覽器 ,程序運行結果如下圖所示//準備要作為文 的內$data='Thisisa//獲取字符$filesize=//$filename=//設置HTTP響應消息header('content-typeoctet-stream')表示內容是二進制流,不屬于某種文件類型header('content-length:'.$filesize);header('content- 3、打開后的文 data.txt,文件的內容如下圖所示4、4、編 download.php,實 一個文件進 。代碼如下//指定 的文件路$filepath=//獲取$filesize=//獲取文件$filename=header('content-$fpfopen($filepath'r')//$fp $buffer= //一 1KB的內容(即緩沖區,防止文件過大占用內存$count= // 字節while(!feof($fp)&&($filesize-$count>$data=fread($fp,$count+=$buffer;echo$data;}5、在瀏覽器中,程序運行結果如下圖所示通過HTTP響應頭可以實現文件案例3-16 1、考核知識點2練習目標
掌握利用保存用戶登錄狀3需求分析許多都為用戶提供了保存登錄狀態的功能,當用戶登錄成功后,下次時無需再次輸入。本案例接下來將會實現這個功能。4、設計思路(實現原理編寫用戶中心程序,判斷用戶是否登編寫用戶登錄程序,實現用戶名、的驗證,和自動登錄功能1、創建文 index.php,實現用戶中心功能,具體代碼如下header('Content-Type:text/html;charset=utf-//啟動SESSIONif(isset($_GET['action'])&&//清 數 ('username','',time()- ('password','',time()-//清除SESSION//如果SESSION中沒有其他數據SESSION}}//判斷SESSION//define('IS_LOGIN'true)define('IS_LOGIN',false);}//加載HTMLrequire<!doctype<metacharset="utf-8"<title>會員中心<div<?phpif(IS_LOGIN):<!doctype<metacharset="utf-8"<title>會員中心<div<?phpif(IS_LOGIN):<dive">“<span><?phpecho$userinfo['username'];<?phpelse:<?phpendIf;3、在瀏覽器 用戶中心,程序運行效。4、編 login.php,實現用戶登錄功能,具體代碼如下header('Content-Type:text/html;charset=utf-define('USERNAME','admin');//$error=//接收用戶$username=isset($_POST['username'])?trim($_POST['username']):$password=isset($_POST['password'])?$_POST['password']://驗證用戶if($username==USERNAME&&$password==//判斷用戶是否勾選了//將用戶名 保存 ,并 加 = _expire 保存1個}
('password',$password_ _expire);//保存$_SESSION['userinfo']='username$username將用戶名保存到 $error[]='用戶名 }}// 中存在登錄狀態 ['username'])&& //取出用戶$username= $password= //計$ua=isset($_SERVER['HTTP_USER_AGENT'])?$_SERVER['HTTP_USER_AGENT']: =//判斷用戶if($username==USERNAME&&$password== $_SESSION['userinfo']='username$username將用戶名保存到 }}//加載HTMLrequire6、在瀏login.php,程序運行效。<!doctype<metacharset="utf-8"<title>歡迎登錄6、在瀏login.php,程序運行效。<!doctype<metacharset="utf-8"<title>歡迎登錄<form<table <inputtype="checkboxclass="checkboxid="auto_loginname="auto_login"value="yes"/><labelfor="auto_login">下次自動登錄</label><inputtype="submitvalue="登錄class="button<?phpif(!empty($error)): class="error-box">登錄失敗,錯誤信息如下<ul><?phpforeach($erroras$v)echo"<li>$v</li>";<?phpendIf;7、登錄時,填寫正確的用戶名和,然后勾選“下次自動登錄”,登錄成功。然后關閉瀏覽器,重新打開瀏覽器用戶中心,當再次登錄時無需輸入用戶名和。通過可以保存用戶的用戶名和。考慮到安全性,在保存時應對進行加密案例3-17 1、考核知識點水2練習目標掌握通通過GD庫實現添加水3需求分析為添加水印的功能目前已經很普遍。用戶可
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 民宿短租平臺民宿住宿體驗評價協議
- 鄉村振興項目兼職經紀人合作協議
- 公共交通建筑電工勞務派遣及緊急搶修合同
- 八年級上冊英語知識點及固定搭配總結模版
- 新生兒護理員專業技能培訓服務協議
- 靈活用工平臺企業員工福利與保障服務合同
- 動畫電影角色形象授權及全球推廣合同
- 基因檢測機構生物樣本數據安全保密協議
- 城市更新項目公共設施拆遷補償及更新改造協議
- 校招營銷筆試題目及答案
- 壓力容器焊工試題及答案
- 2025-2031年中國醫學檢驗市場深度分析及行業前景展望報告
- 2025年安徽省合肥市第四十二中學中考二模物理試題(含答案)
- 少先隊理論測試題及答案
- 2024年河北省臨漳縣事業單位公開招聘村務工作者筆試題帶答案
- (市質檢)莆田市2025屆高中畢業班第四次教學質量檢測試卷英語試卷(含答案解析)
- 環宇電子科技公司鍍膜銑刀生產項目環評資料環境影響
- 2025廣西中馬欽州產業園區投資控股集團限公司招聘49人易考易錯模擬試題(共500題)試卷后附參考答案
- 工程過賬協議合同協議
- 快手開店合同協議
- 2025年第三屆天揚杯建筑業財稅知識競賽題庫附答案(501-1000題)
評論
0/150
提交評論