寫過 CGI 的朋友都知道,利用網頁的 form 可以將 client 端的資料傳送至伺服器端。利用 PHP 讀取 form 的資料是非常容易的,而且不像其它程式語言一樣還要判斷並分析這些資料,由 form 傳送過來的資料對 PHP 來講就是全域變數,例如:
<form action="reg.php" method="post"> E-Mail: <input type="text" name="email"><br> <input type="submit"> </form>
PHP 會將 form 傳進來的資料,存放至由 HTML 標籤的 name 欄位所指定的變數裡。以上面的 form 為例,假設 form 傳進 $email=jollen@o3.net,在 PHP 裡就等於:
$email = "jollen@o3.net";
這是一個全域變數,而且可以直接取用。傳送進來的資料也可以存成陣列,只要在 form 的 name 欄位做一點手腳即可,利用陣列可以更方便的處理同類型的資料:
<form action="interest.php" method="post"> Name: <input type="text" name="person[name]"><br> Email: <input type="text" name="person[email]"><br> Your interest: <select multiple name="interest[]"> <option value="Singing">Singing <option value="Sleeping">Sleeping <option value="Sport">Sport <option value="Reading">Reading <option value="other">other </select>
<input type="submit"> </form>
在 PHP 裡就可以這樣讀取這些資料:
$person["name"]; $person["email"]; $interest[0]; $interest[1]; $interest[2]; $interest[3]; $interest[4];
如果您是使用 FrontPage 設計 form,輸入這類的名稱時 (含有 []) 會出現錯誤視窗,不過不用擔心,因為這樣的名稱是瀏覽器可以接受的。
利用這種方式讀取表單資料是較早期的做法,PHP 會自動將外來的變數註冊成全域變數,但從 PHP 4.2.0 開始,為了安全性與效能考量,預設將不再支援這種做法。
因此,以往的程式若要能在 PHP 4.2.0 與之後的版本也能正常執行,就必須修改 php.ini 設定檔,將底下的設定:
register_globals = off
改成:
register_globals = on
如此一來,才能使用全域變數讀取表單資料的使法。
--jollen