外部變數

HTML 表 (GET and POST)

當表單被提交給 PHP 程式時, 所有在表單中的變數都自動給分隔開並傳給程式。 假如有一張如下例的表單: If the track_vars configuration option is turned on, then these variables will be located in the associative arrays $HTTP_POST_VARS, $HTTP_GET_VARS, and/or $HTTP_POST_FILES, according to the source of the variable in question.

For more information on these variables, please read Predefined variables.

示範 8-1.簡單的表單變數

<form action="foo.php" method="post">
    Name: <input type="text" name="username"><br>
    <input type="submit">
</form>

當按下 SUBMIT 後, PHP 會自動指定變數 $name , 其中會儲存表單中 Name: 這一欄所含的值。 PHP 有個叫 track_vars 的可調項, 在開的狀態下用 POST 或 GET 方法提交的表單欄位可以在相應的 $HTTP_POST_VARS 或 $HTTP_GET_VARS 陣列中找到。 要打開這個功能可以改 track_vars 這個參數或使用 指令。

PHP 還可以分解表單中陣列型態的變數。 你可利用這一特性把相關的變數分組或者是儲存容許多項選擇的表單欄位:

示範 8-2.複雜一些的表單

<form action="array.php" method="post">
    Name: <input type="text" name="personal[name]"><br>
    Email: <input type="text" name="personal[email]"><br>
    Beer: <br>
    <select multiple name="beer[]">
        <option value="warthog">Warthog
        <option value="guinness">Guinness
        <option value="stuttgarter">Stuttgarter Schwabenbräu
        </select>
    <input type="submit">
</form>

In PHP 3, the array form variable usage is limited to single-dimensional arrays. In PHP 4, no such restriction applies.

用 IMAGE SUBMIT 的變數名

提交表單時, 可以不用標準的按鈕而用圖案代替。 句法如下:

<input type=image src="image.gif" name="sub">

當使用者按在該圖案上時, 傳去給伺服器的表單資料會有兩個新的值 sub_x 和 sub_y, 分別是使用者按在圖案上的座標。 表單老手們可能會知道其實送給伺服器的的欄位是 sub.x 和 sub.y, 不過 PHP 自動把句號變成了底線號。

HTTP cookies (甜餅 ?)

PHP 支持由 Netscape's Spec所定義的 HTTP cookies。 Cookies 是把資料存到客戶機上的一種方法。 這些資料可以用來辨別用戶的身份。 要設定 COOKIES 可用 SetCookie() 函數。 因為 COOKIES 是 HTTP HEADER 標頭的一部份所以送出 COOKIE 的命令必須把頁面內容輸出給瀏覽器之前執行。 這限制和使用 Header() 函數的限制是一樣的。 至於從瀏覽器送回來的 COOKIES 則像 GET、 POST 方法一樣會自動存在變數�。

如想用一個 COOKIE 存多過一個值, 只需在 COOKIE 名字後加上 []。 示範:

SetCookie ("MyCookie[]", "Testing", time()+3600);

注意除非路徑或網域名字不一樣, 不然你送出的 COOKIE 會取代之前同名的 COOKIE。 因此在編寫購物籃程式時有時要加一個計數器。 就像這樣:

示範 8-3.SetCookie 示範

$Count++;
SetCookie ("Count", $Count, time()+3600);
SetCookie ("Cart[$Count]", $item, time()+3600);

作業環境變數

PHP 會自動把關於作業環境的資料整理成一般的變數供程式取用。

echo $HOME;  /* Shows the HOME environment variable, if set. */

小心起見, 讀取環境變數時最好用 getenv()函數, 這是因為 PHP 一樣為表單、COOKIE 等等自動定義變數, 有時候會不小心用了相同的名字, 到時你讀取的可能並不是真正的環境變數。 改動環境變數則可用 putenv()函數。

帶 '.' 號的變數

基本上 PHP 不會擅改變數的名字, 但由於 PHP 之中 '.' 號有特別的意思(串接文句)不可以作為變數名字, 所以帶 '.' 號的變數名稱中的 '.' 會變成 '_':
$varname.ext;  /* invalid variable name */
上面範例中 PHP 會理解為一個變數 $varname, 後面跟著再串接另一個變數 $ext。 顯然 PHP 理解錯了本來的用意。

查詢變數的形態

由於 PHP 會依內容自動設定變數的形態, 有時候很難一眼看出一個變數到底取用了那一種形態。 為了讓用者取得這類資訊, PHP 有好多個函數可以調用: gettype(), is_long(), is_double(), is_string(), is_array(),和 is_object().