如何在同一页面上显示我的PHP表单错误?

时间:2013-12-08 04:23:44

标签: php html forms

我有一个简单的联系表格,附有一些PHP验证。但是,当一个字段留空并且表单被抛出其中一个错误时,它会重定向到一个空白页面,只是在空白屏幕上回显错误。我如何将这些错误保存在同一页面上?只有当有人点击发送时,错误才不会立即验证。最理想的是,它只是指向联系表单页面,并添加一个关于表单的文本字符串,告诉用户出现错误。

PHP

<?php if ($_SERVER["REQUEST_METHOD"] == "POST") {
$name = trim($_POST["name"]);
$email = trim($_POST["email"]);
$subject = trim($_POST["subject"]);
$message = trim($_POST["message"]);
if ($name == "") {
    // header("Location: contact.php");
    echo "You must speciy a value for name.";
    exit;
}
if ($email == "") {
    // header("Location: contact.php");
    echo "You must speciy a value for email.";
    exit;
}
if ($subject == "") {
    // header("Location: contact.php");
    echo "You must speciy a value for subject.";
    exit;
}
if ($message == "") {
    // header("Location: contact.php");
    echo "You must speciy a value for message.";
    exit;
}
foreach( $_POST as $value ) {
    if( stripos($value,'Content-Type:') !== FALSE ){
        echo "There was a problem with the information you entered.";
        exit;
    }
}
if ($_POST["address"] != "") {
    echo "Your submission has an error.";
    exit;
}

require_once("class.phpmailer.php");
$mail = new PHPMailer();

if (!$mail-> ValidateAddress($email)){
  echo "You must specify a valid email address";
  exit;
}

$email_body = "";
$email_body = $email_body . "Name: " . $name . "<br>";
$email_body = $email_body . "Email: " . $email . "<br>";
$email_body = $email_body . "Subject: " . $subject . "<br>";
$email_body = $email_body . "Message: " . $message . "<br>";

$mail->setFrom($email, $name);
$mail->addAddress('email@gmail.com', 'Staff');
$mail->Subject = "Contact Form | " . $name;
$mail->msgHTML($email_body);

//send the message, check for errors
if (!$mail->send()) {
    echo "There was a problem sending the email: " . $mail->ErrorInfo;
    exit;
}
header("Location: contact.php?status=thanks");
exit;
}
?>

HTML

<div id="contact-form">
<div class="container">
    <div class="row">
        <div class="col-md-6">
            <form class="form" method="post">
                            <p class="name">
                            <div id="label"><label for="name">Name</label></div>
                            <input type="text" name="name" id="name" placeholder="John Doe" />
            </p>

            <p class="email">
            <div id="label"><label for="email">Email</label></div>
                        <input type="text" name="email" id="email" placeholder="mail@example.com" />
            </p>

            <p class="subject">
                    <div id="label"><label for="subjext">Subject</label></div>
            <select name="subject" id="subject">
            <option></option>
            <option>Request for Consultation</option>
            <option>Ordering a Service</option>
            <option>Just to Say Hello</option>
            <option>Other</option>
            </select>
            </p>

            <p class="message">
            <div id="label"><label for="message">Message</label></div>
                            <textarea name="message" id="message" placeholder="Write something to us" /></textarea>
            </p>

                            <div id="label" class="address" style="display:none !important"><label for="address">Email</label>
                        <input type="text" name="address" id="address" placeholder="123 Elm Street" />
                <p>If you're a human, please leave this field blank.</p>
                </div>

            <p class="submit">
            <input type="submit" value="Send" class="btn-blue btn-submit"/>
            </p>
            </form>
        </div>
    </div>
</div>

2 个答案:

答案 0 :(得分:0)

两个基本选项......

(1)将错误消息包含在URL中。

header("Location: contact.php?error=" . urlencode("You must specify a value for name."));

然后,您可以contact.php在适当的位置添加echo $_GET["error"];

这里最大的缺点是滥用的可能性。用户可以更改URL中包含的消息,也可以由任何人更改以显示任何内容。有人恶意可能会更改消息以混淆或滥用用户。

(2)使用会话存储错误消息。

session_start();
$_SESSION["error"] = "You must specific a value for name.";

然后在contact.php上,在顶部添加session_start();并在页面的某处添加...

if ($_SESSION["error"] != "") {
  echo $_SESSION["error"];
  $_SESSION["error"] = "";
}

还有更多方法,但这应该让你开始。

答案 1 :(得分:0)

如果您不熟悉Javascript或AJAX,则可以使用PHP实际执行此操作。你有2个选择:其中一个选项过于复杂,但无论如何我都会给你。

选项#1:

将表格发送到同一页面。

更改表单的操作以将其发送到表单本身所在的任何页面。然后,当您想要执行错误消息时,而不是执行

echo "insert error message here";

对于第一个错误消息,在你的情况下,如果他们的名字为空,你想做

$errormsg = "insert error message here";

对于每个其他验证,您想要

$errormsg .= "insert error message here";

然后,只需回显

$errormsg

如果它不为空。

选项#2

此选项非常过分。它具有与上面相同的概念,但如果您希望将表单放在另一页上,则会增加支持。

确保你有

session_start();

位于表单页面和表单验证php页面的顶部。

现在,对于发生的第一个errormsg:

$_SESSION['errormsg'] = "insert error message here";

对于之后的每个其他错误消息,您可以执行

$_SESSION['errormsg'] .= "insert error message here";
像我们之前一样。