在PHP中的處理表單資料比其它網頁程式語言更簡單——如果你使用這種語言一段時間後,你會發現這是一個不可爭辯的事實。這種操作的簡易性使它可以容易地處理更為複雜的表單事件,包括今天討論的主題,即在同一個表單中通過多個按鈕來處理不同的任務。
為什麼使用多個提交任務?
在我回答這個問題之前,先讓我回答一個很顯然的問題:既然許多表單更適合單一的提交按鈕,為什麼有時人們需要的是兩個(或者是更多)的提交按鈕?
對這一問題最好的解釋方法是用我最近開發項目中的一個執行個體來說明。在這一項目中,我的工作是給一個圖書館建立一個詳細目錄查詢系統。書籍題目被儲存在資料庫中,而管理員將可以使用一個基於瀏覽器功能的介面來查看其中任何一本書的記錄,然後對這一記錄上選擇執行四種操作之一:成員還書登記,成員借書登記,書本丟失記錄以及書本銷售記錄。
以上所有任務都要通過一個獨立表單來處理,這樣就需要相應的按鈕來響應這些任務。傳入到表單的資料將以不同的方式處理,這取決於被點擊的按鈕(借書/還書和成員記錄相互關聯;丟失/銷售記錄改變詳細目錄表)。由於一個表單只能處理一個唯一的任務,但是相同的PHP指令碼可以根據被點擊的按鈕和執行合適的程式碼片段來處理以上四種任務。因此就需要處理多個提交任務按鈕的單一表單,以及實現不同按鈕的自動響應的表單處理程式碼片段。
我首先列舉一個簡單例子:一個提交按扭的表單。這樣能夠讓你清楚地理解基本概念,並且為將要講述的複雜範例打下鋪墊。這裡是一個表單:
<html><head>Single-button form</head>
<body>
<form action="processor.php" method="post"> Enter a number: <input type="text" name="number" size="3"> <br>
<input type="submit" name="submit"> </form>
</body>
</html>
以下的是調用提交任務的processor.php指令碼:
<?php
// check for submission
// retrieve value from posted data
if ($_POST['submit'])
{
echo "You entered the number " . $_POST['number']; }
?>
當一個表單被提交給PHP指令碼時,根據使用的提交方法(本文我假設為POST),PHP自動建立一個特定的$_POST或者$_GET數組。鍵入到表單輸入欄位內的數值會自動轉化成數組中的關鍵資料,並可以使用常規資料符號來訪問這些資料。
特別值得注意的是,如何在以上指令碼中處理提交任務的按扭。當表單被提交時,提交按鈕根據自己實際的“name”轉變成$_POST中的一個元素。添加以下一行代碼就很清楚了:
print_r($_POST);
為了瞭解以上PHP指令碼,你可以查看數組的內部結構,並可以清楚地看到不同表單控制項之間的相互聯絡。