令人驚奇的消失的復選框
復選框只有實際被選中時才被提交,認識到這一點很重要。否則,它的消失將告訴您所需知道的實情:用戶沒有單擊復選框。使用復選框時,您可以使用 isset() 函數(shù)顯式地檢查是否設置了值:
清單 7. 檢查是否提交了復選框 ... $contact_value = $http_get_vars['contact']; echo $contact_value; if (isset($contact_value)) { //the checkbox was clicked } else { //the checkbox wasn't clicked } ... |
獲取所有表單值
復選框字段只是您對預期表單值名稱可能不完全有把握的情形的示例之一。通常,您會發(fā)現(xiàn)有一個以通用方法訪問所有表單值的例程是很有用的。
幸運的是,因為 $http_get_vars及其同類只是散列表,您可以用數(shù)組的一些特性來操作它們。例如,您可以使用 array_keys() 函數(shù)來獲取所有潛在值名稱的列表:
清單 8. 獲取表單值名稱的列表 ... $form_fields = array_keys($http_get_vars); for ($i = 0; $i < sizeof($form_fields); $i++) { $thisfield = $form_fields[$i]; $thisvalue = $http_get_vars[$thisfield]; echo $thisfield ." = ". $thisvalue; echo "<br />"; } ... |
在本例中,您實際上結合了幾種技術。首先,檢索表單字段名稱的數(shù)組并將其命名為 $form_fields。$form_fields 數(shù)組只是一個典型的數(shù)組,因此您可以使用 sizeof() 函數(shù)來確定潛在鍵的數(shù)目,并對每一項進行循環(huán)遍歷。對于每一項,檢索字段的名稱然后使用該名稱獲取實際值。生成的 web 頁面看起來如下:
ship = midnight runner tripdate = exploration = yes crew = array |
這里有兩個重要事項。第一,contact 字段根本沒有返回值,這正如預期的那樣。第二,crew 值(順便說一下,您或許知道:它的名稱是 crew 而不是 crew[])是一個數(shù)組而不是值。為了實際檢索所有值,需要使用 is_array() 函數(shù)檢測所有數(shù)組并相應地處理它們:
清單 9. 處理數(shù)組 ... for ($i = 0; $i < sizeof($form_fields); $i++) { $thisfield = $form_fields[$i]; $thisvalue = $http_get_vars[$thisfield]; if (is_array($thisvalue)){ for ($j = 0; $j < sizeof($thisvalue); $j++) { echo $thisfield ." = ". $thisvalue[$j]; echo "<br />"; } } else { echo $thisfield ." = ". $thisvalue; } echo "<br />"; } ... |
結果是所有已實際提交的數(shù)據(jù):
ship = midnight runner tripdate = exploration = yes crew = snertal crew = gosny |
最后一個說明:點
既然您有了能適應您提交任何表單值的表單操作頁面,您就需要抽一點時間考慮一個常常讓 php 程序員感到意外的情形。
有些情況下,設計人員會選擇使用一個圖形按鈕而不是提交按鈕,圖形按鈕如圖 2 所示,代碼如清單 10 所示。
清單 10. 添加圖形按鈕 ... <tr> <td valign="top">crew species: </td> <td> <select name="crew[]" multiple="multiple"> <option value="xebrax">xebrax</option> <option value="snertal">snertal</option> <option value="gosny">gosny</option> </select> </td> </tr> <tr> <td colspan="2" align="center"> <input type="image" src="button.gif" name="formbutton"/> </td> </tr> </table> ... |
圖 2. 表單上的圖形按鈕
請注意,盡管上圖中只有一個圖像,卻有兩個圖形按鈕(或期望的結果)。作為開發(fā)人員,您可以通過檢查和值一同返回的 x 和 y 坐標知道用戶單擊了何處。事實上,按原樣提交該表單可能會創(chuàng)建以如下所示結尾的 url 和查詢字符串:
...snertal&crew%5b%5d=gosny&formbutton.x=37&formbutton.y=14 |
請注意附加到按鈕名稱的 .x 和 .y。然而,如果您打算提交該頁面然后查看結果,您會看到:
ship = midnight runner tripdate = exploration = yes crew = snertal crew = gosny formbutton_x = 37 formbutton_y = 14 |
請注意,點號(.)已被轉換成下劃線(_)。這似乎有點奇怪,但它是必要的,因為 php 中的變量名不能有點號,因此 $formbutton.x 會是一個非法變量名。事實上,表單名稱中的任何點號 — 不僅僅針對圖像按鈕 — 都被轉換成下劃線。
結束語
在本文中,您看到了對用戶通過html或xhtml表單提交的信息進行訪問的幾種方法。如何處理該信息取決于您使用的php版本和您是否能將表單變量作為全局變量進行訪問。無論何種情況,表單值可作為數(shù)組使用,并且您可以用數(shù)組的特性來循環(huán)遍歷所有可用的值。
新聞熱點
疑難解答