« 16. 何謂「變數的變數陣列」? | (回到Blog入口) | 18. 如何讀取讀取表單(form)?track_vars 讀取法 »

17. 如何讀取讀取表單(form)?全域變數讀取法

jollen 發表於 October 27, 2006 2:10 PM

寫過 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

版權聲明

請參閱頁面底部的 CC 授權條款。此外,Jollen's PHP 專欄禁止引用、修改與轉貼,如果您想與朋友分享的話,我們只允許網站連結(hyperlink)的形式。

發表一個評論

(如果你此前從未在此 Blog 上發表過評論,則你的評論必須在 Blog 主人驗證後才能顯示,請你耐心等候。)

| Top | Jollen's Forum |
Jollen's PHP 專欄採用 Attribution-NonCommercial-NoDerivs 2.5 授權條款
Copyright(c) 2001-2007,2010 www.jollen.org