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