一、表單簡介
表單的處理是一個多進程。首先創建一張表單,以供用固話輸入詳細的請求信息。接着,輸入的數據被發送到服務器,在服務器里這些數據得到編譯和錯誤檢測。如果PHP代碼識別出一個或多個需要重新輸入的字段,則帶有相關錯誤信息的表單會被重新顯示。當精確的輸入信息滿足代碼的需要時,代碼會采取一些調用數據庫的行動。
要建立一個表單,至少要有下面這些元素:
- 一個打開的<form>和關閉的</form>標記
- 一個指定POST或GET方法的提交類型
- 一個或多個輸入字段
- 表單數據提交的目的地址
<?phpe //formtext.php if(isset($_POST['name'])) $name = $_POST['name']; else $name = "(not entered)"; echo <<<_END <html> <head> <title>Form Text</titile> </head> <body> <form method="post" action="formtext.php"> What is your name? <input type="text" name="name" /> <input type="submit" /> </form> </body> </html> _END; ?>
PHP的isset()函數用來測試變量是否已經被賦值。
二、輸入類型
HTML表單非常靈活,允許提交各種類型的輸入,常見的有:文本框、文本域、復選框和單選按鈕等。
1.文本框:以單行的形式接受各種字母、文字和其他字符,一般文本框的輸入格式如下:
<imput type="text" name="name" size="size" maxlength="length" value="value" />
name參數設定輸入數據的名稱,當表單傳到PHP文件時可以使用 $_POST['name']或$_GET['name'] 獲取輸入的文本;size參數用於設置文本框的寬度;maxlength參數允許指定輸入字符的最大長度;value參數用於指定默認值。
2.文本域:和文本框類似,但允許多行輸入,文本域的輸入格式如下:
<textarea name="name" cols="width" rows="hight" wrap="type">Text</textarea>
wrap參數用於控制換行,可選參數值有:不換行的(off)、換行,當一串字符沒有回車換行時發送給服務器(soft)、換行,當一串字符有軟回車時以換行格式發送給服務器(hard)。
3.復選框:為用戶提供不同的選項,以供用戶選擇其中的一個或幾個,使用格式如下:
<input type="checkbox" name="name" value="value" checked="checked" />
引入checked參數,當瀏覽器顯示時,復選框已被選定。若不包含這個參數,復選框則顯示未被檢測。
注意:如果允許依次選中多個條目,要將它們賦予相同的名字。然而,這樣只有最后一個被選中的條目會被提交,除非把數組作為名字來傳遞。
<form method="post" action="mytest.php"> Vanilla <input type="checked" name="ice" values="vanilla" /> Chocolate <input type="checked" name="ice" values="chocolate" /> Strawberry <input type="checked" name="ice" values="strawberry" /> </form>
上面表單中,如果只有一個復選框被選中,那就只有一項會被提交(即字段ice會被賦予的值);但如果有兩個或多個被選中,只有最后一個選中的值會被提交,先前的值會被忽視。想提交多個選擇,我們要用數組來傳遞,對上面的代碼做一點小小的額修改:
<form method="post" action="mytest.php"> Vanilla <input type="checked" name="ice[]" values="vanilla" /> Chocolate <input type="checked" name="ice[]" values="chocolate" /> Strawberry <input type="checked" name="ice[]" values="strawberry" /> </form>
這樣,當表單被提交時,如果選中其中任意項,一個叫做ice的數組將被提交,數組包含所有選中的值。
4.單選按鈕:用於從兩個或多個選項中只選擇一個。一組中的所有按鈕必須使用相同的名字,因為只有一個單值被返回,所以不需要數組傳遞。
<form method="post" acthion="mytest.php"> 8am-Noon<input type="radio" name="time" value="1" /> | Noon-4pm<input type="radio" name="time" value="2" /> | 4pm-8pm<input type="radio" name="time" value="3" /> </form>
5.select標記:用於創建下拉選項列表,提供了單選或多選。使用格式如下:
<select name="name" size="size" multiple="multiple">
size參數表示要顯示的行數,即在網頁上同時顯示的選項的數量;multiple參數用於讓用戶按住Ctrl鍵后可以從列表中點擊選擇多個選項。另外,如果想給定默認選項,可以使用selected參數,將參數的值設置為"selected"就可以了。
<form method="post" action="mytest.php"> Vegetables : <select name="veg" size="2" multiple="multiple"> <option value="Peas">Peas</option> <option value="Beans">Beans</option> <option value="Carrots">Carrots</option> <option value="Cabbage">Cabbage</option> <option value="Broccoli">Broccoli</option> </select> </form>
6.lebel標記:運用標記可以環繞表單元素,通過點擊<label>標記間的任意可見部分使表單可選,給用戶一個良好的體驗。
<label>8am-Noon<input type="radio" name="time" value="1" /></label>
7.Submit按鈕:提交表單的按鈕,為了適應被提交表單的類型,可以通過使用value參數的值改變提交按鈕的標題名,也可以通過使用選定的圖片來替代標准的文本按鈕。
<input type="submit" name="mysubmit" value="這是一個提交按鈕" /> <input type="image" name="submit" src="image.gif" />
三、輸入凈化
在處理從用戶得到的信息之前,絕不能輕易相信任何從$_GET或$_POST數組中得到的變量。如果沒有這么做,用戶可能會嘗試將JavaScript插入到這些數據中來干擾你的網站的操作,或企圖添加MySQL命令來損壞你的數據庫。
<?php $variable = $_POST['user_input']; function sanitizeString($var) { if (get_magic-quotes_gpc()) $var = stripslashes($var); //除去字符里的反斜線"\" $var = htmlentities($var); //把字符轉化為HTML實體 $var = strip_tage($var); //去除字符中的HTML標簽 return $var; } function sanitizeString($var) { $var = mysql_real_escape_string($var); //轉義sql使用的特殊字符 $var = sanitizeString($var); return $var; } ?>