2014-05-03 81 views
0

我一直在爲未來的僱主做一些示例練習,最近我的任務是處理基本上我第一次寫php的任務。部分任務涉及將服務器端代碼與UI代碼分開,我完全理解其價值和我正在使用的代碼。不嵌入php提交表單錯誤

該任務的要點是創建一個發佈到服務器,驗證過的簡單表單,併發布到數據庫,還涉及其他許多任務和事物,但這實際上就是這樣。

所以我無法確定將表單驗證錯誤提交給用戶的最佳方式。我結束了一個會議,並將用戶重定向到似乎是大多數人所建議的形式。然後,我將從$_SESSION提交的數據打印回元素的value屬性中的用戶,並在出現錯誤時創建一些附加元素。

我被告知這不是他想要的,他簡要地提到用PHP和MySQL創建一個API,通過Ajax調用返回JSON數據。我明白,從數據庫中提取數據並返回JSON。

在這種情況下,當賦值實際上並不需要獲取存儲在數據庫中的數據時,只需插入新數據,然後您會將表單字段的錯誤和內容作爲JSON發回,而不是使用$_SESSION

+0

對於輸入數據的_validation_,他們希望您先將這些數據存儲到數據庫中,然後在用戶進行_failed_驗證時將其呈現給用戶?沒有什麼意義(至少在一般情況下,除非有人想記錄客戶的分析輸入,即使它是無效的 - 但如果沒有要求......) – CBroe

+0

是的,所以我跳過了客戶端驗證(以及使用html5 ,但假設失敗或有人繞過它惡意) - 服務器檢查必需/空/有效的電子郵件和電話模式,如果任何這些回來無效,我想要顯示在窗體上的用戶,並重新填充形成他們提交的數據。我用$ _SESSION做了它,但是這涉及到將PHP的片段嵌入到html中,是否有更好的方法來實現它? –

+0

那麼您可以通過AJAX將數據發送到服務器,然後獲取包含不同字段的錯誤消息的JSON數據結構......但是我看到它的優勢不大,因爲除非它特別驗證HTML5無法處理,它應該在沒有JS的情況下發生在客戶端。更有意義的話,恕我直言,通常發送表單,並在驗證錯誤的情況下再次輸出表單,消息在適當的地方 - 這樣,您不僅可以處理無法進行HTML5驗證的客戶端,還可以處理那些不會到JS/AJAX以及... – CBroe

回答

0

使用Ajax並不意味着使用數據庫。任何錯誤驗證都可以使用ajax請求在服務器端完成。

例如,如果你有哪些提交只能包含例如字母a值,假設你有以下形式的一種形式:

<span id="error" style="display:none;color:red;"></span> 
<form id="myform" action="submit.php" method="POST"> 
    <input name="mystring" type="text" placeholder="your text here"><br> 
    <button id="submit">Submit</button> 
</form> 

和你validate.php看起來是這樣的:

<?php> 
echo json_encode(array(
        "success"=>(ereg("^[a-zA-Z]+$", $_POST['mystring']), 
        "error"=>"This field must contain only letters" 
       )); 
?> 

那麼你的Ajax請求應該是這個樣子(使用jQuery):

$("#submit").click(function() { 
    $.ajax({ 
    type: "POST", 
    url: "validate.php", 

    success: function(response, status) { 
     if(response.success) { 
     $("#myform").submit(); 
     } 
     else { 
     $("#error").html(response.error).show();    
     } 
    } 
    }); 
}); 

這是如何工作的?

當你提交按鈕點擊onclick事件火災這部分代碼: $("#submit").click(function() {

一個Ajax請求到validate.php取得其接受字段的值,並檢查使用正則表達式來看看它只包含字母。 ereg("^[a-zA-Z]+$", $_POST['mystring'])的結果不是真或假。如果這是真的,那麼我們假定該字符串只包含字母。 json_encode()將數組轉換爲JSON字符串,因此您必須將正則表達式結果放入數組中。然後你必須回顯它才能創建一個空白頁面,然後將其返回到瀏覽器。 jQuery捕獲響應並假設響應是有效的JSON字符串,試圖解析它並創建一個javascript對象。然後這個對象被傳遞給成功回調函數。在我們的例子中稱爲響應。 接下來你檢查成功的值屬性的迴應對象。如果確實如此,我們會提交表單,如果不是,我們會顯示錯誤消息。

+0

這幾乎是我想我必須做的 - 有一個驗證和返回JSON的中間步驟。我會試試這個 –