2014-01-15 29 views
0

我是一個PHP新手,需要幫助搞清楚如何讓我的表單錯誤只在錯誤觸發後才顯示。例如:表單在到達頁面時看起來很正常。用戶填寫信息但忘記添加電子郵件並點擊提交。我想要顯示的電子郵件錯誤。以下是我正在使用的代碼。PHP表單錯誤只顯示一次觸發

附註:我已設置字段來保留輸入的信息,一旦點擊提交按鈕。

<?php 

      $email = $_POST['email']; 
      $name = $_POST['name']; 
      $message = $_POST['message']; 
      $size = $_FILES['file']['size']; 
      $max_size = 34000000; 
      $file = $_FILES['file']['tmp_name']; 
      $filename = $_FILES['file']['name']; 
      $filetype = $_FILES['file']['type']; 
      $errors = array(); 

if (empty($email)) 
    $errors[] = "Please provide an email."; 
if (empty($name)) 
    $errors[] = "Please provide your name."; 
if (empty($filename)) 
    $errors[] = "Please provide a file."; 
if ($size > $max_size) 
    $errors[] = "Please choose a file under 30mb."; 

if (sizeof($errors) > 0) { 
    foreach($errors as $error) 
    { 
     printf("<li>%s</li>", $error); 
    } 
} 
else { 
    mkdir('../uploads/' . $email . '|' . $name, 0777, true) . '/'; 
    move_uploaded_file($file, '../uploads/' . '/'. $email . '|' . $name . '/' . $filename); 
    header ('Location: ../'); 
    exit; 
} 
      ?> 

我意識到這些錯誤正在檢查簡單的事情。我將來會讓他們變得更加複雜;恩。在電子郵件地址中尋找'@'。

謝謝你的幫助!

回答

0

PHP是一種服務器端腳本語言,因此在提交給服務器之前,您無法檢查表單是否有錯誤。

但是您有其他選項可用於檢查表單。

許多人在將表單提交給服務器進行進一步的PHP檢查之前,使用Javascript對錶單進行預檢查,您也可以使用AJAX(更多JavaScript)異步執行它。

參考這裏的JavaScript表單驗證:http://www.w3schools.com/js/js_form_validation.asp

的Javascript

function validateForm(){ 
    var x=document.forms["myForm"]["email"].value; 
    var atpos=x.indexOf("@"); 
    var dotpos=x.lastIndexOf("."); 
    if (atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length){ 
     alert("Not a valid e-mail address"); 
     return false; 
    } 
} 

HTML

<form name="myForm" action="demo_form.asp" onsubmit="return validateForm();" method="post"> 
Email: <input type="text" name="email"> 
<input type="submit" value="Submit"> 
</form> 

注意在窗體域 「的onsubmit」。當按下表單上的提交按鈕時,函數validateForm()被調用,如果表單沒有錯誤,那麼它會正常提交給PHP後端,如果有錯誤,用戶會收到警告並且表單不會被提交。

+0

感謝您的回覆。所以我們假設我使用Javascript來檢查表單。我將如何停止運行PHP腳本(當提交被命中),直到JavaScript確保沒有錯誤? – David

+0

我已將修改添加到我的答案中,請看看,它應該說明您需要知道的一切。 – Aidan

+1

謝謝艾丹,這個答案基本上涵蓋了我所需要的,儘管我發現了一個非常漂亮的插件。查看[http://jqueryvalidation.org/](http://jqueryvalidation.org/)。這基本上是我想要的。 – David