亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
查看: 1333 | 回復(fù): 0
打印 上一主題 下一主題

結(jié)合 PHP 使用 HTML 表單訪問(wèn)單個(gè)和多個(gè)表單值 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2005-09-27 17:14 |只看該作者 |倒序?yàn)g覽
   結(jié)合 PHP 使用 HTML 表單訪問(wèn)單個(gè)和多個(gè)表單值
能較容易地對(duì)用戶通過(guò) HTML 表單提交的信息進(jìn)行操作的能力一直是 PHP 的優(yōu)勢(shì)之一。事實(shí)上,PHP 版本 4.1 添加了幾個(gè)訪問(wèn)該信息的新方法并有效地除去了以前版本中最常用的一個(gè)方法。本文研究了使用 HTML 表單上提交的信息的不同方法,并同時(shí)使用了 PHP 較早的版本和較新的版本。本文首先從研究單個(gè)值開(kāi)始,然后構(gòu)建可以一般性地訪問(wèn)任何可用的表單值的頁(yè)面。
注:本文假定您對(duì)運(yùn)行 PHP 版本 3.0 或更高版本的 Web 服務(wù)器具有訪問(wèn)權(quán)。您需要對(duì) PHP 本身以及創(chuàng)建 HTML 表單有基本了解。
HTML 表單
在閱讀本文的過(guò)程中,您將看到不同類型的 HTML 表單元素如何提供 PHP 能夠訪問(wèn)的信息。針對(duì)本示例,我使用了一個(gè)簡(jiǎn)單的信息表單,它由兩個(gè)文本域、兩個(gè)復(fù)選框和一個(gè)允許多項(xiàng)的選擇框組成:
清單 1. HTML 表單
Tour Information
Mission Information
  
    Ship Name:
    Trip Date:
    Mission Goals:
   
      
               Exploration
      
               Contact
   
   
      Crew species:  
      
        
           Xebrax
           Snertal
           Gosny
        
      
   
   
  
在沒(méi)有指定方法的情況下,該表單使用缺省方法 GET,瀏覽器用它將表單值附加到 URL,如下所示:
http://www.vanguardreport.com/formaction.php?
ship=Midnight+Runner&tripdate=12-15-2433&exploration=yes&crew=snertal&crew=gosny
圖 1 顯示表單本身。
圖 1. HTML 表單


老辦法:訪問(wèn)全局變量
清單 2 中顯示的代碼將表單值作為全局變量處理:
清單 2. 作為全局變量的表單值
$ship;
echo "
";
echo "Tripdate = ".$tripdate;
echo "
";
echo "Exploration = ".$exploration;
echo "
";
echo "Contact = ".$contact;
?>
生成的 Web 頁(yè)面顯示提交的值:
Ship = Midnight Runner
Tripdate = 12-15-2433
Exploration = yes
Contact =
(正如您稍后將看到的那樣,Contact 沒(méi)有值,因?yàn)闆](méi)有選中那個(gè)框)。
清單 2 中的表示法當(dāng)然是方便的,但它僅在 PHP 偽指令 register_globals 被設(shè)置為 on 時(shí)才可用。在版本 4.2 以前,這是缺省設(shè)置,許多 PHP 開(kāi)發(fā)人員甚至沒(méi)有意識(shí)到有這樣的問(wèn)題。然而,從版本 4.2 開(kāi)始,register_globals 的缺省設(shè)置是 off,在此情況下,該表示法不能正常工作,因?yàn)椴辉儆眠m當(dāng)?shù)闹祫?chuàng)建并初始化變量。
然而,您可以用其它的方法初始化這些變量。第一個(gè)方法是更改 register_globals 的值。許多使用共享服務(wù)器的開(kāi)發(fā)人員無(wú)權(quán)為整個(gè)服務(wù)器更改該值,但可以針對(duì)某個(gè)特定站點(diǎn)改變行為。如您有 .htaccess 文件的訪問(wèn)權(quán),您可以通過(guò)添加以下偽指令啟用 register_globals:
php_flag register_globals on
鑒于對(duì)該特性是否可用的不確定性,建議開(kāi)發(fā)人員最好不要使用或依靠這種獲取變量的方法。那么您有什么選擇呢?
如果您的系統(tǒng)運(yùn)行的是版本 4.1 或更高版本,則您的另一個(gè)選擇是使用 import_request_variables() 有選擇地注冊(cè)全局變量集合。您可以使用該函數(shù)導(dǎo)入 get、post 和 cookie 值,而且如果您愿意的話,還可以給每項(xiàng)添加前綴。例如:
import_request_variables(gp, "formval_");
echo "Ship = ".$formval_ship;
echo "
";
echo "Tripdate = ".$formval_tripdate;
echo "
";
echo "Exploration = ".$formval_exploration;
echo "
";
echo "Contact = ".$formval_contact;
?>
這里,導(dǎo)入了 get 和 post 值 — 使用 c 來(lái)導(dǎo)入 cookie 值 — 而且由于 p 跟在 g 之后,所以 post 值將覆蓋同名的 get 值。
但如果您象許多開(kāi)發(fā)人員一樣沒(méi)有運(yùn)行版本 4.1 或更高版本,那怎么辦呢?
訪問(wèn)表單值集合
對(duì)于那些運(yùn)行較早版本或不愿使用全局變量的人來(lái)說(shuō),可以選擇使用 $HTTP_GET_VARS 和 $HTTP_POST_VARS 數(shù)組。盡管并不贊成使用這些集合,但它們?nèi)匀豢捎,而且仍被廣泛使用。當(dāng)真的不再使用它們時(shí),將用版本 4.1 中添加的 $_GET 和 $_POST 數(shù)組替代它們。
這兩類數(shù)組的類型都是散列表(hash table)。散列表是通過(guò)字符串值而不是整數(shù)來(lái)建立索引的數(shù)組。使用表單時(shí),可以通過(guò)值的名稱來(lái)訪問(wèn)值,如 清單 3 所示:
清單 3. 通過(guò)散列表訪問(wèn)表單值
$HTTP_GET_VARS['ship'];
echo $ship_value;
echo "
";
$tripdate_value = $HTTP_GET_VARS['tripdate'];
echo $tripdate_value;
echo "
";
$exploration_value= $HTTP_GET_VARS['exploration'];
echo $exploration_value;
echo "
";
$contact_value = $HTTP_GET_VARS['contact'];
echo $contact_value;
?>
使用該方法,您可以通過(guò)名稱來(lái)檢索每個(gè)字段的值。
單名,多值
到現(xiàn)在為止,每個(gè)名稱僅對(duì)應(yīng)一個(gè)值。如果有多個(gè)值會(huì)怎樣?例如,crew species 列表框允許用名稱 crew 提交多個(gè)值。
理想情況下,您希望將這些值作為數(shù)組使用,這樣就可以顯式地檢索它們。要實(shí)現(xiàn)這一點(diǎn),您必須對(duì) HTML 頁(yè)面稍加改動(dòng)。要作為數(shù)組提交的字段應(yīng)該用方括號(hào)命名,如 crew[] 中:
清單 4. 修改 HTML 頁(yè)面
...
      
           "crew[]" multiple="multiple">
                   Xebrax
                   Snertal
                   Gosny
           
      
...
一旦您作出更改,檢索表單值實(shí)際上產(chǎn)生數(shù)組:
清單 5. 將變量作為數(shù)組訪問(wèn)
...
$crew_values = $HTTP_GET_VARS['crew'];
echo "0) ".$crew_values[0];
echo "
";
echo "1) ".$crew_values[1];
echo "
";
echo "2) ".$crew_values[2];
...
現(xiàn)在,提交頁(yè)面后會(huì)顯示多個(gè)值:
0) snertal
1) gosny
2)
首先要注意這是一個(gè)下標(biāo)從 0 開(kāi)始的數(shù)組。第一個(gè)遇到的值在位置 0 中,接下來(lái)的值在位置 1,以此類推。在本例中,我只提交了兩個(gè)值,所以第三項(xiàng)為空。
通常,您不知道將提交多少項(xiàng),因此您可以利用它是數(shù)組這一事實(shí)使用 sizeof() 函數(shù)來(lái)確定提交了多少值,而不必直接調(diào)用每一項(xiàng):
清單 6. 確定數(shù)組的大小
...
for ($i = 0; $i sizeof($crew_values); $i++) {
    echo $crew_values[$i];
    echo "
";
}
...
然而,有時(shí)問(wèn)題不是值太多,而是根本沒(méi)有值。
令人驚奇的消失的復(fù)選框
復(fù)選框只有實(shí)際被選中時(shí)才被提交,認(rèn)識(shí)到這一點(diǎn)很重要。否則,它的消失將告訴您所需知道的實(shí)情:用戶沒(méi)有單擊復(fù)選框。使用復(fù)選框時(shí),您可以使用 isset() 函數(shù)顯式地檢查是否設(shè)置了值:
清單 7. 檢查是否提交了復(fù)選框
...
$contact_value = $HTTP_GET_VARS['contact'];
echo $contact_value;
if (isset($contact_value)) {
  //The checkbox was clicked
} else {
  //The checkbox wasn't clicked
}
...
獲取所有表單值
復(fù)選框字段只是您對(duì)預(yù)期表單值名稱可能不完全有把握的情形的示例之一。通常,您會(huì)發(fā)現(xiàn)有一個(gè)以通用方法訪問(wèn)所有表單值的例程是很有用的。
幸運(yùn)的是,因?yàn)?$HTTP_GET_VARS 及其同類只是散列表,您可以用數(shù)組的一些特性來(lái)操作它們。例如,您可以使用 array_keys() 函數(shù)來(lái)獲取所有潛在值名稱的列表:
清單 8. 獲取表單值名稱的列表
...
$form_fields = array_keys($HTTP_GET_VARS);
for ($i = 0; $i
在本例中,您實(shí)際上結(jié)合了幾種技術(shù)。首先,檢索表單字段名稱的數(shù)組并將其命名為 $form_fields。$form_fields 數(shù)組只是一個(gè)典型的數(shù)組,因此您可以使用 sizeof() 函數(shù)來(lái)確定潛在鍵的數(shù)目,并對(duì)每一項(xiàng)進(jìn)行循環(huán)遍歷。對(duì)于每一項(xiàng),檢索字段的名稱然后使用該名稱獲取實(shí)際值。生成的 Web 頁(yè)面看起來(lái)如下:
ship = Midnight Runner
tripdate = 12-15-2433
exploration = yes
crew = Array
這里有兩個(gè)重要事項(xiàng)。第一,contact 字段根本沒(méi)有返回值,這正如預(yù)期的那樣。第二,crew 值(順便說(shuō)一下,您或許知道:它的名稱是 crew 而不是 crew[])是一個(gè)數(shù)組而不是值。為了實(shí)際檢索所有值,需要使用 is_array() 函數(shù)檢測(cè)所有數(shù)組并相應(yīng)地處理它們:
清單 9. 處理數(shù)組
...
for ($i = 0; $i    if (is_array($thisValue)){
        for ($j = 0; $j
    echo "
";  
}
...
結(jié)果是所有已實(shí)際提交的數(shù)據(jù):
ship = Midnight Runner
tripdate = 12-15-2433
exploration = yes
crew = snertal
crew = gosny
最后一個(gè)說(shuō)明:點(diǎn)
既然您有了能適應(yīng)您提交任何表單值的表單操作頁(yè)面,您就需要抽一點(diǎn)時(shí)間考慮一個(gè)常常讓 PHP 程序員感到意外的情形。
有些情況下,設(shè)計(jì)人員會(huì)選擇使用一個(gè)圖形按鈕而不是提交按鈕,圖形按鈕如圖 2所示,代碼如清單 10所示。
清單 10. 添加圖形按鈕
...
        
           Crew species:  
           
               
                   Xebrax
                   Snertal
                   Gosny
               
           
        
        
           
              
           
        
   
...
圖 2. 表單上的圖形按鈕


請(qǐng)注意,盡管上圖中只有一個(gè)圖像,卻有兩個(gè)圖形按鈕(或期望的結(jié)果)。作為開(kāi)發(fā)人員,您可以通過(guò)檢查和值一同返回的 x 和 y 坐標(biāo)知道用戶單擊了何處。事實(shí)上,按原樣提交該表單可能會(huì)創(chuàng)建以如下所示結(jié)尾的 URL 和查詢字符串:
...snertal&crew%5B%5D=gosny&formbutton.x=37&formbutton.y=14
請(qǐng)注意附加到按鈕名稱的 .x 和 .y。然而,如果您打算提交該頁(yè)面然后查看結(jié)果,您會(huì)看到:
ship = Midnight Runner
tripdate = 12-15-2433
exploration = yes
crew = snertal
crew = gosny
formbutton_x = 37
formbutton_y = 14
請(qǐng)注意,點(diǎn)號(hào)(.)已被轉(zhuǎn)換成下劃線(_)。這似乎有點(diǎn)奇怪,但它是必要的,因?yàn)?PHP 中的變量名不能有點(diǎn)號(hào),因此 $formbutton.x 會(huì)是一個(gè)非法變量名。事實(shí)上,表單名稱中的任何點(diǎn)號(hào) — 不僅僅針對(duì)圖像按鈕 — 都被轉(zhuǎn)換成下劃線。
結(jié)束語(yǔ)
在本文中,您看到了對(duì)用戶通過(guò) HTML 或 XHTML 表單提交的信息進(jìn)行訪問(wèn)的幾種方法。如何處理該信息取決于您使用的 PHP 版本和您是否能將表單變量作為全局變量進(jìn)行訪問(wèn)。無(wú)論何種情況,表單值可作為數(shù)組使用,并且您可以用數(shù)組的特性來(lái)循環(huán)遍歷所有可用的值。
參考資料
關(guān)于作者
Nicholas Chase 參與過(guò) Lucent Technologies、Sun Microsystems、Oracle 和 Tampa Bay Buccaneers 等公司的網(wǎng)站開(kāi)發(fā)。Nick 曾是一名高中物理教師、低輻射廢物設(shè)施管理人員、在線科幻小說(shuō)雜志編輯、多媒體工程師和 Oracle 講師。最近,他成為 Site Dynamics Interactive Communications(位于佛羅里達(dá)州克利爾沃特市)的首席技術(shù)官,而且還是三本有關(guān) Web 開(kāi)發(fā)書籍的作者,包括 Java and XML From Scratch(Que)。他樂(lè)于聽(tīng)取讀者的意見(jiàn),可以通過(guò)
[color="#0000ff"]nicholas@nicholaschase.com
與他聯(lián)系。

本文來(lái)自ChinaUnix博客,如果查看原文請(qǐng)點(diǎn):http://blog.chinaunix.net/u/10346/showart_49647.html
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP