來自 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>
根據特定的設置和個人的喜好,有很多種方法訪問 HTML 表單中的數據。例如:
Example#2 從一個簡單的 POST HTML 表單訪問數據
<?php // 自 PHP 4.1.0 起可用 echo $_POST['username']; echo $_REQUEST['username']; import_request_variables('p', 'p_'); echo $p_username; // 自 PHP 3 起可用。自 PHP 5.0.0 起,這些較長的預定義變數 // 可用 register_long_arrays 指令關閉。 echo $HTTP_POST_VARS['username']; // 如果 PHP 指令 register_globals = on 時可用。不過自 // PHP 4.2.0 起默認值為 register_globals = off。 // 不提倡使用/依賴此種方法。 echo $username; ?>
使用 GET 表單也類似,只不過要用適當的 GET 預定義變數。GET 也適用於 QUERY_STRING(URL 中在「?」之後的資訊)。因此,舉例說,https://www.example.com/test.php?id=3 包含有可用 $_GET['id'] 訪問的 GET 數據。參見 $_REQUEST 和 import_request_variables()。
Note: 超全局變數和 $_POST 以及 $_GET 一樣,自 PHP 4.1.0 起可用。
如上所示,在 PHP 4.2.0 之前 register_globals 的默認值是 on。在 PHP 3 中其值總是 on。PHP 社區鼓勵大家不要依賴此指令,建議在編碼時假定其為 off。
Note: magic_quotes_gpc 配置指令影響到 Get,Post 和 Cookie 的值。如果打開,值 (It's "PHP!") 會自動轉換成 (It\'s \"PHP!\")。數據庫的插入就需要轉義。參見 addslashes(),stripslashes() 和 magic_quotes_sybase。
PHP 也懂得表單變數上下文中的數組(參見相關常見問題)。例如可以將相關的變數編成組,或者用此特性從多選輸入框中取得值。例如,將一個表單 POST 給自己並在提交時顯示數據:
Example#3 更複雜的表單變數
<?php
if (isset($_POST['action']) && $_POST['action'] == 'submitted') {
echo '<pre>';
print_r($_POST);
echo '<a href="'. $_SERVER['PHP_SELF'] .'">Please try again</a>';
echo '</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。它們包含了用戶點擊圖像的坐標。有經驗的用戶可能會注意到被瀏覽器發送的實際變數名包含的是一個點而不是下劃線(即 sub.x 和 sub.y),但 PHP 自動將點轉換成了下劃線。
變數名中的點
通常,PHP 不會改變傳遞給腳本中的變數名。然而應該注意到點(句號)不是 PHP 變數名中的合法字元。至於原因,看看:
<?php
$varname.ext; /* 非法變數名 */
?>
出於此原因,要注意 PHP 將會自動將變數名中的點替換成下劃線。
確定變數類型
因為 PHP 會判斷變數類型並在需要時進行轉換(通常情況下),因此在某一時刻給定的變數是何種類型並不明顯。PHP 包括幾個函式可以判斷變數的類型,例如:gettype(),is_array(),is_float(),is_int(),is_object() 和 is_string()。參見類型一章。