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:
變數名稱中的點和空格轉換成底線。例如 66df9299ffe54b5001d938858b4213b8 變成了 $_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 class="brush:php;toolbar:false">' ; print_r ( $_POST ); echo '<a href="' . $_SERVER [ 'PHP_SELF' ] . '">Please try again</a>' ; echo '' ; } else { ?>
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() 的範例
<?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 变量名中的合法字符。至于原因,看看:
<?php $varname . ext ; ?>
这时,解析器看到是一个名为 $varname 的变量,后面跟着一个字符串连接运算符,后面跟着一个裸字符串(即没有加引号的字符串,且不匹配任何已知的健名或保留字)'ext'。很明显这不是想要的结果。
出于此原因,要注意 PHP 将会自动将变量名中的点替换成下划线。
确定变量类型
因为 PHP 会判断变量类型并在需要时进行转换(通常情况下),因此在某一时刻给定的变量是何种类型并不明显。PHP 包括几个函数可以判断变量的类型,例如: gettype() , is_array() , is_float() , is_int() , is_object()和 is_string()
以上是什麼是來自php 以外的變數的詳細內容。更多資訊請關注PHP中文網其他相關文章!