使用訂單的目的是為了收集客戶訂單。在PHP中,獲得客戶輸入的具體數(shù)據(jù)是非常簡(jiǎn)單的,但是具體的方法還依賴于你所使用的PHP版本,以及php.ini文件的設(shè)置。
簡(jiǎn)短、中等以及冗長(zhǎng)風(fēng)格的表單變量
在PHP腳本中,可以用PHP變量的形式訪問(wèn)每一個(gè)表單域,其中PHP變量名稱必須與表單域的名稱一致。你可以很容易識(shí)別PHP的變量名稱,因?yàn)樗鼈兌际且?符號(hào)開(kāi)始的。(漏掉這個(gè)$符號(hào)是一個(gè)常見(jiàn)的編程錯(cuò)誤。)
根據(jù)PHP版本和設(shè)置的不同,通過(guò)變量,可以有3種方法來(lái)訪問(wèn)表單數(shù)據(jù)。這些方法并沒(méi)有正式的名稱,因此我們給它們定義了3個(gè)昵稱,分別是簡(jiǎn)短風(fēng)格、中等風(fēng)格和冗長(zhǎng)風(fēng)格。在任何情況下,一個(gè)頁(yè)面上提交給PHP腳本的每一個(gè)表單域在PHP腳本中都是可以使用的。
你可以按如下所示的方法訪問(wèn)tireqty域的內(nèi)容:
$tireqty //short style
$_POST['tireqty'] //medium style
$HTTP_POST_VARS['tireqty'] //long style
在這個(gè)例子以及整本書(shū)中,我們將使用中等風(fēng)格(也就是,$_POST[。tireqtyi])來(lái)引用表單變量,但是為了便于使用,我們創(chuàng)建了簡(jiǎn)短風(fēng)格的變量。然而,在代碼中,我們采用這種風(fēng)格而不是自動(dòng)選擇的風(fēng)格來(lái)引用變量,是因?yàn)樽詣?dòng)選擇風(fēng)格可能會(huì)帶來(lái)安全性的問(wèn)題。
對(duì)于讀者自己的代碼,讀者可能會(huì)決定使用不同的方法,但是必須做出正確的選擇。接下來(lái)我們將介紹上述不同的方法。
◎簡(jiǎn)短風(fēng)格($ tireqty)非常方便,但是需要將register_globals配置選項(xiàng)設(shè)置為on。由于安全性的原因,在默認(rèn)情況下,該選項(xiàng)的默認(rèn)設(shè)定值為off。這種風(fēng)格的標(biāo)記容易導(dǎo)致產(chǎn)生安全性問(wèn)題的錯(cuò)誤,也就是為什么不推薦的原因。在PHP 6中,這個(gè)配置選項(xiàng)可能會(huì)被棄用,因此在新代碼中使用這種風(fēng)格的變量名稱并不是好的想法。
◎中等風(fēng)格($_POST['tireqty'])是如今所推薦的。如果基于中等風(fēng)格,創(chuàng)建簡(jiǎn)短版本的變量名稱(南昌網(wǎng)站建設(shè)公司工程師在所有實(shí)例中使用這種方式)將不會(huì)產(chǎn)生安全性問(wèn)題,只是便于使用的問(wèn)題。
◎冗長(zhǎng)風(fēng)格( $HTTP_POST_VARS['tireqty。])是最詳細(xì)的,但是請(qǐng)注意,它已經(jīng)被棄用,因此從長(zhǎng)遠(yuǎn)看,這種風(fēng)格可能會(huì)被刪除。這種風(fēng)格過(guò)去曾是最容易移植的,但是如今可以通過(guò)register_long_arrays配置指令禁用它,這樣可以改進(jìn)性能。因此,同樣地,如果不需要將你的代碼安裝在舊版本的服務(wù)器上,就沒(méi)有必要在新代碼中使用這種風(fēng)格。
當(dāng)使用簡(jiǎn)短風(fēng)格時(shí),腳本中的變量名稱應(yīng)該與HTML表單中的表單域名稱相同。在腳本中,不需要聲明變量或者創(chuàng)建這些變量。就如同向一個(gè)函數(shù)傳遞參數(shù),這些變量將被傳遞到腳本中。如果讀者使用這種風(fēng)格,就可以使用類似于$tireqty的變量。表單中的$tireqty域?qū)⒃诒韱?
處理腳本中創(chuàng)建$ tireqty變量。對(duì)變量如此方便的訪問(wèn)是非常受歡迎的,但是在將該選項(xiàng)設(shè)置為on之前,讀者應(yīng)該想想為什么PHP開(kāi)發(fā)小組將該選項(xiàng)設(shè)置為off。
像這樣對(duì)變量的直接訪問(wèn)是非常方便的,但是這可能會(huì)使讀者遇到破壞腳本安全性的編程錯(cuò)誤。由于表單變量會(huì)自動(dòng)轉(zhuǎn)換成全局變量,因此在你所創(chuàng)建的變量與直接來(lái)自用戶的不可信任的變量之間沒(méi)有明顯的區(qū)別。
如果沒(méi)有對(duì)自己的變量賦給一個(gè)初始值,腳本用戶就可以像表單變量一樣傳遞變量和值,這樣就可能造成混亂。如果選擇使用方便的簡(jiǎn)短風(fēng)格來(lái)訪問(wèn)變量,必須注意對(duì)你自己的變量賦予一個(gè)初始值。
中等風(fēng)格涉及了從$_POST、$_GET或$_REQUEST數(shù)組之一檢索變量。$_GET或$_POST數(shù)組之一都可以保存表單變量的細(xì)節(jié)。使用哪一個(gè)數(shù)組取決于提交表單時(shí)使用的方法是POST還是GET。此外,通過(guò)POST或GET方法及其組合方式提交的所有數(shù)據(jù)都可以通過(guò)$_REQUEST數(shù)組獲得。
如果表單是通過(guò)POST方法提交的,tireqty文本輸入框中的數(shù)據(jù)將保存在$_POST['tireqty']中。如果表單是通過(guò)GET方法提交的,數(shù)據(jù)將保存在$一GET['tireqty']。在任何一種情況下,數(shù)據(jù)都可以通過(guò)$_REQUEST['tireqty']獲得。
這些數(shù)組被稱作是超級(jí)全局(superglobal)變量。在我們介紹變量的作用域時(shí),我們還將在稍后的內(nèi)容詳細(xì)介紹這些超級(jí)全局變量。
下面,讓我們看一個(gè)創(chuàng)建便于使用的變量副本的例子。
要將一個(gè)變量的值復(fù)制給另一個(gè)變量,你可以使用賦值操作符。在PHP中,賦值操作符是等于號(hào)(=)。如下代碼將創(chuàng)建一個(gè)名為$tireqty的新變量,并且將$POST['tireqty']的內(nèi)容復(fù)制給這個(gè)新變量:
$tireqty=$_POST['tireqty '];
南昌網(wǎng)站設(shè)計(jì)公司工程師提醒大家在使用$_POST時(shí)一定要注意安全,特別是防SQL注入及跨站攻擊.
將如下代碼塊放置在訂單處理腳本的開(kāi)始處。在本書(shū)中,處理表單數(shù)據(jù)的所有腳本的開(kāi)始處都將包含與這個(gè)相似的代碼塊。由于這段代碼不會(huì)產(chǎn)生任何輸出,因此無(wú)論將這段代碼放置在開(kāi)始一個(gè)HTML頁(yè)面的和其他HTML標(biāo)記之前還是之后,都不會(huì)有任何差異。通常,
我們將這段代碼放置在腳本的最開(kāi)始處,這樣容易查找。
// create short variable names
$tireqty=$_POST['tireqty l];
$oilqty=$_POST['oilqty'];
$sparkqty=s_POST ['sparkqty'];
?>
這段代碼將創(chuàng)建3個(gè)新變量:$tireqty、$oilqty和$sparkqty,并且將通過(guò)POST方法從表單中傳送過(guò)來(lái)的數(shù)據(jù)分別賦值給這3個(gè)變量。
要使該腳本能夠完成一些可見(jiàn)的操作,可以在PHP腳本結(jié)束處添加如下所示的代碼:
echo
Your order i s as follows:
;
echo $tireqty. tires
';
echo $oilqty. 'bottles of oil
echo $sparkqty. ‘spark plugs
‘;
在這里,還沒(méi)有檢查變量?jī)?nèi)容,因此也無(wú)法確認(rèn)一些重要數(shù)據(jù)已經(jīng)進(jìn)入了每一個(gè)表單域。嘗試輸入一些錯(cuò)誤數(shù)據(jù)并且觀察發(fā)生的事情。廣大南昌網(wǎng)絡(luò)公司技術(shù)人員可能希望嘗試在該腳本中添加一些數(shù)據(jù)校驗(yàn)的邏輯。
像上例中,從用戶輸入直接獲得輸入并輸出到瀏覽器是一個(gè)有風(fēng)險(xiǎn)的操作,它可能帶來(lái)安全隱患。你應(yīng)該對(duì)數(shù)據(jù)進(jìn)行過(guò)濾。
如果現(xiàn)在于瀏覽器中載入這個(gè)文件,當(dāng)然,具體的數(shù)值還取決于在表單中輸入的數(shù)據(jù)。
本文僅限內(nèi)部技術(shù)人員學(xué)習(xí)交流,不得作于其他商業(yè)用途.文章出自:南昌網(wǎng)站建設(shè)公司-百恒網(wǎng)絡(luò) http://www.myforexfactory.net 如轉(zhuǎn)載請(qǐng)注明出處!