2011-12-12 87 views
0

我試圖驗證使用php將表單信息發送到一組電子郵件的表單的電子郵件字段。我使用Javascript來驗證電子郵件,它正在工作。使用JS驗證電子郵件的HTML表單,驗證有效,但表單仍然提交

問題是,即使在驗證返回false之後,表單仍然會處理信息併發送電子郵件,但是我還是喜歡一些指導,因爲我無法找到我正在創建的錯誤。

這裏的HTML代碼,我使用的形式:

  <form id="formulario-submit" onsubmit="return Validacion();" action="procesarsolicitud.php" method="POST"> 
      <table border="0" cellspacing="0" cellpadding="0"> 
       <tr> 
        <td> 
         <input type="text" value="Nombre*" id="nombre" name="nombre" onclick='this.value = "";'> 
        </td> 
       </tr> 
       <tr> 
        <td> 
         <input type="text" value="Apellido*" id="apellido" name="apellido" onclick='this.value = "";'> 
        </td> 
       </tr> 

       <tr> 
        <td> 
         <!--<input type="submit" value="Enviar" id="enviar" alt="enviar">--> 

         <button name="enviar" value="Submit" type="submit" id="enviar" alt="enviar" width="100"> 

這裏的JS代碼我使用驗證的電子郵件:

<script> 
function Validacion() 
{ 
var x=document.forms["formulario-submit"]["email"].value; 
var arroba=x.indexOf("@"); 
var punto=x.lastIndexOf("."); 
if (arroba<1 || punto<arroba+2 || punto+2>=x.length) 
{ 
    alert("Not a valid Email."); 
    email.focus(); 
    return false; 
} 
} 
</script> 

下面是PHP代碼(在一個名爲procesarsolicitud.php的單獨PHP文件中)用於處理數據併發送電子郵件:

$nombre = $_POST['nombre']; 
$apellido = $_POST['apellido'];  
    $email = $_POST['email']; 
    $message = ' 
    <html> 
    <head> 
     <title></title> 
    </head> 
    <body> 
     <h3>Form Data::</h3> 
     <tr> 
      <td width="200"><b>Nombre:</b></td> 
      <td>'.$nombre.'</td> 
     </tr> 
     <tr> 
      <td width="200"><b>Apellido:</b></td> 
      <td>'.$apellido.'</td> 
     </tr> 
     <tr> 
      <td width="200"><b>Email:</b></td> 
      <td>'.$email.'</td> 
     </tr>         
     <tr> 
     </tr>                       
     </table><br /> 

    </body> 
    </html> 
    '; 

    // multiple recipients 

    $to='[email protected],[email protected]'; 

    // subject 
    $subject = ' Email Subject'; 

    $headers = 'MIME-Version: 1.0' . "\r\n"; 
    $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n". 
    'From: Email <[email protected]>' . "\r\n"; 
    echo "MessageExample"; 



    // Mail it 
    mail($to, $subject, $message, $headers);  

在此先感謝。

+0

考慮使用''和瀏覽器填充來支持向後支持,而不是自定義Javascript代碼進行驗證。 – mario

回答

0

你不應該首先使用JS來驗證表單。確切地說,如果你這樣做了,你也必須檢查輸入服務器端(你也可以使用AJAX調用來在服務器端驗證表單,然後你可以重複使用相同的清理器/驗證器)。

關於您的具體問題,SOF「Ask Question」不是搜索引擎。在提問之前,你應該投入一些時間。您的問題已被詢問(例如,第一次來自谷歌的「onsubmit form return false」http://webdeveloper.com/forum/showthread.php?t=175736;來自SOF onSubmit returning false is not working的第一個結果)無數次。

p.s.如果有任何錯誤,請檢查控制檯(請參閱Firebug瞭解更多信息)。

+1

如果您首先使用JS驗證,它會降低顯然無法驗證的輸入的服務器負載。即使只是檢查在必填字段中輸入的內容比浪費的內容要好。 – FakeRainBrigand

+1

@FakeRainBrigand同意。如果您願意,您應該使用客戶端驗證。這帶有一個明顯的警告,即您必須驗證服務器端,因爲用戶可以關閉JavaScript。服務器端驗證:必需的,客戶端驗證:一個很好的額外。 – rdlowrey

+0

我正在尋求指導或解決方案,不建議或鏈接到類似的線程,我可能已經查看了,但無法幫助我解決我的問題。我可以解決這個問題後,我會研究客戶端驗證,謝謝你的幫助。 – Zakri

相關問題