在php表单上提交之前添加电子邮件验证

时间:2014-08-10 04:05:09

标签: javascript php jquery json forms

我有以下简单的表单,我试图将电子邮件验证错误 在提交之前显示在表单中以显示错误。

有没有办法用PHP执行此操作,还是必须使用JSON?

如果我必须使用JSON,有人可以告诉我如何做到这一点吗?

提前致谢。

form.html:

<form method="post" name="form" action="form.php">
<p>Robot: <input type="text" name="robot" ></p> 
<p>Name: <input type="text" name="name" ></p>
<p>Email:    <input type="email" name="email"></p>
<p>Phone:    <input type="telephone" name="phone"></p>
<p>Message:  <textarea name="message"></textarea></p>
<p><input type="submit" value="Send Form"></p>
</form>
<div id="error"></div>

form.php的

<?php

// send to and from
$to = "email@example.com";
$headers = "From: email@example.com \r\n";
$headers .= "Reply-To: email@example.com \r\n";

// form inputs
$name = $_POST['name'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$message = $_POST['message'];
$robot = $_POST['robot'];

// email message
$email_subject = "Web Contact Message";

$email_body =   
"A message from your website contact form \n\n".
"Email: $email \n\n".
"Phone: $phone \n\n".
"From: $name \n\n".
"Message: \n". 
"$message \n";

// honeypot
if($robot)
header( "Location: http://www.example.com/nothankyou.html" );
    else{

//validate email
if(!filter_var($email, FILTER_VALIDATE_EMAIL))
 {
 echo '<div id="error">Please Enter a Valid Email</div>';
 }
else
 {

// send it
 mail($to,$email_subject,$email_body,$headers); 
 header( "Location: http://www.example.com/thankyou.html" );

 }  
 }   
?>

1 个答案:

答案 0 :(得分:0)

您可以尝试使用javascript / jquery插件进行前端验证(例如http://jqueryvalidation.org/http://bootstrapvalidator.com/)。如果您仍想保留现有代码,我建议使用以下内容:

首先,将form.html合并到form.php 确保你的php邮件代码保留在文件的顶部,因为php标头在调用它们之前不能完成任何输出。

    <?php
if (count($_POST)) {

// send to and from
    $to = "email@example.com";
    $headers = "From: email@example.com \r\n";
    $headers .= "Reply-To: email@example.com \r\n";

// form inputs
    $name = $_POST['name'];
    $email = $_POST['email'];
    $phone = $_POST['phone'];
    $message = $_POST['message'];
    $robot = $_POST['robot'];

// email message
    $email_subject = "Web Contact Message";

    $email_body = "A message from your website contact form \n\n" .
            "Email: $email \n\n" .
            "Phone: $phone \n\n" .
            "From: $name \n\n" .
            "Message: \n" .
            "$message \n";

// honeypot
    if ($robot)
        header("Location: http://www.example.com/nothankyou.html");
    else {

//validate email
        if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
            header("Location: form.php?error=email_error");
        } else {

// send it
            mail($to, $email_subject, $email_body, $headers);
            header("Location: http://www.example.com/thankyou.html");
        }
    }
}
?>
<form method="post" name="form" action="">
    <p>Robot: <input type="text" name="robot" ></p> 
    <p>Name: <input type="text" name="name" ></p>
    <p>Email:    <input type="email" name="email"></p>
    <p>Phone:    <input type="telephone" name="phone"></p>
    <p>Message:  <textarea name="message"></textarea></p>
    <p><input type="submit" value="Send Form"></p>
</form>

<?php
if (isset($_GET["error"]) && $_GET["error"] == "email_error") {
    ?>
    <div id="error">Please Enter a Valid Email</div>
    <?php
}