PHP與Web頁面交互是實現PHP網站與用戶交互的重要手段。在PHP中提供了兩種與Web頁面交互的方法,一種是通過Web表單提交數據,另一種是通過URL參數傳遞。
這里我們將詳細講解表單的相關知識,為以后學習PHP頁面交互做好鋪墊。
1 、創建表單
Web表單的功能是讓瀏覽者和網站有一個互動的平台。Web表單主要用來在網頁中發送數據到服務器,如提交注冊信息時需要使用表單。當用戶填寫完信息后執行提交(submit)操作,於是將表單中的數據從客戶端的瀏覽器傳送到服務器端,經過服務器端PHP程序進行處理后,再將用戶所需要的信息傳遞回客戶端的瀏覽器上,從而獲得用戶信息,使PHP與Web表單實現交互。使用<form>元素,在HTML標記間插入表單元素,即可創建一個表單。
代碼片段
<form name="form_name" method="method" action="url" enctype="value" target="target_win" id="id">
……
</form >
屬性 |
說明 |
name |
表單名 |
method |
設置表單的提交方式,即GET或則POSt(GET方法將表單內容附加在URL地址后面。POST方法將表單中的信息作為一個數據發送到服務器處理程序中,在瀏覽器的地址欄不顯示提交的信息。Method默認為get) |
action |
設置表單數據提交的URL(相對位置或則絕對位置) |
enctype |
指定數據傳送到服務器時瀏覽器使用的編碼類型(用於對表單內容進行編碼的 MIME 類型。) |
target |
設置返回信息的顯示格式 |
application/x-www-form-urlencoded 默認的MIME類型,表示表單數據應該被編碼成一個長串。
Multipart/form-data:上傳文件專用類型,表示將每一個編碼作為一個獨立的部分使用。
Text/plain:將表單數據提交給一個電子郵件地址,數據以純文本形式進行編碼,其中不含任何控件或格式字符。
target屬性值:
<form>標記中target屬性的設置,可以控制提交頁在窗口中的打開方式。
_blank:將返回頁面信息顯示在新的窗口中。
_parent:將返回信息顯示在父級窗口中。
_self:將返回信息顯示在當前窗口中。
_top:將返回信息顯示在頂級窗口中。
在使用form表單時,必須要指定其行為屬性action,它指定表單提交數據的處理頁。GET方法是將表單內容附加在URL地址后面;POST方法是將表單中的信息作為一個數據塊發送到服務器上的處理程序中,在瀏覽器的地址欄不顯示提交的信息。method屬性默認為GET方法。
2 、認識表單元素
表單由表單元素組成。常用的表單元素有以下幾種標記:輸入域標記<input>、選擇域標記<select>和<option>、文本域標記<textarea>等。下面分別進行介紹。
2.1 輸入域標記<input>
輸入域標記<input>是表單中最常用的標記之一。常用的文本域、按鈕、單選按鈕及復選框等構成了一個完整的表單。
參數name是指輸入域的名稱,參數type是指輸入域的類型。在<input type=" ">標記中一共提供了10種類型的輸入區域,用戶所選擇使用的類型由type屬性決定。type屬性取值及舉例如表所示。
2.2 選擇域標記<select>和<optiom>
通過選擇域標記<select>和<option>可以建立一個列表或者菜單。菜單節省空間,正常狀態下只能看到一個選項,單擊按鈕打開菜單后才能看到全部的選項。列表可以顯示一定數量的選項,如果超出了這個數量,會自動出現滾動條,瀏覽者可以通過拖動滾動條來查看各選項。
語法:
參數name表示選擇域的名稱;參數size表示列表的行數;參數value表示菜單選項值;參數multiple表示以菜單方式顯示數據,省略則以列表方式顯示數據。
2.3 文本域標記<textarea>
文本域標記<textarea>用來制作多行的文本域,可以在其中輸入更多的文本。
參數name表示文本域的名稱;rows表示文本域的行數;cols表示文本域的列數(這里的rows和cols以字符為單位);value表示文本域的默認值。warp用於設定顯示和送出時的換行方式,值為off表示不自動換行;值為hard表示自動按Enter鍵換行,換行標記一同被發送到服務器,輸出時也會換行;值為soft表示自動按Enter鍵換行,換行標記不會被發送到服務器,輸出時仍然為一列。
3 、在Web頁面中創建表單
在一個Web頁面中,允許有多個表單,在編寫代碼時,由表單的name和ID屬性值對各個表單進行區分。
4 、在Web頁面中嵌入PHP腳本
在Web頁中嵌入PHP腳本的方法有兩種:一種是直接在HTML標記中添加"<?php?>"PHP標記符,寫入PHP腳本;另二種是對表單元素的value屬性進行賦值。下面分別對這兩種方法進行講解。
4.1 直接添加標記符
在Web編碼過程中,通過在HTML標記中添加PHP腳本標記"<?php ?>"來嵌入PHP腳本,兩個標記之間的所有文本都會被解釋為PHP語言,而標記之外的任何文本都會被認為是普通的HTML。
4.2 為表單賦值
在Web程序開發過程中,為了使表單元素在運行時有默認值,通常需要對表單元素的value屬性進行賦值。下面通過具體的實例講解賦值的方法。
5 、提交表單數據
交表單數據有兩種方法:POST方法和GET方法。采用哪種方法提交表單數據由<form>表單的method屬性值決定。下面詳細講解這兩種提交表單數據的方法。
5.1 POST方法
應用POST方法提交表單數據的方法非常簡單,只需要將<form>表單中的method屬性值設置成"POST"即可。POST方法不依賴於URL,不會將傳遞的參數值顯示在地址欄中。另外,POST方法可以沒有限制地傳遞數據到服務器,所有提交的信息在后台傳輸,用戶在瀏覽器端是看不到這一過程的,安全性高。所以,POST方法比較適合用於發送一個保密的(如信用卡號)或者比較大量的數據到服務器。
<body>
<form name="example" method="post"action="success.php">
姓名:<inputtype="text" name="name"/> <br/>
密碼 :<input type="password" name="password"/>
<inputtype="submit" value="提交"/>
</form>
</body>
5.2 GET方法
GET方法是<form>表單中method屬性的默認方法。使用GET方法提交的表單數據被附加到URL上,並作為URL的一部分發送到服務器端。在程序的開發過程中,由於GET方法提交的數據是附加到URL上發送的,因此,在URL的地址欄中將會顯示"URL+用戶傳遞的參數"。
<body>
<form name="example" method="get"action="success.php">
姓名:<inputtype="text" name="name"/> <br/>
密碼 :<input type="password" name="password"/>
<inputtype="submit" value="提交"/>
</form>
</body>
顯而易見,這種方法會將參數暴露無疑。如果用戶傳遞的參數是非保密性的參數(如id=8),那么采用GET方法傳遞數據是可行的;如果用戶傳遞是保密性的參數(如用戶登錄的密碼,或者信用卡號等),這種方法就會不安全。解決該問題是將表單的method指定的GET方法改為POST方法。
注意:若要使用GET方法發送表單,URL的長度應限制在1MB字符以內。如果發送的數據量太大,數據將被截斷,從而導致意外或失敗的處理結果。
6 、POST方法與GET方法的使用區別
在瀏覽器中向服務器發送表單數據的方法有兩種,即POST方法和GET方法。這兩種方法在Web頁面的應用上有着本質的不同。
POST方法發送變量數據時,對於用戶而言是保密性質的。從HTTP協議來看,數據附加於header的頭信息中,用戶不能隨意修改,這對於Web應用程序而言,安全性要好得多,而且使用POST方法向Web服務器發送數據的大小不受限制。
GET方法是在訪問URL時使用瀏覽器地址欄傳遞值。GET方法方便直觀,但缺點是訪問該網站的用戶也可以修改URL串后發送給服務器,GET傳遞的字符串長度有一定的限制,不能超過250個字符,如果超長,瀏覽器會自動截取,導致數據丟失或程序運行出錯。另外,GET方法不支持ASCII字符之外的任何字符,如果包含有漢字或其他非ASCII字符,需要應用PHP的內置函數將參數值轉換成其他編碼格式進行傳遞。
因此,在網站開發過程中,程序員應根據實際需要靈活地選擇POST方法和GET方法來提交表單數據。
7 、POST方法與GET方法的使用區別
PHP的全局變量有3種:$_POST[ ]、$_GET[ ]和$_SESSION[ ],分別用於獲取表單、URL、Session變量的值。這3種方法在使用上有很大的區別,下面分別進行詳細介紹。
7.1 $_POST[ ]全局變量
使用PHP的$_POST[]全局變量可以獲取表單元素的值。在實際程序開發過程中,使用哪種方法獲取數據資源,是由<form>表單元素的method屬性決定的。如果表單中method屬性指定的是用POST方法進行數據傳遞,那么在處理數據時就應該使用$_POST[ ]全局變量獲取表單數據。
通過$_POST[ ]全局變量獲取表單數據,實際上就是獲取不同的表單元素的數據。<form>標簽中的name是所有表單元素都具備的屬性,即為這個表單元素的名稱,在使用時需要使用name屬性來獲取相應的value屬性值。所以添加的所有控件必須定義其name屬性值,另外,為了避免獲取的數據出現錯誤,表單元素在命名上盡可能不要重復,盡量使用具有一定意義的英文縮寫或拼音命名。
7.2 $_GET[ ]全局變量
PHP使用$_GET[]全局變量獲取通過GET方法傳遞的值,使用格式為:
$_GET[name]
例如,創建一個表單,設置method屬性值為GET,添加一個文本框,name為user,獲取表單元素值的代碼如下。
注意:PHP可以應用$_POST[]或$_GET[]全局變量來獲取表單元素的值。但值得注意的是,獲取的表單元素名稱區分字母大小寫。如果在編寫Web程序時忽略字母大小寫,那么在程序運行時將獲取不到表單元素的值或彈出錯誤提示信息。
7.3 $_SEESION[ ]全局變量
使用$_SEESION[]變量可以跨頁獲取變量的值,格式為:
$_SEESION[name]
在PHP動態頁中,可以將變量或者表單元素的值賦值給$_SEESION[]全局變量,進而實現變量值或者表單元素值的跨頁傳遞。
例如,建立一個表單,添加一個文本框,命名為user,應用$_SEESION[]全局變量獲取表單元素的代碼如下。
代碼片段
$user=$_SESSION["user"]
應用$_SEESION[]傳參的方法獲取的變量值,保存之后任何頁面都可以使用。但是這種方法很耗費系統資源,建議讀者慎重使用。