php常數(shù)與變數(shù)之外部變數(shù)
外部變數(shù)
PHP的外部變數(shù)是PHP 在使用過程中規(guī)定好的一些變數(shù)。這個變數(shù)的規(guī)定是這樣規(guī)定的,就這樣使用。
我們先講解幾個最常用的例子,我們將下面的表單命名為user.html:
<html> <head> </head> <body> <form action="reg.php" method="get"> <input type="text" name="username" /> <input type="password" name="pwd" /> <input type="submit" value="提交" /> </form> </body> </html>
上現(xiàn)是很基礎(chǔ)的一段HTML程式碼,在這段程式碼的主要意思是把使用者和密碼,採用get方法,將資料傳送給reg.php(在上面程式碼的第6行規(guī)定的)。 reg.php想辦法接收使用者傳過來的username和pwd這兩個值。
我們得到我們的第一個外部變數(shù):$_GET。
$_GET 的主要作用是將得到get傳值的資料。
我們寫一個reg.php,用$_GET來接收值試試看:
<?php //$_GET后面加上中括號,將username作為字符串放在中括號里面,就得到了表單里面的<input type="text" name="username" /> 的值 $u = $_GET['username']; echo $u.'<br />'; //$_GET['pwd'] 得到表單<input type="text" name="username" /> 的值 $passwd = $_GET['pwd']; echo $passwd.'<br />'; ?>
你可以輸出值來看結(jié)果。透過上面的實驗我們知道了,透過$_GET這個外部變量,可以得到從表單輸入的值。
大家在實驗的時候會發(fā)現(xiàn)網(wǎng)址列上面有一個特點:
#根據(jù)上圖,觀察特性:
reg. php後面跟了一個?(問號)
表單裡面的username變在了地址列裡面
表單面username的值輸入的是root,在username後面跟了個=(等號)輸入的值
username(名字)=root(值) 後面的密碼是password(名字)=123123(值),中間有&(and符)分開
密碼是可見的,那怎麼樣保證安全呢。讓我在註冊的過程當中,密碼不在網(wǎng)址列裡面被人看到呢?
這時候我們需要使用到post傳值,post傳值是在網(wǎng)址列中不可見的。
同樣上面例子的程式碼我們進行修改,html程式碼如下:
<html> <head> </head> <body> <!-- 這一行method 對應的值改為了post --> <form action="reg.php" method="post"> <input type="text" name="username" /> <input type="password" name="pwd" /> <input type="submit" value="提交" /> </form> </body> </html>
PHP的程式碼裡面的$_GET全改為了$_POST:
<?php //$_POST后面加上中括號,將username作為字符串放在中括號里面,就得到了表單里面的<input type="text" name="username" /> 的值 $u = $_POST['username']; echo $u.'<br />'; //$_POST['pwd'] 得到表單<input type="text" name="username" /> 的值 $passwd = $_POST['pwd']; echo $passwd.'<br />'; ?>
#觀察特徵:
reg.php後的?(問號)不見了。後面的username和password也不見了。那他怎麼傳遞數(shù)據(jù)的呢?
他是透過我們看不見的瀏覽器的請求頭檔傳遞的資料。所以在URL(網(wǎng)址)欄位不可見。
附註:附錄中有如何透過火狐瀏覽器的firebug查看傳遞結(jié)果的示範過程。這一塊都是HTTP協(xié)定規(guī)定的傳送方式。
除此之外,我們還有$_REQUEST來接收資料?,F(xiàn)在我們這樣處理:
將php程式碼片段中的$_POST全改為$_REQUEST,程式碼如下:
<?php $u = $_REQUEST['username']; echo $u.'<br />'; $passwd = $_REQUEST['pwd']; echo $passwd.'<br />'; ?>
把網(wǎng)頁user.html裡面的這一行中的method,改為get執(zhí)行一次,再改為Post再運行一次,看看結(jié)果:
<form action="reg.php" method="post">
透過上面的實驗你會發(fā)現(xiàn)$_REQUEST即可以接收get傳值也可以接收post傳值。
另外,我們總結(jié)一些外在變量,要求知識點的學習程度:了解意義,默寫這個單字的寫法和作用。
全域變數(shù)名稱 | 功能說明 |
---|---|
#$_COOKIE | 得到會話控制中cookie傳值 |
$_SESSION | 得到會話控制中session的值 |
$_FILES | 得到檔案上傳的結(jié)果 |
$_GET | 得到get傳值的結(jié)果 |
$_POST | 得到post傳值的結(jié)果 |
$_REQUEST | #即能得到get的傳值結(jié)果,也能得到Post傳值的結(jié)果 |
請再記一句話:以上這些變數(shù)全是超全域的。 (以後講解超全局的意思)。
註:
1.我們認為從使用者輸入過來的所有資料都不是可信的。本書的下半部會特別講解限制和過濾
2.在提交資料的時候,我們常用的方法有g(shù)et和post??梢赃@樣理解,get傳值在url中可見,而post傳值在url中不可見。
而post傳值在url中不可見,是透過瀏覽器的header頭份將資料傳送給指定伺服器的。需要透過專門的工具才能看到Post發(fā)送的值為何。你可以下載火狐瀏覽器(firefox)的外掛(firebug)來查看。
火狐瀏覽器的圖示:
#開啟firebug:
查看header頭傳遞資料(網(wǎng)絡(luò),點擊POST reg.php 選擇Post),就看到了傳遞的名字和傳遞的資料值:
1.若真是使用get傳密碼,密碼在網(wǎng)址列裡面顯示過後。瀏覽器的記錄會自動記錄造訪過的位址。惡意使用者會,可以透過查看你的瀏覽器的歷史記錄,得到你曾經(jīng)輸入的密碼。因此,不能使用get方式來做密碼的傳輸方式。
get
讀音:[get]
解釋:得到,電腦裡是指一種傳送資料的方式
post
讀音:[po?st]
解釋:計算機裡指一種資料傳遞方式
request
讀音:[r??kw?st]
解釋:請求
submit
讀音:[s?b?m?t]
解釋:提交,提交
action
讀音:[??k??n]
解釋:行動、活動