2010-05-10 88 views
2

是否可以使用PHP驗證表單是否可用JavaScript?我目前能夠同時使用我現有的form,但僅限於個人使用。使用PHP和JavaScript驗證表單?

我的總體目標是:

  1. 使用的JavaScript客戶端,並立即提出任何錯誤給用戶驗證表單。
  2. 如果JavaScript驗證通過,將創建一個標誌,然後可以開始腳本。

在做我的的JavaScript驗證,我用的是form標記中下面的代碼:

<form id="Enroll_Form" action="review.php" method="post" name="Enroll_Form" onsubmit="return Enroll_Form_Validator(this)" language="javascript"> 

如果我要處理的PHP驗證我被迫行動重命名爲PHP_SELF文件(或簡單地與我使用的文件名相同)並刪除'onsubmit'功能。

+1

爲什麼你認爲表單動作必須是PHP_SELF(具有相同的文件名)? – a1ex07 2010-05-10 21:48:13

+0

如果我想讓PHP驗證返回的結果出現在同一頁面上(以及在發現錯誤時使用發佈的數據填充一次,則該操作必須位於同一頁面)。 – JM4 2010-05-10 22:14:20

+1

我的首選方法是使用相同的PHP函數通過AJAX驗證服務器端和客戶端。只需將驗證功能包含在AJAX請求的頁面中,並在服務器端處理表單時再次執行這些功能。 – 2010-05-10 22:18:19

回答

3

更新性反應來評論

首先,JavaScript不能成爲一個安全的驗證,原因是顯而易見的!它可以是顯示警報和通知的奇特方式,但只是糖!

實際驗證必須在PHP或其他服務器端語言以及數據庫端通過檢查和格式化值來完成!

這個簡單的腳本僅僅是您如何構建智能驗證器的演示,但當然這只是一個概念驗證!


DEMO:http://jsbin.com/aceze/29

$(function() { 
    $('#myform').submit(function() { 
     var error = false; // flag 

     $('.email,.digits,.empty,.some').each(function() { 

      var check = this.className; 

      if (check == 'empty') if (!checkEmpty(this.value)) error = true; 

      if (check == 'digits') if (!checkDigits(this.value)) error = true; 

      if (check == 'email') if (!checkEmail(this.value)) error = true; 

      if (check == 'some') if (!checkSome(this.value)) error = true; 

      if (error) { 
       $(this).css('border', '1px solid red'); 
      } else { 
       $(this).css('border', '1px solid green'); 
      } 
     }); 

     if (error) { 
      return false; 
     } 
    }); 
}); 

然後關於<form>動作,你不需要在它PHP頁面的路徑,但必須使用AJAX的使POST 只是離開review.php在哪裏看到下面的片段:

// FIRST SNIPPET action="#" 
      if (error == false) { 
      //if all is ok give our form it's php 
      $(this).attr('action','review.php'); 
      } else { 
      // error 
      // place false here so the form don't submit if validation fail! 
      return false; 
     } 

    // SECOND SNIPPET action="review.php" 

      if (error == true) { 
     // form submit only if validation pass 
      return false; 
      } 

    // THIRD SNIPPET action="#" AJAX 

    if (error == false) { 
      // success 
      } else { 
      // error 

     } 
    // this false prevent the form submit in anycase, cause we use AJAX 
    return false; 
+0

做我覺得你展示的例子是有趣的,但不知道它得到了我想去的地方。是否有任何實際的JS驗證在這裏進行還是所有服務器端?我不會說謊 - 我必須爲這個網站完成的現場驗證很多,而且沒有樂趣。 – JM4 2010-05-10 23:58:35

+0

@J M 4這種形式只是檢查表單域是否爲空。這裏沒有任何數據檢查。使用PHP正則表達式或任何其他 – ggfan 2010-05-11 00:06:40

+0

看到我的更新! – 2010-05-11 09:48:20

0

我不真正看到的問題是什麼,如果你的onsubmit行動在非(JavaScript)的驗證形式的情況下返回false,形式簡單doesn't得到如果啓用javascript提交。

一旦表單被提交時,PHP可以爲所欲爲,驗證,返回錯誤等

+0

我在這裏說的是,javascript實際上正在運行,但如果我以這種方式使用它,PHP將不會運行。 onsubmit函數覆蓋表單域 – JM4 2010-05-10 22:15:24

0

我沒有試過,但是從我的頭頂;您不需要在您的窗體中使用language="JavaScript"來使用onsumbit事件處理程序。如果該事件的計算結果爲true,那麼該表單將被正常提交(所以PHP會看到它並可以進行驗證)。

很高興看到您不依賴於客戶端驗證。在瀏覽器中禁用JavaScript是微不足道的。一個應該總是驗證一個人的輸入。

+0

fredden中的'action',您是對的 - 我已經刪除了棄用的語言。謝謝! – JM4 2010-05-11 14:38:15

0

不要過分依賴這種東西的JS。是的,你可以驗證,以防止用戶錯誤,但有人可以很容易地創建一個.html

<form action="http://yoursite.com/review.php" method="post"> 
    <input type="submit"> 
</form> 

並繞過您有任何JS驗證。如果您沒有任何JS驗證,就像在PHP中驗證一樣。

+0

感謝您的幫助! – JM4 2010-05-10 22:16:13

+0

同時使用! JS允許你在表單字段被突出顯示的情況下使它「非常漂亮」。難以在PHP IMO – ggfan 2010-05-10 23:28:44