[TOC]
又稱之為來自 PHP 之外的變量
## HTML 表單(GET 和 POST)
當一個表單提交給 PHP 腳本時,表單中的信息會自動在腳本中可用。有很多方法訪問此信息,例如:
### 一個簡單的 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 表單中的數據。例如:
### 從一個簡單的 POST HTML 表單訪問數據
~~~
<?php
// 自 PHP 4.1.0 起可用
echo $_POST['username'];
echo $_REQUEST['username'];
import_request_variables('p', 'p_');
echo $p_username;
// 自 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 中在“?”之后的信息)。因此,舉例說,http://www.example.com/test.php?id=3 包含有可用 $_GET['id'] 來訪問的 GET 數據。參見 $_REQUEST 和 import_request_variables()。
Note:
超全局數組例如 $_POST 和 $_GET,自 PHP 4.1.0 起可用。
Note:
變量名中的點和空格被轉換成下劃線。例如 <input name="a.b" /> 變成了 $_REQUEST["a_b"]。
如上所示,在 PHP 4.2.0 之前 register_globals 的默認值是 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
}
?>
~~~
IMAGE SUBMIT 變量名
當提交表單時,可以用一幅圖像代替標準的提交按鈕,用類似這樣的標記:
<input type="image" src="image.gif" name="sub" />
當用戶點擊到圖像中的某處時,相應的表單會被傳送到服務器,并加上兩個變量 sub_x 和 sub_y。它們包含了用戶點擊圖像的坐標。有經驗的用戶可能會注意到被瀏覽器發送的實際變量名包含的是一個點而不是下劃線(即 sub.x 和 sub.y),但 PHP 自動將點轉換成了下劃線。
## HTTP Cookies
PHP 透明地支持 ? RFC 6265定義中的 HTTP cookies。Cookies 是一種在遠端瀏覽器端存儲數據并能追蹤或識別再次訪問的用戶的機制。可以用setcookie() 函數設定 cookies。Cookies 是 HTTP 信息頭中的一部分,因此 SetCookie 函數必須在向瀏覽器發送任何輸出之前調用。對于 header()函數也有同樣的限制。Cookie 數據會在相應的 cookie 數據數組中可用,例如 $_COOKIE,$HTTP_COOKIE_VARS 和 $_REQUEST。更多細節和例子見setcookie() 手冊頁面。
如果要將多個值賦給一個 cookie 變量,必須將其賦成數組。例如:
~~~
<?php
setcookie("MyCookie[foo]", 'Testing 1', time()+3600);
setcookie("MyCookie[bar]", 'Testing 2', time()+3600);
?>
~~~
這將會建立兩個單獨的 cookie,盡管 MyCookie 在腳本中是一個單一的數組。如果想在僅僅一個 cookie 中設定多個值,考慮先在值上使用serialize() 或 explode()。
注意在瀏覽器中一個 cookie 會替換掉上一個同名的 cookie,除非路徑或者域不同。因此對于購物車程序可以保留一個計數器并一起傳遞,例如:
### 一個 setcookie() 的示例
~~~
<?php
if (isset($_COOKIE['count'])) {
$count = $_COOKIE['count'] + 1;
} else {
$count = 1;
}
setcookie('count', $count, time()+3600);
setcookie("Cart[$count]", $item, time()+3600);
?>
~~~
變量名中的點
通常,PHP 不會改變傳遞給腳本中的變量名。然而應該注意到點(句號)不是 PHP 變量名中的合法字符。至于原因,看看:
1
2
3
<?php
$varname.ext; /* 非法變量名 */
?>
這時,解析器看到是一個名為 $varname 的變量,后面跟著一個字符串連接運算符,后面跟著一個裸字符串(即沒有加引號的字符串,且不匹配任何已知的健名或保留字)'ext'。很明顯這不是想要的結果。
出于此原因,要注意 PHP 將會自動將變量名中的點替換成下劃線。
確定變量類型
因為 PHP 會判斷變量類型并在需要時進行轉換(通常情況下),因此在某一時刻給定的變量是何種類型并不明顯。PHP 包括幾個函數可以判斷變量的類型,例如:gettype(),is_array(),is_float(),is_int(),is_object() 和 is_string()。參見類型一章。
- 入門指引
- 簡介
- PHP是什么
- PHP能做什么
- 簡明教程
- 學PHP需要什么
- 我的第一個PHP頁面
- 實用的PHP腳步
- PHP是如何處理表單的
- 在新版本的PHP如何實用舊的PHP代碼
- 下一步需要做什么
- PHP語言參考
- PHP基本語法
- PHP標記
- PHP多進程管理-pcntl_fork
- PHP文件上傳易犯錯誤
- PHP從HTML中分離
- PHP的指令分隔符
- PHP序列化serialize
- PHP類常量
- PHP Traits
- 從 HTML 中分離
- 注釋
- PHP數據類型
- PHP支持的類型簡介
- 布爾類型(Boolean)就是易經知識
- 整型(integer)即整數
- 浮點型(float)
- 字符串(string)
- 數組(Array)
- 對象(object)一定要搞
- 資源類型(resource)
- PHP安裝與環境配置
- 安裝前需要考慮的事項
- Unix系統下安裝PHP
- Unix 系統下安裝 Apache 1.3.x
- Unix 系統下安裝 Apache 2.x
- Unix 系統下安裝 Nginx 1.4.x
- Unix 平臺安裝 Lighttpd 1.4
- Sun Solaris 上的 Sun、iPlanet 和 Netscape 服務器
- CGI 命令行設置
- 針對 HP-UX 平臺的安裝提示
- 在 OpenBSD 系統下的安裝PHP
- Debian GNU/Linux 安裝說明
- 在Mac OS X 系統下安裝PHP
- 使用軟件包
- 使用內置的 PHP
- Windows 系統下的安裝
- 云計算平臺上的安裝
- Microsoft Azure
- 在亞馬遜(Amazon EC2)安裝PHP
- PHP語法參考
- 類型
- NULL
- Callback 回調類型
- 本文檔中使用的偽類型與變量
- 類型轉換的判別
- PHP 類型比較表
- 常量和變量
- 語法基礎
- 預定義變量
- 變量范圍
- 可變變量
- 外部變量
- 常量
- 語法
- 魔術常量
- PHP表達式&運算符
- 賦值運算符
- 位運算符
- 比較運算符
- 錯誤控制運算符
- 執行運算符
- 遞增/遞減運算符
- 邏輯運算符
- 字符串運算符
- 數組運算符
- 類型運算符
- 流程控制
- continue
- switch
- declare
- return
- require
- include
- require_once