2013-04-28 39 views
1

我正在构建一个简单的PHP联系表单,并且我的错误消息按照我想要的方式显示在每个表单字段旁边,但它们也出现在表单顶部,其中包含了PHP代码在我的HTML文件上。我想摆脱显示在包含代码的顶部的错误。这是包括代码:如何在字段旁边显示php表单错误?

<?php include("includes/form.inc.php"); ?> 

这是HTML表单代码,我有:

<?php echo $finalMsg; ?> 

     <form method="post" action="contact.php"> 

      <fieldset> 

       <ul> 

        <li class="instructions">(*) Required Fields</li> 

        <li> 
         <p><?php echo $errors["firstname"]; ?></p> 
         <label for="firstname" class="lined_up"><span class="asterisk">*</span> First Name:</label> 
         <input type="text" placeholder="" name="firstname" 
           id="firstname" value="<?php echo $_POST["firstname"]; ?>" /> 
                 <!-- This keeps the content you enter in this field in place if you miss a field & have to resubmit--> 
        </li> 

        <li> 
         <p><?php echo $errors["lastname"]; ?></p> 
         <label for="lastname" class="lined_up"><span class="asterisk">*</span> Last Name:</label> 
         <input type="text" placeholder="" name="lastname" 
          id="lastname" value="<?php echo $_POST["lastname"]; ?>" /> 
        </li> 

        <li> 
         <p><?php echo $errors["email"]; ?></p> 
         <label for="email" class="lined_up"><span class="asterisk">*</span> Email:</label> 
         <input type="text" placeholder="Please type a valid email." name="email" 
          id="email" value="<?php echo $_POST["email"]; ?>" /> 
        </li> 
        <li> 
         <p><?php echo $errors["message"]; ?></p> 
         <label for="message" class="message lined_up"><span class="asterisk">*</span> Message:</label> 
         <textarea id="message" name="message" placeholder="Please enter your message here."><?php echo isset($_POST['message'])? $_POST['message'] : ''; ?></textarea> 

        </li> 
        <li> 
         <input type="submit" value="Send" name="submit" id="submit" /> 
        </li> 
       </ul> 
      </fieldset> 

     </form> 

这是PHP代码,我有:

<?php 

// 
if(isset($_POST["submit"])) 
{ 

    //This is checking if the string length in the firstname field was greater than 1 character 
    if(strlen($_POST["firstname"]) > 1) 
    { 

     $firstname = $_POST["firstname"]; 
     //echo $firstname; 
    } 

    else 
    { 
     //echo "You did not type in first name"; 
     $errors["firstname"] = "<span class=\"error\">You did not type in a first name.</span>"; 
    } 


    if(strlen($_POST["lastname"]) > 1) 
    { 

     $lastname = $_POST["lastname"]; 
    } 

    else 
    { 
     $errors["lastname"] = "<span class=\"error\">You did not type in a last name.</span>"; 
    } 


    if(strlen($_POST["email"]) > 1) 
    { 

     $email = $_POST["email"]; 

     if(filter_var($email, FILTER_VALIDATE_EMAIL)) { 
      $email = $email; 
     } 

     else { 
      $errors["email"] = "<span class=\"error\">Email is invalid.</span>"; 
     } 
    } 

    else 
    { 
     $errors["email"] = "<span class=\"error\">You did not type in an email address.</span>"; 
    } 

    //This is checking if the string length in the message field was greater than 1 character 
    if(strlen($_POST["message"]) > 1) 
    { 

     $message = $_POST["message"]; 
     //echo $firstname; 
    } 

    else 
    { 

     $errors["message"] = "<span class=\"error\">You did not type in a message.</span>"; 
    } 


    // Code to tell form NOT to send form if there are any errors. 
    if($errors < 1) 
    { 
      $to = "[email protected]"; 
      $from = $email; 
      // headers makes sure you have a reply-to address 
      $headers = "From: {$from}" . "\r\n"; 
      $headers .= 'MIME-Version: 1.0' . "\r\n"; 
      $headers .= 'Content-type: text/html; charset=iso-8859-1'; 

      $subject = 
       "From: ($from)" . "<br />" . 
       "First name: ($firstname)" . "<br />" . 
       "Last name: ($lastname)" . "<br />" . 
       "Email: ($email)" . "<br />" . 
       "Message: ($message)"; 

      if(mail($to, $from, $subject, $headers)) 
      { 
       $finalMsg = "<p class=\"success\">Thank you! Your email was sent.</p>"; 
      } 

      else { 
       $finalMsg = "<p class=\"error\">Your email was NOT sent. Please try again.</p>"; 
      } 

} 

?> 

<?php 

//each error is displayed 

foreach($errors as $value) { 

echo "<span>$value</span><br />"; 

} 
    } 
?> 

任何帮助,将不胜感激。谢谢!

+0

做的jQuery插件验证一个 – 2013-04-28 05:58:00

+0

客户端检查很难ŧ o从你的问题中告诉我,但我假设他们显示为PHP错误。在代码顶部添加'display_errors(false);'。如果你有权访问服务器上的php配置,最好在php.ini中关闭它们。它应该始终关闭生产站点 – Cfreak 2013-04-28 06:01:44

回答

1

删除回波或因为你不希望立即打印

foreach($errors as $value) { 

echo "<span>$value</span><br />"; 

} 

可以去除整块的循环,你应该使用jquery或在客户端的JavaScript验证这让时间将减少服务器 - 客户端通信

+0

您绝不应该完全依赖客户端验证。这会打开一个巨大的安全漏洞。 – 2013-04-28 06:08:20

+1

@LoganBailey是的,但你应该检查客户端以及服务器端以获得更高的安全性。我告诉添加客户端不要删除服务器端。 – 2013-04-28 06:10:41

+0

@yadav chetan:双方验证有什么好处? ,是否有可能在客户端和服务器验证中有不同的结果? – BaSha 2013-04-29 05:06:24

1

只是删除的代码块:

<?php 
    //each error is displayed 
    foreach($errors as $value) { 
    echo "<span>$value</span><br />"; 
    } 
} 
相关问题