Php 标题和回声困境

Php 标题和回声困境,php,Php,我在一个我正在开发的网站上有一个联系表单,并且已经编写了一些PHP,如果某些字段填写不正确,就会返回错误到页面,一切正常,如果填写正确,就会发送电子邮件,如果不正确,就会发送并显示错误消息 唯一的问题是,如果表单填写不正确,用户将被重定向到带有错误消息的页面,但表单位于页面下方,用户将被重定向到该页面。我想知道是否有一个错误,用户被重定向到同一个页面,错误消息被回显,但在表单所在的页面下方 我做了一些研究,发现我可以使用id锚和标题,但如果我这样做,页面会在我告诉它的地方加载,但错误消息不会显示

我在一个我正在开发的网站上有一个联系表单,并且已经编写了一些PHP,如果某些字段填写不正确,就会返回错误到页面,一切正常,如果填写正确,就会发送电子邮件,如果不正确,就会发送并显示错误消息

唯一的问题是,如果表单填写不正确,用户将被重定向到带有错误消息的页面,但表单位于页面下方,用户将被重定向到该页面。我想知道是否有一个错误,用户被重定向到同一个页面,错误消息被回显,但在表单所在的页面下方

我做了一些研究,发现我可以使用id锚和标题,但如果我这样做,页面会在我告诉它的地方加载,但错误消息不会显示。我尝试使用带有_GET变量的if循环来检查它是否与错误消息中的内容匹配,但似乎无法使任何内容正常工作

总之:
如果表单填写不正确,我想让用户返回到同一页,但要放低表单所在的位置,并在表单上方显示代码中设置的错误消息变量

我刚刚开始学习PHP,所以我希望能得到一些帮助来解决这个问题。 提前感谢您的帮助和建议

以下是该网站的一些截图:

页面代码如下:

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $name    = trim($_POST["name"]);
    $email   = trim($_POST["email"]);
    $message = trim($_POST["message"]);

    if ($name == "" OR $email == "" OR $message == "") {
        $error_message = "You must enter a name, email address and message";
    }

    if (!isset($error_message)) {
        foreach ($_POST as $value) {
            if (stripos($value, 'Content-Type:') !== false) {
                $error_message = "There was a problem with the information you submitted";
            }
        }
    }

    if (!isset($error_message) && $_POST["address"] != "") {
        $error_message = "Your contact form submission has an error";
    }

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

    if (!isset($error_message) && !$mail->ValidateAddress($email)) {
        $error_message = "You must specify a valid email address";
    }

    if (!isset($error_message)) {
        $email_body = "";
        $email_body = $email_body . "Name: " . $name . "<br>";
        $email_body = $email_body . "Email: " . $email . "<br>";
        $email_body = $email_body . "Message: " . $message;

        $mail->SetFrom($email, $name);
        $address = "name@email.co.uk";
        $mail->AddAddress($address, "Corwen Forestry Timber Products Ltd.");
        $mail->Subject = "Website Contact Form Submission | " . $name;
        $mail->MsgHTML($email_body);

        if ($mail->Send()) {
            header("Location: contact.html?status=thanks");
            exit;
        }
        else {
            $error_message = "There was a problem sending the email: " . $mail->ErrorInfo;
        }
    }
}
;
?>

<?php
$title = "Corwen Forestry Online | Contact Us";
$active = "contact";
include("inc/header.php");
?>
    <img class="banner" src="images/contact-us.jpg" alt="Contact us background image.">

    <article class="band content-wrap clearfix">

        <?php if (isset($_GET["status"]) && $_GET["status"] == "thanks") { ?>
            <section>
                <p class="contact-thanks">Thanks for getting in touch, we'll get back to you as soon as we can.</p>
            </section>
        <?php }
        else { ?>

            <header>
                <h2>Contact Us</h2>
            </header>

            <section class="contact-intro">
                <p>
                    Lorizzle hizzle dolor fizzle amizzle, consectetuer adipiscing elizzle. Crackalackin sapien velizzle,
                    my shizz volutpizzle, suscipit quis, its fo rizzle vel, arcu. Pellentesque fizzle tortizzle. Izzle
                    mammasay mammasa mamma oo sa. Fusce izzle dolor dapibus turpis tempizzle tellivizzle. Crunk
                    pellentesque nibh izzle turpizzle. Fo shizzle my nizzle funky fresh crackalackin. Pellentesque
                    eleifend rhoncizzle nisi. In for sure habitasse platea dictumst. Donec dapibizzle. Curabitur gangsta
                    urna, pretizzle eu, pizzle ac, my shizz vitae, nunc. Da bomb suscipizzle. Integer break it down
                    pimpin' shiznit fo shizzle my nizzle.
                </p>
            </section>

            <section id="error-anchor" class="contact-third first">
                <img src="images/contact-icon-email.png" alt="email icon">

                <h3><a href="mailto:sales@corwenforestry.co.uk">sales@corwenforestry.co.uk</a></h3>
            </section>

            <section class="contact-third">
                <img src="images/contact-icon-address.png" alt="address icon">

                <h3>
                    Ty&rsquo;n Llidiart Industrial Estate<br>
                    Corwen<br>
                    Denbighshire<br>
                    LL21 9RZ
                </h3>
            </section>

            <section class="contact-third">
                <img src="images/contact-icon-phone.png" alt="phone icon">

                <h3>01490 412 146</h3>
            </section>

            <?php
            if (isset($error_message)) {
                header("Location: contact.html#error-anchor");
                echo '<p class="error-message">' . $error_message . '</p>';
            }
        ;
            ?>

            <form class="clearfix" method="post" action="contact.html">
                <table class="contact-us">
                    <tr>
                        <th>
                            <label for="name">Name</label>
                        </th>
                        <td>
                            <input type="text" name="name" id="name">
                        </td>
                    </tr>
                    <tr>
                        <th>
                            <label for="email">Email</label>
                        </th>
                        <td>
                            <input type="text" name="email" id="email">
                        </td>
                    </tr>
                    <tr>
                        <th>
                            <label for="message">Message</label>
                        </th>
                        <td>
                            <textarea name="message" id="message"></textarea>
                        </td>
                    </tr>
                    <tr style="display: none;">
                        <th>
                            <label for="address">Address</label>
                        </th>
                        <td>
                            <p>Please leave the address field blank, it's an anti-spam measure.</p>
                            <input type="text" name="address" id="address">
                        </td>
                    </tr>
                </table>
                <input type="submit" value="Send Message">
            </form>

            <section class="map">
                <iframe width="47.7%" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0"
                        src="https://maps.google.co.uk/maps/ms?msa=0&amp;msid=208085933608816427574.0004e1242973ccf3517ee&amp;ie=UTF8&amp;t=m&amp;ll=52.977589,-3.414001&amp;spn=0.144707,0.291824&amp;z=11&amp;output=embed"></iframe>
                <br/>
                <small>View <a target="_blank"
                               href="https://maps.google.co.uk/maps/ms?msa=0&amp;msid=208085933608816427574.0004e1242973ccf3517ee&amp;ie=UTF8&amp;t=m&amp;ll=52.977589,-3.414001&amp;spn=0.144707,0.291824&amp;z=11&amp;source=embed"
                               style="color:#0000FF;text-align:left">CFTP HQ and Mills</a> in a larger map
                </small>
            </section>

            <section class="map-key">
                <ul>
                    <li>
                        <img src="images/a-sml.png" alt="Head Office map icon key.">
                        Head Office &amp; Shop
                    </li>
                    <li>
                        <img src="images/b-sml.png" alt="Gwyddelwern Sawmill map icon key.">
                        Gwyddelwern Sawmill
                    </li>
                    <li>
                        <img src="images/c-sml.png" alt="Llandrillo Sawmill map icon key.">
                        Llandrillo Sawmill
                    </li>
                </ul>
            </section>

        <?php } ?>
    </article><!-- end band content-wrap -->

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

Ty;n利迪亚特工业区
科文
登比格郡
LL21 9RZ 01490 412 146 名称 电子邮件 消息 地址 请将地址字段留空,这是一项反垃圾邮件措施


在更大的地图中查看
  • 总行及;商店
  • 格威德尔文锯木厂
  • 兰诺锯木厂

您应该创建更智能的捕获错误。可能会创建一个错误数组并添加新的错误。 有些人喜欢:

$error_message = array();
...
// $error_message[ID_MSG]
$error_message[2] = "text of msg";
...
<td>
 <input <?php
  if(isset($error_message[2])) {
   echo 'value="' . $email . '" class="errorStyle"';
  }
 ?> type="text" name="email" id="email">
</td>
...

您应该创建更智能的捕获错误。可能会创建一个错误数组并添加新的错误。 有些人喜欢:

$error_message = array();
...
// $error_message[ID_MSG]
$error_message[2] = "text of msg";
...
<td>
 <input <?php
  if(isset($error_message[2])) {
   echo 'value="' . $email . '" class="errorStyle"';
  }
 ?> type="text" name="email" id="email">
</td>
...

我相信你想要这样的东西。如果您发布的表单不正确,则应将用户重定向到以下链接:

Header('Location: contact.html?error=' . $error . '#error-anchor');
为了让它工作,你必须改变一些事情

您的表单需要id

<form class="clearfix" method="post" action="contact.html" id="error-anchor">

在页面顶部,您需要检查
$\u GET['error]
是否已设置(在重定向后使用),并相应地设置消息:

if ($_GET['error']) {
    switch ($_GET['error']) {
        case 1:
            $error_message = "You must enter a name, email address and message";
            break;
        case 2:
            $error_message = "Other error";
            break;
    }
} else if ($_POST) {
     //form post handling
}

我相信你想要这样的东西。如果您发布的表单不正确,则应将用户重定向到以下链接:

Header('Location: contact.html?error=' . $error . '#error-anchor');
为了让它工作,你必须改变一些事情

您的表单需要id

<form class="clearfix" method="post" action="contact.html" id="error-anchor">

在页面顶部,您需要检查
$\u GET['error]
是否已设置(在重定向后使用),并相应地设置消息:

if ($_GET['error']) {
    switch ($_GET['error']) {
        case 1:
            $error_message = "You must enter a name, email address and message";
            break;
        case 2:
            $error_message = "Other error";
            break;
    }
} else if ($_POST) {
     //form post handling
}

我从你的问题中了解到,你可以使用以下方法:

我们的想法是在submit上“锚定”表单-这允许我们在按下submit按钮后立即进入表单,不管表单有效性是否成功通过

1) 设置一个“锚”-如下操作:

<form class="clearfix" method="post" action="contact.html#myAnchor">
<a href="#myAnchor"></a> 
<form class="clearfix" method="post" action="contact.html#myAnchor">
4) 在窗体的正上方回显错误

<a href="#myAnchor"></a>
<?= $sFormattedErrorVariable ?>
<form class="clearfix" method="post" action="contact.html#myAnchor">


希望这有帮助。干杯

我从您的问题中了解到,您可以使用以下方法:

我们的想法是在submit上“锚定”表单-这允许我们在按下submit按钮后立即进入表单,不管表单有效性是否成功通过

1) 设置一个“锚”-如下操作:

<form class="clearfix" method="post" action="contact.html#myAnchor">
<a href="#myAnchor"></a> 
<form class="clearfix" method="post" action="contact.html#myAnchor">
4) 在窗体的正上方回显错误

<a href="#myAnchor"></a>
<?= $sFormattedErrorVariable ?>
<form class="clearfix" method="post" action="contact.html#myAnchor">


希望这有帮助。干杯

如果表单不正确,您会说您正在重定向到某个锚点。但是上面的代码并没有显示这一点。你能更新你的代码吗?@claarman我已经添加了一行“header”(“Location:contact.html#error-anchor”);这是我试图让它工作时使用的。检查我的答案,应该可以(稍微调整一下)如果表单不正确,你说你正在重定向到某个锚点。但是上面的代码并没有显示这一点。你能更新你的代码吗?@claarman我已经添加了一行“header”(“Location:contact.html#error-anchor”);在我试图让它工作的时候,我在这行添加了它。检查我的答案,这应该可以工作(稍加调整)我不知道这如何适用于我遇到的问题和情况