2011-08-24 181 views
2

我設計了一個使用HTML和PHP的客戶表單。但現在的問題是,驗證表單。我希望像asp.net頁面那樣進行驗證:只要文本框控件失去焦點,驗證器就會顯示狀態。使用PHP動態驗證HTML表單

這是可能的PHP?

回答

1

沒有Javascript支持,這是不可能的,即使ASP.NET使用Javascript來協助驗證表單中的輸入字段。

您正在研究AJAX解決方案或JS驗證客戶端+ PHP服務器端驗證(始終需要執行客戶端+服務器驗證)。

但是不,沒有純PHP用於客戶端驗證,PHP是服務器端。

0

當你說你想要驗證發生「當文本框失去焦點」,這意味着你的意圖是做客戶端驗證。我極力阻止你這樣做,因爲客戶端「任何事物」都不應該被信任。所有的驗證都應該在服務器端完成。

現在,您可能希望使用一些jQuery來通過在瀏覽器中進行驗證來增強表單的「用戶體驗」,但請不要誤解,這僅用於展示。

下面的代碼應該引領你在正確的方向

// $clean_post: Assumes you already sanitized for SQL injection attack vectors and 
// that you have already ensured proper character encoding. 

// Example is for a hypothetical first name 
if(empty($clean_post[ 'first_name' ])) 
{ 
    // Do something to let the user know that first name is required 
} 
else 
{ 
    // They entered a first name, this is good. Now check for 
    // invalid characters. We will allow A-Z , backtick, apostrophe, space and dash 
    if(preg_match("/[^a-zA-Z `'\-]/" , $clean_post[ 'first_name' ])) 
    { 
     // Do something because they have illegal characters. 
    } 

} 
0

你需要使用JavaScript/JQuery的實時驗證。如果您必須使用PHP來驗證輸入,則可以使用AJAX調用來驗證輸入和返回的PHP腳本。下面是類似於AJAX調用看起來像從輸入框中獲取值並將其傳遞給PHP腳本的內容。如果PHP腳本打印出「已通過」,那麼一切都很好,但如果沒有,則會刪除該值並提醒用戶。

$.ajax({ 
    type:'post', 
    data:'value='+$('#inputFieldID').val(); 
    url:'path-to-validate-script.php', 
    success:function(msg){ 
     if (msg != "passed") { 
      $('#inputFieldID').val(''); 
      alert("Invalid Input!"); 
     } 
    } 
}); 
+0

您的回答完全忽略了您無法單獨依靠前端驗證的事實。關掉JavaScript,你的解決方案就成了一塊無用的代碼。是的,用於前端驗證的Javascript,但你只給出了一半的答案。 – bpeterson76

0

以下是關於驗證的事情:客戶端驗證看起來不錯,可以非常快地進行設置。這對用戶更好,因爲它可以「做更多」來指示問題(vs只是沒有JavaScript的PHP)

但是,這是一個大,但它不是萬無一失的。你關掉了Javascript,你的驗證在水裏死了。依賴於任何JavaScript或jQuery對您的數據輸入不負責任......所以,您將不得不依靠混合解決方案 - 前端和後端。並且不要忘記數據消毒,要麼......或者您最終會以little Bobby Tables作爲您的網站用戶之一。

我公司確實將表格作爲其業務的核心部分。如果我要做自定義驗證,我會發瘋,把自己從屋頂上拋下。我爲use this script節省時間....它是快速,有效,和萬無一失,只需一行或兩個代碼,包括在課堂上的幾個字,使其工作。再次,這只是雙管齊下混合方法的前端部分。

在後端,當您提交時,如果驗證失敗,只需要讓函數返回問題輸入,並指示回UI以便可以引發警告。在我的應用程序中,我在最初隱藏的表單頂部有一個集中的「問題」警報區域,它捕獲PHP發出的所有後端驗證問題並將它們顯示在一個位置。如果他們花時間來覆蓋我的前端驗證,他們應該不得不通過一個巨大的錯誤信息,我想。