使用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對象。然後這個對象被傳遞給成功回調函數。在我們的例子中稱爲響應。 接下來你檢查成功的值屬性的迴應對象。如果確實如此,我們會提交表單,如果不是,我們會顯示錯誤消息。
對於輸入數據的_validation_,他們希望您先將這些數據存儲到數據庫中,然後在用戶進行_failed_驗證時將其呈現給用戶?沒有什麼意義(至少在一般情況下,除非有人想記錄客戶的分析輸入,即使它是無效的 - 但如果沒有要求......) – CBroe
是的,所以我跳過了客戶端驗證(以及使用html5 ,但假設失敗或有人繞過它惡意) - 服務器檢查必需/空/有效的電子郵件和電話模式,如果任何這些回來無效,我想要顯示在窗體上的用戶,並重新填充形成他們提交的數據。我用$ _SESSION做了它,但是這涉及到將PHP的片段嵌入到html中,是否有更好的方法來實現它? –
那麼您可以通過AJAX將數據發送到服務器,然後獲取包含不同字段的錯誤消息的JSON數據結構......但是我看到它的優勢不大,因爲除非它特別驗證HTML5無法處理,它應該在沒有JS的情況下發生在客戶端。更有意義的話,恕我直言,通常發送表單,並在驗證錯誤的情況下再次輸出表單,消息在適當的地方 - 這樣,您不僅可以處理無法進行HTML5驗證的客戶端,還可以處理那些不會到JS/AJAX以及... – CBroe