【问题标题】:php validation form does not send emailphp验证表单不发送电子邮件
【发布时间】:2018-01-26 01:30:48
【问题描述】:

我正在尝试制作 HTML 表单。

我的前端代码是这样的:

<form action="/form_validation.php" target="_blank">
    <p><input class="w3-input w3-padding-16" type="text" placeholder="name" required name="name"></p>
    <p><input class="w3-input w3-padding-16" type="text" placeholder="email" required name="email"></p>
    <p><input class="w3-input w3-padding-16" type="text" placeholder="subject" required name="subject"></p>
    <p><input class="w3-input w3-padding-16" type="text" placeholder="comment" required name="comment"></p>
    <p>
        <button class="w3-button w3-light-grey w3-padding-large" type="submit">
            <i class="fa fa-paper-plane"></i> SEND MESSAGE
        </button>
    </p>
</form>
<p><?php echo $feedbackmsg;?></p>

文件form_validation.php 包含以下内容:

<?php

$nameErr = $emailErr = $commentErr = $subjectErr = "";
$name = $email = $comment = $subject = "";
$feedbackmsg = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    if (isset($_POST['submit'])) {
        if (empty($_POST["name"])) {
            $nameErr = "*Name is required";
        } else {
            $name = validate($_POST["name"]);
            if (!preg_match("/^[a-zA-Z ]*$/", $name)) {
                $nameErr = "*Only letters and white space allowed";
            }
        }

        if (empty($_POST["subject"])) {
            $subjectErr = "*Subject is required";
        } else {
            $subject = validate($_POST["subject"]);
            if (!preg_match("/^[a-zA-Z ]*$/", $subject)) {
                $SubjectErr = "*Only letters and white space allowed";
            }
        }

        if (empty($_POST["email"])) {
            $emailErr = "*Email is required";
        } else {
            $email = validate($_POST["email"]);
            if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/", $email)) {
                $emailErr = "*Invalid email format";
            }
        }

        if (empty($_POST["comment"])) {
            $commentErr = "*Write Me something";
        } else {
            $comment = validate($_POST["comment"]);
        }

        if (empty($nameErr) && empty($emailErr) && empty($commentErr)) {
            $to = "myEmail@gmail.com";
            $subject = $name;
            mail($to, $subject, $comment, $email);
            $feedbackmsg = "Your message has sent,<br> thanks";
        }
    }
}

因此,当触发操作时返回一个空白页面,其中包含以下 url 和我的摘要: mysite.com/form_validation.php?name=anastasios&email=myemail%40hotmail.com&subject=mysubject&comment=ena+dio+ena+dio

我认为这应该是正常的。但是如果它工作正常,为什么我没有任何电子邮件? 有什么想法吗?非常感谢

【问题讨论】:

    标签: php html forms validation


    【解决方案1】:

    您的所有逻辑都包含在此条件中:

    if ($_SERVER["REQUEST_METHOD"] == "POST")
    

    并且这个条件(以及其中的后续条件,如果代码到达它们)是false,因为您使用的是GET 而不是POST。在表单中指定POST 方法:

    <form action="/form_validation.php" target="_blank" method="post">
    

    【讨论】:

    • 哦,是的,但即使这样,我也会得到带有 url mysite.com/form_validation.php 的新空白页面,但仍然没有收到任何邮件。而不是 action="form_validation" 我尝试了 action="" 并努力获取电子邮件但没有摘要。当然,我不喜欢以这种方式接收电子邮件,未经验证,但这只是尝试另一种方式来确保我的表单有效。
    • @fxp869:做一些调试。该页面是空白的,因为您从不输出任何内容。 (或者因为出现错误并且您没有打开错误报告。)检查 PHP 日志,添加某种输出以测试逻辑等。您的代码不是一个完全可以工作或完全不工作的黑匣子不工作。你可以调试它。 (不,action="&lt;?php mail()?&gt;" 不会像您期望的那样远程执行任何操作。只是随机移动代码不是调试。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-29
    • 1970-01-01
    • 2013-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多