PHP 入門指南 - 超級全域變數

PHP 中有為數不少的超級全域變數 (superglobals) ,主要是用來接收使用者在 HTML 表單的輸入值,好使伺服器得到資料後能反應給使用者




超級全域變數如下表
名稱說明
$GLOBALS以陣列 (array) 方式儲存全域變數,變數 (variable) 名稱為字串 (string) 索引值
$_SERVER以陣列方式儲存跟伺服器有關的變數,如使用者的 IP 、瀏覽器等
$_GET以陣列方式儲存利用表單 get 傳送的變數
$_POST以陣列方式儲存利用表單 post 傳送的變數
$_FILES以陣列方式儲存利用表單檔案處理方面的變數
$_COOKIE以陣列方式儲存利用 cookie 的變數
$_SESSION以陣列方式儲存利用 session 的變數
$_REQUEST接收 $_GET 、 $_POST 、 $_COOKIE 等變數
$_ENV以陣列方式儲存環境相關變數


我們在 encryptor01.php 用到的 $_SERVER['PHP_SELF'] , 'PHP_SELF' 為目前所在檔案位置與名稱,由於寫在 HTML 語法中,所以要加上 <?php 與 ?> ,然後用 echo 輸出 PHP 字串內容。


$_SERVER['PHP_SELF'] 這個變數表示
http:://localhost/encryptor01.php


$_SERVER 還有很多相關變數,請參考 http://www.php.net/manual/en/reserved.variables.server.php


需要留意
<a href="<?php echo $_SERVER['PHP_SELF'].'?op=record'; ?>">Record</a> -
<a href="<?php echo $_SERVER['PHP_SELF'].'?op=about'; ?>"About</a>


RecordAbout 都在 $_SERVER['PHP_SELF'] 之後接問號然後加上 op=record 及 op=about ,因此這兩個網址分別代表
http:://localhost/encryptor01.php?op=record
http:://localhost/encryptor01.php?op=about


這會讓 PHP 接收到 $_GET 變數,索引值分別是 "record" 與 "about" 。


這是因為沒有指定 get 或 post 的話,預設都為 get 。


另外看到表單的部份
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">


不論點擊選單選項或按下表單中任一按鈕,這都會把使用者輸入的資料重新傳送回 encryptor01.php ,我們的目的是把網站的控制流程都集中在同一個 PHP 檔案,依 $_REQUEST 取得的變數設定程式的動作, $_REQUEST 可以接受 $_GET 、 $_POST 、 $_COOKIE 等三種變數。


表單中的 method 屬性設定為 "post" ,因此按下表單按鈕,表單傳遞的值會是 $_POST 變數
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<input type="text" name="input" size="67"><br / >
<input type="submit" value="New" name="op">
<input type="submit" value="Load" name="op">
<input type="submit" value="Encode" name="op">
<input type="submit" value="Decode" name="op">
<input type="submit" value="Clean" name="op">
</form>


利用 post 傳遞的變數 $_POST ,網址並不會如 $_GET 增加問號後的文字。


屬性 name 就是 $_POST 變數的索引,相對的索引值則是屬性 value 的內容。這是說 NewLoadEncodeDecodeClean 等五個按鈕的索引都是 op ,因此可用 $_REQUEST["op"] 判斷要處理哪一項工作,連同 RecordAbout 共有七種不同的流程,至於 input 的值則可用 $_POST["input"] 存取。


嗯,好多 $_GET 、 $_POST 及 $_REQUEST ,有沒又弄懂什麼時後用 $_GET ,什麼時後用 $_POST ,什麼時候又要用 $_REQUEST 呢?我們接下來直接以實例來說明網站流程控制吧!


中英文術語對照
超級全域變數superglobals
陣列array
變數variable
字串string


您可以繼續參考
網站篇


相關目錄
回 PHP 入門指南
回 PHP 教材
回首頁


參考資料
http://php.net/manual/en/language.variables.superglobals.php
http://www.php.net/manual/en/reserved.variables.globals.php
http://www.php.net/manual/en/reserved.variables.server.php
http://www.php.net/manual/en/reserved.variables.get.php
http://www.php.net/manual/en/reserved.variables.post.php
http://www.php.net/manual/en/reserved.variables.files.php
http://www.php.net/manual/en/reserved.variables.request.php
http://www.php.net/manual/en/reserved.variables.session.php
http://www.php.net/manual/en/reserved.variables.environment.php
http://www.php.net/manual/en/reserved.variables.cookies.php

2 則留言:

wang - fish 提到...

,然後用 echi 輸出 PHP 字串內容。

這一句是寫錯嗎?
ecgi是什麼?

Kaiching Chang 提到...

這邊打錯字了,是 echo 才對,已修改,感謝指正 ^_^