2009-07-26 113 views
2

我正在尋找一種乾淨的方式來處理與PHP驗證和緩存數據的表單,但不需要將PHP與表單HTML混合。基本上,我希望能夠用純HTML編寫一個表單,並在它到達目的地的途中攔截該表單,處理它,或者讓數據順利地運行,或返回到發送驗證錯誤和緩存結果的表單回來了。檢測表單是否已提交與PHP

這是我正在開發的一個小框架的一部分,作爲對學習的幫助。我最初的計劃是使用Routing對象來嗅出GET和POST數據,但是這些數據並不總是表示表單的存在。

我一直在尋找this list of HTTP Headers,但我沒有看到任何可以幫助的東西。雖然我從來沒有打擾過看過HTTP Headers,所以我可能很容易丟失一些東西。

還是有其他一些可靠的方式來檢測表單提交?

+0

請問這個做法帳戶返回驗證錯誤和重新建羣的形式? – Rafe 2009-07-26 15:52:18

+0

兩種方式。首先,有一個記錄器類,每個視圖都包含一個實例。每個視圖所做的第一件事是顯示任何用戶反饋。其次,每個佈局都會自動加載一些核心js函數。其中一個函數將恢復緩存的值,並將錯誤類添加到錯誤的字段。 – gargantuan 2009-07-26 15:56:01

回答

4

當談到GET請求時,沒有通用的方式來區分表單提交和簡單鏈接。

使用普通的HTML,只有表單可以生成POST請求,所以在REQUEST_METHOD上過濾可能是一個可行的解決方案。 (然而,這顯然不會趕上GET請求,和AJAX還可以生成POST請求,所以......)

如果你控制的形式,我建議添加類似

<input type="hidden" name="this_is_a_form" /> 

到每一種形式。 (對於獎勵積分,您可以攔截HTML表單並在飛行中添加上面的行)。

0

你幾乎有兩種選擇:

  1. 使用AJAX。
  2. 提交到middleman.php並重定向到該過程的第2步,或返回到表單。

我會推薦ajax以避免不必要的頁面加載。你可以這樣做:

(假設使用jQuery在這裏,因爲這是我所知道的)

$.post("middleman.php", {option1: options}, function(data){ 
    if (data == 1) window.location = 'step2.html'; 
    else $("#notificationArea").text("sorry, form incorrect")}, "html"); 

然後你middleman.php將爲正確提交的表單,或其他任何不正確的迴應是1 。

此外,此javascript通知用戶的不正確。您還可以爲表單的特定部分回送特定的錯誤消息,這些消息不正確。 (這也假定你有一個可以保存noficiation的div「notificiationArea」)

+0

我的目標是在不使用任何Javascript的情況下工作(儘管我將在返回旅程中使用jQuery來獲得一些額外的金光閃閃,但它將在沒有它的情況下運行)。另外,Ajax解決方案不會使數據庫插入的數據安全。其次,我真的希望通過讓它的動作屬性指向確切的位置來保持表格的純度。 – gargantuan 2009-07-26 16:08:22

0

我鼓勵您查看現有框架如何完成數據驗證。我使用QCubed,它們完全符合您的描述(攔截用戶輸入並在處理之前對其進行驗證)。以下是描述表單處理流程的教程:http://examples.qcu.be/assets/_core/php/examples/basic_qform/process_flow.php。 Form_Validate就是你所描述的階段。

備註:出於安全性/數據完整性原因,在服務器端進行數據驗證很重要。如果你願意,你可以在其上添加客戶端(javascript)驗證,以改善用戶體驗。但是您也必須擁有服務器端驗證。

0

您可以通過檢查:

if(!empty($_POST) && isset($_POST['submit'])) 

其中,「提交」是您的提交按鈕的名稱...