為什麼使用多個提交任務?
在我回答這個問題之前,先讓我回答一個很顯然的問題:既然許多窗體更適合單一的提交按鈕,為什麼有時人們需要的是兩個(或者是更多)的提交按鈕?
對這一問題最好的解釋方法是用我最近開發項目中的一個實例來說明。在這一項目中,我的任務是給一個圖書館建立一個詳細目錄查詢系統。書籍題目被儲存在數據庫中,而管理員將可以使用一個基於浏覽器功能的界面來查看其中任何一本書的記錄,然後對這一記錄上選擇執行四種操作之一:成員還書登記,成員借書登記,書本丟失記錄以及書本銷售記錄。
以上所有任務都要通過一個獨立窗體來處理,這樣就需要相應的按鈕來響應這些任務。傳入到窗體的數據將以不同的方式處理,這取決於被點擊的按鈕(借書/還書和成員記錄相互關聯;丟失/銷售記錄改變詳細目錄表)。由於一個窗體只能處理一個唯一的任務,但是相同的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腳本,你可以查看數組的內部結構,並可以清楚地看到不同窗體控件之間的相互聯系。