結合PHP使用HTML表單(2)

來源:互聯網
上載者:User
清單 2 中的標記法當然是方便的,但它僅在 PHP 偽指令 register_globals 被設定為 on 時才可用。在版本 4.2 以前,這是預設設定,許多 PHP 開發人員甚至沒有意識到有這樣的問題。然而,從版本 4.2 開始,register_globals 的預設設定是 off,在此情況下,該標記法不能正常工作,因為不再用適當的值建立並初始設定變數。

然而,您可以用其它的方法初始化這些變數。第一個方法是更改 register_globals 的值。許多使用共用伺服器的開發人員無權為整個伺服器更改該值,但可以針對某個特定網站改變行為。如您有 .htaccess 檔案的訪問權,您可以通過添加以下偽指令啟用 register_globals:


 

php_flag register_globals on




鑒於對該特性是否可用的不確定性,建議開發人員最好不要使用或依靠這種擷取變數的方法。那麼您有什麼選擇呢?

如果您的系統啟動並執行是版本 4.1 或更高版本,則您的另一個選擇是使用 import_request_variables() 有選擇地註冊全域變數集合。您可以使用該函數匯入 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;

?>




這裡,匯入了 get 和 post 值 — 使用 c 來匯入 cookie 值 — 而且由於 p 跟在 g 之後,所以 post 值將覆蓋同名的 get 值。

但如果您象許多開發人員一樣沒有運行版本 4.1 或更高版本,那怎麼辦呢?

訪問表單值集合



對於那些運行較早版本或不願使用全域變數的人來說,可以選擇使用 $HTTP_GET_VARS 和 $HTTP_POST_VARS 數組。儘管並不贊成使用這些集合,但它們仍然可用,而且仍被廣泛使用。當真的不再使用它們時,將用版本 4.1 中添加的 $_GET 和 $_POST 數組替代它們。

這兩類數組的類型都是散列表(hash table)。散列表是通過字串值而不是整數來建立索引的數組。使用表單時,可以通過值的名稱來訪問值,如清單 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;

?>




使用該方法,您可以通過名稱來檢索每個欄位的值。

單名,多值



到現在為止,每個名稱僅對應一個值。如果有多個值會怎樣?例如,crew species 列表框允許用名稱 crew 提交多個值。

理想情況下,您希望將這些值作為數組使用,這樣就可以顯式地檢索它們。要實現這一點,您必須對 HTML 頁面稍加改動。要作為數組提交的欄位應該用方括弧命名,如 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>

...




一旦您作出更改,檢索表單值實際上產生數組:


 

清單 5. 將變數作為數組訪問

...

$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];

...




現在,提交頁面後會顯示多個值:


 

0) snertal

1) gosny

2)




首先要注意這是一個下標從 0 開始的數組。第一個遇到的值在位置 0 中,接下來的值在位置 1,以此類推。在本例中,我只提交了兩個值,所以第三項為空白。

通常,您不知道將提交多少項,因此您可以利用它是數組這一事實使用 sizeof() 函數來確定提交了多少值,而不必直接調用每一項:


 

清單 6. 確定數組的大小

...

for ($i = 0; $i < sizeof($crew_values); $i++) {

echo $crew_values[$i];

echo "<br />";

}

...




然而,有時問題不是值太多,而是根本沒有



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.