PHP基礎(chǔ)之變量5——來自PHP之外的變量
當(dāng)一個(gè)表單提交給 PHP 腳本時(shí),表單中的信息會(huì)自動(dòng)在腳本中可用。有很多方法訪問此信息,例如:
Example #1 一個(gè)簡單的 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>
根據(jù)特定的設(shè)置和個(gè)人的喜好,有很多種方法訪問 HTML 表單中的數(shù)據(jù)。例如:
Example #2 從一個(gè)簡單的 POST HTML 表單訪問數(shù)據(jù)
<?php// 自 PHP 4.1.0 起可用echo $_POST[’username’];echo $_REQUEST[’username’];
import_request_variables(’p’, ’p_’);echo $p_username;
// 自 PHP 5.0.0 起,這些長格式的預(yù)定義變量可用 register_long_arrays 指令關(guān)閉。
echo $HTTP_POST_VARS[’username’];
// 如果 PHP 指令 register_globals = on 時(shí)可用。不過自PHP 4.2.0 起默認(rèn)值為 register_globals = off。// 不提倡使用/依賴此種方法。
echo $username;?>
使用 GET 表單也類似,只不過要用適當(dāng)?shù)?GET 預(yù)定義變量。GET 也適用于 QUERY_STRING(URL 中在“?”之后的信息)。因此,舉例說,http://www.example.com/test.php?id=3 包含有可用 $_GET[’id’] 來訪問的 GET 數(shù)據(jù)。參見 $_REQUEST 和 import_request_variables()。
Note:
超全局?jǐn)?shù)組例如 $_POST 和 $_GET,自 PHP 4.1.0 起可用。
Note:
變量名中的點(diǎn)和空格被轉(zhuǎn)換成下劃線。例如 <input name='a.b' /> 變成了 $_REQUEST['a_b']。
如上所示,在 PHP 4.2.0 之前 register_globals 的默認(rèn)值是 on。PHP 社區(qū)鼓勵(lì)大家不要依賴此指令,建議在編碼時(shí)假定其為 off。
Note:
magic_quotes_gpc 配置指令影響到 Get,Post 和 Cookie 的值。如果打開,值 (It’s 'PHP!') 會(huì)自動(dòng)轉(zhuǎn)換成 (It’s 'PHP!')。十多年前對(duì)數(shù)據(jù)庫的插入需要如此轉(zhuǎn)義,如今已經(jīng)過時(shí)了,應(yīng)該關(guān)閉。
PHP 也懂得表單變量上下文中的數(shù)組。例如可以將相關(guān)的變量編成組,或者用此特性從多選輸入框中取得值。例如,將一個(gè)表單 POST 給自己并在提交時(shí)顯示數(shù)據(jù):
Example #3 更復(fù)雜的表單變量
<?php
if (isset($_POST[’action’]) && $_POST[’action’] == ’submitted’) {
???echo ’<pre>’;
???print_r($_POST);
???echo ’<a href='http://www.hdgsjgj.cn/bcjs/’. $_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 變量名當(dāng)提交表單時(shí),可以用一幅圖像代替標(biāo)準(zhǔn)的提交按鈕,用類似這樣的標(biāo)記:
<input type='image' src='http://www.hdgsjgj.cn/bcjs/image.gif' name='sub' />
當(dāng)用戶點(diǎn)擊到圖像中的某處時(shí),相應(yīng)的表單會(huì)被傳送到服務(wù)器,并加上兩個(gè)變量 sub_x 和 sub_y。它們包含了用戶點(diǎn)擊圖像的坐標(biāo)。有經(jīng)驗(yàn)的用戶可能會(huì)注意到被瀏覽器發(fā)送的實(shí)際變量名包含的是一個(gè)點(diǎn)而不是下劃線(即 sub.x 和 sub.y),但 PHP 自動(dòng)將點(diǎn)轉(zhuǎn)換成了下劃線。
HTTP CookiesPHP 透明地支持 ? RFC 6265定義中的 HTTP cookies。Cookies 是一種在遠(yuǎn)端瀏覽器端存儲(chǔ)數(shù)據(jù)并能追蹤或識(shí)別再次訪問的用戶的機(jī)制。可以用 setcookie() 函數(shù)設(shè)定 cookies。Cookies 是 HTTP 信息頭中的一部分,因此 SetCookie 函數(shù)必須在向?yàn)g覽器發(fā)送任何輸出之前調(diào)用。對(duì)于 header() 函數(shù)也有同樣的限制。Cookie 數(shù)據(jù)會(huì)在相應(yīng)的 cookie 數(shù)據(jù)數(shù)組中可用,例如$_COOKIE,$HTTP_COOKIE_VARS 和 $_REQUEST。
如果要將多個(gè)值賦給一個(gè) cookie 變量,必須將其賦成數(shù)組。例如:
<?php
?setcookie('MyCookie[foo]', ’Testing 1’, time()+3600);
?setcookie('MyCookie[bar]', ’Testing 2’, time()+3600);
?>
這將會(huì)建立兩個(gè)單獨(dú)的 cookie,盡管 MyCookie 在腳本中是一個(gè)單一的數(shù)組。如果想在僅僅一個(gè) cookie 中設(shè)定多個(gè)值,考慮先在值上使用 serialize() 或 explode()。
注意在瀏覽器中一個(gè) cookie 會(huì)替換掉上一個(gè)同名的 cookie,除非路徑或者域不同。因此對(duì)于購物車程序可以保留一個(gè)計(jì)數(shù)器并一起傳遞,例如:
Example #4 一個(gè) setcookie() 的示例
<?php
if (isset($_COOKIE[’count’])) {
???$count = $_COOKIE[’count’] + 1;
} else {
???$count = 1;
}
setcookie(’count’, $count, time()+3600);
setcookie('Cart[$count]', $item, time()+3600);
?>
變量名中的點(diǎn)通常,PHP 不會(huì)改變傳遞給腳本中的變量名。然而應(yīng)該注意到點(diǎn)(句號(hào))不是 PHP 變量名中的合法字符。至于原因,看看:
<?php
$varname.ext; ?/* 非法變量名 */
?>
這時(shí),解析器看到是一個(gè)名為 $varname 的變量,后面跟著一個(gè)字符串連接運(yùn)算符,后面跟著一個(gè)裸字符串(即沒有加引號(hào)的字符串,且不匹配任何已知的健名或保留字)’ext’。很明顯這不是想要的結(jié)果。
出于此原因,要注意 PHP 將會(huì)自動(dòng)將變量名中的點(diǎn)替換成下劃線。
確定變量類型因?yàn)?PHP 會(huì)判斷變量類型并在需要時(shí)進(jìn)行轉(zhuǎn)換(通常情況下),因此在某一時(shí)刻給定的變量是何種類型并不明顯。PHP 包括幾個(gè)函數(shù)可以判斷變量的類型,例如: gettype(), is_array(),is_float(), is_int(), is_object() 和 is_string()。
相關(guān)文章:
1. Python基于traceback模塊獲取異常信息2. python開發(fā)一個(gè)解析protobuf文件的簡單編譯器3. ASP編碼必備的8條原則4. python 根據(jù)列表批量下載網(wǎng)易云音樂的免費(fèi)音樂5. python中round函數(shù)保留兩位小數(shù)的方法6. python 基于AioHttp 異步抓取火星圖片7. 利用python+ffmpeg合并B站視頻及格式轉(zhuǎn)換的實(shí)例代碼8. 解決Python數(shù)據(jù)可視化中文部分顯示方塊問題9. C語言字符串轉(zhuǎn)換為Python字符串的方法10. 深入理解JavaScript字節(jié)二進(jìn)制知識(shí)以及相關(guān)API
