來自 PHP 以外的變數
HTML 表單 (GET 和POST)
當一份表單傳送給 PHP 程式時,表單內的資訊將自動提供給該程式。我們有很多方法存取這些資訊,範例:
Example#1 一個簡單的 HTML 表單
<form action="foo.php" method="post"> Name: <input type="text" name="username"><br> Email: <input type="text" name="email"><br> <input type="submit" name="submit" value="Submit me!"> </form>
根據您的安裝方式和個人偏好,PHP 提供多種方式存取 HTML 表單中的資料。一些例子如:
Example#2 存取一個以 POST 方式傳送的簡單 HTML 表單
<?php // Available since PHP 4.1.0 print $_POST['username']; print $_REQUEST['username']; import_request_variables('p', 'p_'); print $p_username; // Available since PHP 3. As of PHP 5.0.0, these long predefined // variables can be disabled with the register_long_arrays directive. print $HTTP_POST_VARS['username']; // Available if the PHP directive register_globals = on. As of // PHP 4.2.0 the default value of register_globals = off. // Using/relying on this method is not preferred. print $username; ?>
使用 GET 方式傳送的表單用法類似,只不過使用合適的先前定義的函數。GET 也可使用在查詢字串 (QUERY_STRING) 〈URL 中問號 '?' 後面的資訊〉。例如,https://www.example.com/test.php?id=3 含有以 $_GET['id'] 方式存取的 GET 資料。請參考 $_REQUEST 和 import_request_variables()()。
Note: Superglobal 陳列如 $_POST 及 $_GET 在 PHP 版本 4.1.0 以上才開始提供。
上面提到,在 PHP 4.2.0 之前的版本中,register_globals 的預設值是 on。而在 PHP 3 中,它永遠是 on 的。我們建議所有使用者不要依賴此指令,並在編寫時將它當作是 off 來設計您的程式。
Note: magic_quotes_gpc 組態指令會影響到 Get,Post 和 Cookie 的值。如果開啟此指令,(It's "PHP!") 的值將變成 (It\'s \"PHP!\")。此跳出工作在將字串插入資料庫前是必須要做的。請參考 addslashes(),stripslashes() 和 magic_quotes_sybase。
PHP 也懂得處理陳列式的表單變數〈請參觀相關的 FAQ〉。您可以將相關的變數歸類,或用此功能來取回多元選擇輸入表單的值。在下列範例中,我們將表單張貼到它自己,並在傳送後把資料顯示出來:
Example#3 更複雜的表單變數
<?php
if (isset($_POST['action']) && $_POST['action'] == 'submitted') {
print '<pre>';
print_r($_POST);
print '<a href="'. $_SERVER['PHP_SELF'] .'">Please try again</a>';
print '</pre>';
} else {
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" 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>
<option value="guinness">Guinness</option>
<option value="stuttgarter">Stuttgarter Schwabenbr酳</option>
</select><br>
<input type="hidden" name="action" value="submitted">
<input type="submit" name="submit" value="submit me!">
</form>
<?php
}
?>
PHP 3 的陳列表單變數只可以使用一維陳列,而 PHP 4 則沒有此限制。
IMAGE SUBMIT 變數名稱
在傳送表單時,我們可以使用下列標籤將標準的提交鍵以圖像來取代:
<input type="image" src="image.gif" name="sub">
當使用者在圖像的任何一處按一下,伴隨的表單就會傳送到伺服器,隨其而來還附加了兩個變數,sub_x 和 sub_y。這包含了使用者按在圖像的座標。有經驗的使用者或許知道由瀏覽器傳送來的變數名稱應該包含句號,而不是底線,但 PHP 自動地將句號轉換成為底線。
在變數名字中的句號 (dots)
一般上,PHP 並不會更改傳入程式的變數名稱。然而,您必須留意句號 (.) 並不是一個有效的 PHP 變數名稱字元,正如:
<?php
$varname.ext; /* invalid variable name */
?>
正因如此,PHP 會自動的將傳入的變數名稱中的句號 (.) 改為底線 (_)。
判定變數的類型
由於 PHP 會自行判斷變數的類型,並按需要轉變它們的類型,因此有時也難以明顯地判定一個變數在某個時刻的類型。有鑑於此,PHP 提供了幾個判定變數類型的函數:gettype()()、is_array()()、is_float()()、is_int()()、is_object()() 及 is_string()()。請參閱類型一章。