結(jié)合PHP使用HTML表單(2)
2024-05-04 22:53:42
供稿:網(wǎng)友
清單 2 中的表示法當(dāng)然是方便的,但它僅在 php 偽指令 register_globals 被設(shè)置為 on 時才可用。在版本 4.2 以前,這是缺省設(shè)置,許多 php 開發(fā)人員甚至沒有意識到有這樣的問題。然而,從版本 4.2 開始,register_globals 的缺省設(shè)置是 off,在此情況下,該表示法不能正常工作,因為不再用適當(dāng)?shù)闹祫?chuàng)建并初始化變量。
然而,您可以用其它的方法初始化這些變量。第一個方法是更改 register_globals 的值。許多使用共享服務(wù)器的開發(fā)人員無權(quán)為整個服務(wù)器更改該值,但可以針對某個特定站點改變行為。如您有 .htaccess 文件的訪問權(quán),您可以通過添加以下偽指令啟用 register_globals:
php_flag register_globals on
鑒于對該特性是否可用的不確定性,建議開發(fā)人員最好不要使用或依靠這種獲取變量的方法。那么您有什么選擇呢?
如果您的系統(tǒng)運行的是版本 4.1 或更高版本,則您的另一個選擇是使用 import_request_variables() 有選擇地注冊全局變量集合。您可以使用該函數(shù)導(dǎo)入 get、post 和 cookie 值,而且如果您愿意的話,還可以給每項添加前綴。例如:
<?php
import_request_variables(gp, "formval_");
echo "ship = ".$formval_ship;
echo "<br />";
echo "tripdate = ".$formval_tripdate;
echo "<br />";
echo "exploration = ".$formval_exploration;
echo "<br />";
echo "contact = ".$formval_contact;
?>
這里,導(dǎo)入了 get 和 post 值 — 使用 c 來導(dǎo)入 cookie 值 — 而且由于 p 跟在 g 之后,所以 post 值將覆蓋同名的 get 值。
但如果您象許多開發(fā)人員一樣沒有運行版本 4.1 或更高版本,那怎么辦呢?
訪問表單值集合
對于那些運行較早版本或不愿使用全局變量的人來說,可以選擇使用 $http_get_vars 和 $http_post_vars 數(shù)組。盡管并不贊成使用這些集合,但它們?nèi)匀豢捎茫胰员粡V泛使用。當(dāng)真的不再使用它們時,將用版本 4.1 中添加的 $_get 和 $_post 數(shù)組替代它們。
這兩類數(shù)組的類型都是散列表(hash table)。散列表是通過字符串值而不是整數(shù)來建立索引的數(shù)組。使用表單時,可以通過值的名稱來訪問值,如清單 3 所示:
清單 3. 通過散列表訪問表單值
<?
$ship_value = $http_get_vars['ship'];
echo $ship_value;
echo "<br />";
$tripdate_value = $http_get_vars['tripdate'];
echo $tripdate_value;
echo "<br />";
$exploration_value= $http_get_vars['exploration'];
echo $exploration_value;
echo "<br />";
$contact_value = $http_get_vars['contact'];
echo $contact_value;
?>
使用該方法,您可以通過名稱來檢索每個字段的值。
單名,多值
到現(xiàn)在為止,每個名稱僅對應(yīng)一個值。如果有多個值會怎樣?例如,crew species 列表框允許用名稱 crew 提交多個值。
理想情況下,您希望將這些值作為數(shù)組使用,這樣就可以顯式地檢索它們。要實現(xiàn)這一點,您必須對 html 頁面稍加改動。要作為數(shù)組提交的字段應(yīng)該用方括號命名,如 crew[] 中:
清單 4. 修改 html 頁面
...
<td>
<select name="crew[]" multiple="multiple">
<option value="xebrax">xebrax</option>
<option value="snertal">snertal</option>
<option value="gosny">gosny</option>
</select>
</td>
...
一旦您作出更改,檢索表單值實際上產(chǎn)生數(shù)組:
清單 5. 將變量作為數(shù)組訪問
...
$crew_values = $http_get_vars['crew'];
echo "0) ".$crew_values[0];
echo "<br />";
echo "1) ".$crew_values[1];
echo "<br />";
echo "2) ".$crew_values[2];
...
現(xiàn)在,提交頁面后會顯示多個值:
0) snertal
1) gosny
2)
首先要注意這是一個下標(biāo)從 0 開始的數(shù)組。第一個遇到的值在位置 0 中,接下來的值在位置 1,以此類推。在本例中,我只提交了兩個值,所以第三項為空。
通常,您不知道將提交多少項,因此您可以利用它是數(shù)組這一事實使用 sizeof() 函數(shù)來確定提交了多少值,而不必直接調(diào)用每一項:
清單 6. 確定數(shù)組的大小
...
for ($i = 0; $i < sizeof($crew_values); $i++) {
echo $crew_values[$i];
echo "<br />";
}
...
然而,有時問題不是值太多,而是根本沒有