



下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、PHP 學(xué)習(xí)筆記(二):表單:表單處理,表單驗(yàn)證,表單實(shí)例PHP 表單PHP 超全局變量$_GET 和 $_POST 用于收集表單數(shù)據(jù)(form-data )。1GET vs. POSTGET 和 POST 都創(chuàng)建數(shù)組 (例如,array( key => value, key2 => value2, key3 => value3,))。此數(shù)組包含鍵 / 值對(duì),其中的鍵是表單控件的名稱,而值是來自用戶的輸入數(shù)據(jù)。GET 和 POST 被視作 GET 和 _POST。它們是超全局變量,這意味著對(duì)它們的訪問無需考慮作用域 - 無需任何特殊代碼,您能夠從任何函數(shù)、類或文件訪問它們。$
2、_GET 是通過URL 參數(shù)傳遞到當(dāng)前腳本的變量數(shù)組。$_POST 是通過HTTP POST 傳遞到當(dāng)前腳本的變量數(shù)組。何時(shí)使用GET ?通過GET 方法從表單發(fā)送的信息對(duì)任何人都是可見的(所有變量名和值都顯示在URL中)。GET 對(duì)所發(fā)送信息的數(shù)量也有限制。 限制在大于 2000 個(gè)字符。不過,由于變量顯示在 URL 中,把頁面添加到書簽中也更為方便。GET 可用于發(fā)送非敏感的數(shù)據(jù)。何時(shí)使用POST?通過POST 方法從表單發(fā)送的信息對(duì)其他人是不可見的(所有名稱/值會(huì)被嵌入HTTP請(qǐng)求的主體中),并且對(duì)所發(fā)送信息的數(shù)量也無限制。此外POST 支持高階功能,比如在向服務(wù)器上傳文件時(shí)進(jìn)行mult
3、i-part二進(jìn)制輸入。不過,由于變量未顯示在URL 中,也就無法將頁面添加到書簽。PHP 表單驗(yàn)證PHP 表單驗(yàn)證實(shí)例文本字段ame、email 和 website 屬于文本輸入元素,comment 字段是文本框。 HTML代碼是這樣的:Name: <input type="text" name="name">E-mail: <input type="text" name="email">Website: <input type="text" name="
4、;website">Comment: <textarea name="comment" rows="5" cols="40"></textarea>單選按鈕gender 字段是單選按鈕,HTML代碼是這樣的:Gender:<input type="radio" name="gender" value="female">Female<input type="radio" name="gend
5、er" value="male">Male表單元素表單的HTML代碼是這樣的:<form method="post" action="<?php echo htmlspecialchars($_SERVER"PHP_SELF");?>">當(dāng)提交此表單時(shí),通過method=” post” 發(fā)送表單數(shù)據(jù)。什么是$_SERVER “ PHP_SELF ” 變量?$_SERVER"PHP_SELF"是一種超全局變量,它返回當(dāng)前執(zhí)行腳本的文件名。因此, $_SERV
6、ER"PHP_SELF"將表單數(shù)據(jù)發(fā)送到頁面本身,而不是跳轉(zhuǎn)到另一張頁面。這樣,用戶就能夠在表單頁面獲得錯(cuò)誤提示信息。什么是htmlspecialchars() 函數(shù)?htmlspecialchars() 函數(shù)把特殊字符轉(zhuǎn)換為HTML實(shí)體。這意味著字符會(huì)被替換為<和 >。這樣可防止攻擊者通過在表單中注入代碼(跨站點(diǎn)腳本攻擊)對(duì)代碼進(jìn)行利用。關(guān)于PHP 表單安全性的重要提示< 和> 之類的HTMLHTML或 JavaScript$_SERVER “PHP_SELF ” 變量能夠被黑客利用!如果您的頁面使用了PHP_SELF ,用戶能夠輸
7、入下劃線然后執(zhí)行跨站點(diǎn)腳本(XSS )。提示:跨站點(diǎn)腳本 ( Cross-site scripting ,XSS)是一種計(jì)算機(jī)安全漏洞類型,用程序。 XSS 能夠使攻擊者向其他用戶瀏覽的網(wǎng)頁中輸入客戶端腳本。常見于Web應(yīng)假設(shè)我們的一張名為“ test_form.php ” 的頁面中有如下表單:<form method="post" action="<?php echo $_SERVER"PHP_SELF"?>"> 1現(xiàn)在,如果用戶進(jìn)入的是地址欄中正常的URL :“,上面的代碼會(huì)轉(zhuǎn)換為:<form met
8、hod="post" action="test_form.php">1到目前,一切正常。不過,如果用戶在地址欄中鍵入了如下URL :1在這種情況下,上面的代碼會(huì)轉(zhuǎn)換為:<form method="post" action="test_form.php"/><script>alert('hacked')</script>1這段代碼加入了一段腳本和一個(gè)提示命令。并且當(dāng)此頁面加載后,就會(huì)執(zhí)行JavaScript代碼(用戶會(huì)看到一個(gè)提示框) 。這僅僅是一個(gè)關(guān)于PHP
9、_SELF 變量如何被利用的簡(jiǎn)單無害案例。您應(yīng)該意識(shí)到 <script> 標(biāo)簽內(nèi)能夠添加任何JavaScript 代碼!黑客能夠把用戶重定向到另一臺(tái)服務(wù)器上的某個(gè)文件, 該文件中的惡意代碼能夠更改全局變量或?qū)⒈韱翁峤坏狡渌刂芬员4嬗脩魯?shù)據(jù),等等。如果避免$_SERVER “PHP_SELF ” 被利用?通過使用htmlspecialchars() 函數(shù)能夠避免$_SERVER “ PHP_SELF” 被利用。表單代碼是這樣的:<form method="post" action="<?php echo htmlspecialchars($
10、_SERVER"PHP_SELF");?>"> 1htmlspecialchars()函 數(shù) 把 特 殊 字 符 轉(zhuǎn) 換 為HTML實(shí) 體 。 現(xiàn) 在 , 如 果 用 戶 試 圖 利 用PHP_SELF 變量,會(huì)導(dǎo)致如下輸出:<form method="post" action="test_form.php/"><script>alert('hacked')</script>"> 1無法利用,沒有危害!通過PHP 驗(yàn)證表單數(shù)據(jù)我們要做的第一件事是
11、通過PHP 的 htmlspecialchars()函數(shù)傳遞所有變量。在我們使用htmlspecialchars() 函數(shù)后,如果用戶試圖在文本字段中提交以下內(nèi)容:1代碼不會(huì)執(zhí)行,因?yàn)闀?huì)被保存為轉(zhuǎn)義代碼,就像這樣:現(xiàn)在這條代碼顯示在頁面上或e-mail 中是安全的。在用戶提交該表單時(shí),我們還要做兩件事:(通過PHP trim()函數(shù))去除用戶輸入數(shù)據(jù)中不必要的字符(多余的空格、制表符、換行)(通過PHP stripslashes() 函數(shù))刪除用戶輸入數(shù)據(jù)中的反斜杠()接下來我們創(chuàng)建一個(gè)檢查函數(shù)(相比一遍遍地寫代碼,這樣效率更好)。我們把函數(shù)命名為test_input() 。現(xiàn)在,我們能夠通過
12、test_input()函數(shù)檢查每個(gè)$_POST 變量,腳本是這樣的:<?php/ 定義變量并設(shè)置為空值$name = $email = $gender = $comment = $website = ""if ($_SERVER"REQUEST_METHOD" = "POST") $name = test_input($_POST"name");$email = test_input($_POST"email");$website = test_input($_POST"web
13、site");$comment = test_input($_POST"comment");$gender = test_input($_POST"gender");function test_input($data) $data = trim($data);$data = stripslashes($data);$data = htmlspecialchars($data);return $data;?>請(qǐng)注意在腳本開頭,我們檢查表單是否使用$_SERVER“ REQUEST_METHOD ” 進(jìn)行提交。如果REQUEST_METHOD
14、是 POST,那么表單已被提交- 并且應(yīng)該對(duì)其進(jìn)行驗(yàn)證。如果未提交,則跳過驗(yàn)證并顯示一個(gè)空白表單。PHP 表單驗(yàn)證- 必填字段本節(jié)展示如何制作必填輸入字段,并創(chuàng)建需要時(shí)所用的錯(cuò)誤消息。PHP - 輸入字段從上一節(jié)中的驗(yàn)證規(guī)則中,我們看到“Name”,“ E-mail ” 以及“ Gender” 字段是必需的。這些字段不能為空且必須在HTML表單中填寫。在上一節(jié)中,所有輸入字段都是可選的。在下面的代碼中我們?cè)黾恿艘恍┬伦兞浚?nameErr、$emailErr 、$genderErr這些錯(cuò)誤變量會(huì)保存被請(qǐng)求字段的錯(cuò)誤消息。我們還為每個(gè)$_POST以及$websiteErr 。變量添加了一個(gè)ife
15、lse 語句。這條語句檢查$_POST 變量是否為空(通過則錯(cuò)誤消息會(huì)存儲(chǔ)于不同的錯(cuò)誤變量中。如果不為空,則通過PHP empty() 函數(shù))。如果為空,test_input() 函數(shù)發(fā)送用戶輸入數(shù)據(jù):<?php/ 定義變量并設(shè)置為空值$nameErr = $emailErr = $genderErr = $websiteErr = ""$name = $email = $gender = $comment = $website = ""if ($_SERVER"REQUEST_METHOD" = "POST"
16、;) if (empty($_POST"name") else $name = test_input($_POST"name");if (empty($_POST"email") $emailErr = "Email is required" else $email = test_input($_POST"email");if (empty($_POST"website") $website = "" else $website = test_input(
17、$_POST"website");if (empty($_POST"comment") $comment = "" else $comment = test_input($_POST"comment");if (empty($_POST"gender") $genderErr = "Gender is required" else $gender = test_input($_POST"gender");?>PHP - 顯示錯(cuò)誤消息在 HTML 表單
18、中,我們?cè)诿總€(gè)被請(qǐng)求字段后面增加了一點(diǎn)腳本。如果需要,會(huì)生成恰當(dāng)?shù)腻e(cuò)誤消息(如果用戶未填寫必填字段就試圖提交表單):<form method="post" action="<?php echo htmlspecialchars($_SERVER"PHP_SELF");?>">Name: <input type="text" name="name"><span class="error">* <?php echo $name
19、Err;?></span><br><br>E-mail:<input type="text" name="email"><span class="error">* <?php echo $emailErr;?></span><br><br>Website:<input type="text" name="website"><span class="erro
20、r"><?php echo $websiteErr;?></span><br><br><label>Comment: <textarea name="comment" rows="5" cols="40"></textarea> <br><br>Gender:<input type="radio" name="gender" value="female&qu
21、ot;>Female<input type="radio" name="gender" value="male">Male<span class="error">* <?php echo $genderErr;?></span><br><br><input type="submit" name="submit" value="Submit"></form>
22、接下來是驗(yàn)證輸入數(shù)據(jù),即“ Name 字段是否只包含字母和空格?” ,以及“ E-mail 字段是否包含有效的電子郵件地址語法?” ,并且如果填寫了 Website 字段,“這個(gè)字段是否包含了有效的 URL ?”。PHP表單驗(yàn)證- 驗(yàn)證E-mail和URL本節(jié)展示如何驗(yàn)證名字、電郵和URL 。PHP -驗(yàn)證名字以下代碼展示的簡(jiǎn)單方法檢查name字段是否包含字母和空格。如果name字段無效,則存儲(chǔ)一條錯(cuò)誤消息:$name = test_input($_POST"name");if (!preg_match("/a-zA-Z *$/",$name) $nam
23、eErr = " 只允許字母和空格!"注釋: preg_match()(正則表達(dá)式)函數(shù)檢索字符串的模式,如果模式存在則返回true,否則返回false。PHP - 驗(yàn)證 E-mail以下代碼展示的簡(jiǎn)單方法檢查e-mail 地址語法是否有效。如果無效則存儲(chǔ)一條錯(cuò)誤消息:$email = test_input($_POST"email");if (!preg_match("/(w-+w-+.w-+)/",$email) $emailErr = "無效的email格式!"PHP - 驗(yàn)證 URL以下代碼展示的方法檢查U
24、RL 地址語法是否有效 (這條正則表達(dá)式同時(shí)允許杠)。如果URL地址語法無效,則存儲(chǔ)一條錯(cuò)誤消息:URL中的斜$website = test_input($_POST"website");if (!preg_match("/b(?:(?:https?|ftp):/|www.)-a-z0-9+&#/%?=_|!:,.;*-a-z0-9+&#/% =_|/i",$website) $websiteErr = " 無效的URL"PHP - 驗(yàn)證 Name、 E-mail 、以及URL現(xiàn)在,腳本是這樣的:<?php/ 定
25、義變量并設(shè)置為空值$nameErr = $emailErr = $genderErr = $websiteErr = ""$name = $email = $gender = $comment = $website = ""if ($_SERVER"REQUEST_METHOD" = "POST") if (empty($_POST"name") $nameErr = "Name is required" else $name = test_input($_POST"
26、;name");/ 檢查名字是否包含字母和空格if (!preg_match("/a-zA-Z *$/",$name) $nameErr = "Only letters and white space allowed"if (empty($_POST"email") $emailErr = "Email is required" else $email = test_input($_POST"email");/ 檢查電郵地址語法是否有效if (!preg_match("/(w
27、-+w-+.w-+)/",$email) $emailErr = "Invalid email format"if (empty($_POST"website") $website = "" else $website = test_input($_POST"website");/ 檢查URL地址語言是否有效(此正則表達(dá)式同樣允許URL中的下劃線)if(!preg_match("/b(?:(?:https?|ftp):/|www.)-a-z0-9+&#/%?=_|!:,.;*-a-z0-
28、9+&#/% =_|/i",$website) $websiteErr = "Invalid URL"if (empty($_POST"comment") $comment = "" else $comment = test_input($_POST"comment");if (empty($_POST"gender") $genderErr = "Gender is required" else $gender = test_input($_POST"gender");?>接下來向您講解如何防止表單在用戶提交表單后保留輸入字段中的值。PHP -保留表單中的值如需在用戶點(diǎn)擊提交按鈕后在輸入字段中顯示值,我們?cè)谝韵螺斎胱侄蔚募恿艘恍《蜳HP 腳本: name、email 以及website。在 commentvalue 屬性中增文本框字段中,我們把腳本放到了<textarea>與<
溫馨提示
- 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. 人人文庫(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年黑龍江省建筑安全員A證考試題庫(kù)及答案
- 覆土撒播有機(jī)肥施工方案
- 單位購(gòu)置窗簾合同范本
- 出租鄉(xiāng)鎮(zhèn)倉(cāng)庫(kù)房合同范本
- 二年級(jí)口算題目全集100道
- 企業(yè)標(biāo)志商標(biāo)設(shè)計(jì)合同范本
- 卸貨安全合同范本
- 全村荒地出租合同范例
- 寫真退款合同范本
- 單位車輛報(bào)廢合同范例
- 統(tǒng)籌管理方案
- 建筑工程安全文明施工標(biāo)準(zhǔn)化圖集(附圖豐富)
- 人教版 美術(shù)二年級(jí)上冊(cè) 第9課 蜻蜓飛飛 教案
- Unit 1 Travel教案-2023-2024學(xué)年高一下學(xué)期 中職英語高教版(2023修訂版)基礎(chǔ)模塊2
- DB3206T 1083-2024機(jī)關(guān)會(huì)議服務(wù)人員操作技術(shù)規(guī)范
- 習(xí)作《我的家人 》教案-2024-2025學(xué)年統(tǒng)編版語文四年級(jí)上冊(cè)
- 眼鏡學(xué)智慧樹知到答案2024年溫州醫(yī)科大學(xué)
- 24年注安-其他安全-必背考點(diǎn)-王培山
- 《積極心理學(xué)(第3版)》 課件 第9章 積極的愛
- 中醫(yī)淋巴排毒
- 第四屆檔案職業(yè)技能競(jìng)賽理論試題庫(kù)資料-上(選擇題)
評(píng)論
0/150
提交評(píng)論