繁体   English   中英

PHP验证表单不发送电子邮件

[英]php validation form does not send email

我正在尝试使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

我认为这很正常。 但是,如果我可以正常工作,为什么没有电子邮件呢? 有什么想法吗? 非常感谢

您的所有逻辑都包裹在这种情况下:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM