什麼是來自php 之外的變數

來源:互聯網
上載者:User

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 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 更複雜的表單變數

<?phpif (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,除非路徑或者域不同。因此對於購物車程式可以保留一個計數器並一起傳遞,例如:

Example #4 一個 setcookie() 的樣本

<?phpif (isset( $_COOKIE [ 'count' ])) {     $count  =  $_COOKIE [ 'count' ] +  1 ;} else {     $count  =  1 ;}setcookie ( 'count' ,  $count ,  time ()+ 3600 );setcookie ( "Cart[ $count ]" ,  $item ,  time ()+ 3600 );?>

變數名中的點

通常,PHP 不會改變傳遞給指令碼中的變數名。然而應該注意到點(句號)不是 PHP 變數名中的合法字元。至於原因,看看:

<?php$varname . ext ;   ?>

這時,解析器看到是一個名為 $varname 的變數,後面跟著一個字串串連運算子,後面跟著一個裸字串(即沒有加引號的字串,且不匹配任何已知的健名或保留字)'ext'。很明顯這不是想要的結果。

出於此原因,要注意 PHP 將會自動將變數名中的點替換成底線。

確定變數類型

因為 PHP 會判斷變數類型並在需要時進行轉換(通常情況下),因此在某一時刻給定的變數是何種類型並不明顯。PHP 包括幾個函數可以判斷變數的類型,例如: gettype() , is_array() , is_float() , is_int() , is_object()和 is_string()

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.