PHP 中的$_GET 和$_POST 變數用於檢索表單中的信息,例如使用者輸入。
有一點很重要的事情值得注意,當處理HTML 表單時,PHP 能把來自HTML 頁面中的表單元素自動變成可供PHP 腳本使用。
下面的實例包含了一個HTML 表單,有兩個輸入框和一個提交按鈕。
<html><head><metacharset="utf-8"><title>源碼網(downcodes.com)</title></head><body> <formaction="welcome.php"method="post">姓名: <inputtype="text"name="fname">年齡: <inputtype="text"name="age"><inputtype="submit"value="提交"></form> </body></ html>
當使用者填寫完上面的表單並點擊提交按鈕時,表單的資料會被送到名為"welcome.php" 的PHP 檔案:
歡迎<?phpecho$_POST["fname"]; ?>!<br>你的年齡是 <?phpecho$_POST["age"]; ?> 歲。
我們將在下一章中講解PHP 中的$_GET 和$_POST 變數。
以下實例我們設定了下拉式選單三個選項,表單使用GET 方式取得數據,action 屬性值為空表示提交到目前腳本,我們可以透過select 的name 屬性取得下拉式選單的值:
<?php$q= isset($_GET['q'])? htmlspecialchars($_GET['q']): '';if($q){ if($q=='CODERCTO'){ echo'原始碼網<br>http://www.downcodes.com'; }elseif($q=='GOOGLE'){ echo'Google 搜尋<br>http://www.google.com'; }elseif($q=='TAOBAO'){ echo'淘寶<br>http://www.taobao.com'; }}else{?><formaction=""method="get"> <selectname=" q"> <optionvalue="">選擇一個網站:</option> <optionvalue="CODERCTO">codercto</option> <optionvalue="GOOGLE">Google</option> <optionvalue="TAOBAO">Taobao</option> </select> <inputtype="submit"value="提交"> </form><?php}?>
如果下拉式選單是多重選擇的( multiple="multiple"),我們可以透過設定select name="q[]"以陣列的方式取得,以下使用POST 方式提交,程式碼如下所示:
<?php$q= isset($_POST['q'])? $_POST['q']: '';if(is_array($q)){ $sites= array( 'CODERCTO'=> '源碼網: http://www.downcodes.com', 'GOOGLE'=> 'Google 搜尋: http://www.google.com', 'TAOBAO'=> '淘寶: http://www.taobao.com', ); foreach($qas$val){ //PHP_EOL 為常數,用於換行echo$sites[$val]. PHP_EOL; } }else{?><formaction=" "method="post"> <selectmultiple="multiple"name="q[]"> <optionvalue="">選擇一個網站:</option> <optionvalue="CODERCTO">codercto</option> <optionvalue="GOOGLE">Google</option> <optionvalue="TAOBAO">Taobao</option> </select> <inputtype="submit"value="提交"> </form><?php}?>
PHP 單選按鈕表單中name 屬性的值是一致的,value 值是不同的,程式碼如下所示:
<?php$q= isset($_GET['q'])? htmlspecialchars($_GET['q']): '';if($q){ if($q=='CODERCTO'){ echo'原始碼網<br>http://www.downcodes.com'; }elseif($q=='GOOGLE'){ echo'Google 搜尋<br>http://www.google.com'; }elseif($q=='TAOBAO'){ echo'淘寶<br>http://www.taobao.com'; }}else{?><formaction=""method="get"> <inputtype=" radio"name="q"value="CODERCTO"/>codercto <inputtype="radio"name="q"value="GOOGLE"/>Google <inputtype="radio"name="q"value="TAOBAO"/>Taobao <inputtype="submit"value="提交"></form><?php}?>
PHP checkbox 複選框可以選擇多個值:
<?php$q= isset($_POST['q'])? $_POST['q']: '';if(is_array($q)){ $sites= array( 'CODERCTO'=> '源碼網: http://www.downcodes.com', 'GOOGLE'=> 'Google 搜尋: http://www.google.com', 'TAOBAO'=> '淘寶: http://www.taobao.com', ); foreach($qas$val){ //PHP_EOL 為常數,用於換行echo$sites[$val]. PHP_EOL; } }else{?><formaction=" "method="post"> <inputtype="checkbox"name="q[]"value="CODERCTO">codercto<br> <inputtype="checkbox"name="q[]"value="GOOGLE">Google<br> <inputtype="checkbox"name="q[]"value="TAOBAO">Taobao<br> <inputtype=" submit"value="提交"></form><?php}?>
我們應該盡可能的對使用者的輸入進行驗證(透過客戶端腳本)。瀏覽器驗證速度更快,並且可以減輕伺服器的壓力。
如果使用者輸入需要插入資料庫,您應該考慮使用伺服器驗證。在伺服器驗證表單的一個好的方式是,把表單的資料傳給目前頁面(非同步提交的方式更好),而不是跳到不同的頁面。這樣使用者就可以在同一張表單頁面得到錯誤訊息。用戶也就更容易發現錯誤了。