PHP联系表单发送电子邮件

时间:2015-08-20 12:40:51

标签: php html forms email

我使用this post制作一个简单的“与我们联系”表单。该表单从您的访问者收集一些信息(电子邮件,姓名和消息)并通过电子邮件发送给您。

我不想重定向到感谢页面,而是希望它只在同一个HTML表单页面中打印感谢(或错误)文本。

如何做到这一点?我需要更改哪些内容才能将用户保留在同一页面并显示确认消息(“谢谢”)?

修改:使用ajax找到了一种更简单的方法。

1 个答案:

答案 0 :(得分:1)

这是我的建议。

1-将您的文件名contact-form.html更改为contact-form.php
2-添加了包含行并在contact-form.php中编辑您的表单操作:

<h1>Contact us</h1>
<?php include './contact-form-handler.php'; ?>

<form method="POST" name="contactform" action="#">

3-编辑您的contact-form-handler.php,禁用标题并添加感谢您的个人信息,您还可以添加一些留给您幻想的布局和装饰。

//header('Location: contact-form-thank-you.html');
echo "Thank you " . $name . "<br />";
echo "We will contact you soon";

4-最后我会添加条件来检查表单是否已提交

if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
    if (empty... etc
}

5-(可选)要重新获取已发布的值,如果失败,我已在表单输入中添加了以下内容(其中3个,每个字段都有一个具有相应字段/变量名称):

value="<?php if (isset($_POST['name'])) echo $name; ?>"

但总的来说,当这一切完成后,我个人会仔细检查并清理一下。就像我检查JavaScript中的内容一样,没有必要检查字段是否为空,因此检查提交表单就足够了。我没有谈论形式安全,但没有谈论任何形式的滥用,这只是为了在你到目前为止做出一些想法。

完整代码

这是你的最终结果,我做了额外的事情:

与-form.php的

<form method="POST" name="contactform" action="#">
    <p>
        <label for='name'>Your Name:</label> <br>
        <input type="text" name="name" value="<?php if (isset($_POST['name'])) echo $name; ?>">
    </p>

    <p>
        <label for='email'>Email Address:</label> <br>
        <input type="text" name="email" value="<?php if (isset($_POST['email'])) echo $email_address; ?>"> <br>
    </p>

    <p>
        <label for='message'>Message:</label> <br>
        <textarea name="message" value="<?php if (isset($_POST['message'])) echo $message; ?>"></textarea>
    </p>
    <input type="submit" value="Submit"><br>
</form>

与外形handler.php

<?php
$errors = '';
$myemail = 'yourname@website.com';//<-----Put Your email address here.
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{

    if (empty($_POST['name']) ||
        empty($_POST['email']) ||
        empty($_POST['message'])
    )
    {
        $errors .= "\n Error: all fields are required";
    }
    $name = $_POST['name'];
    $email_address = $_POST['email'];
    $message = $_POST['message'];

    if (!preg_match(
        "/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i",
        $email_address)
    )
    {
        $errors .= "\n Error: Invalid email address";
    }

    if (empty($errors))
    {
        $to = $myemail;
        $email_subject = "Contact form submission: $name";
        $email_body = "You have received a new message. " .
            " Here are the details:\n Name: $name \n Email: $email_address \n Message \n $message";

        $headers = "From: $myemail\n";
        $headers .= "Reply-To: $email_address";

        mail($to, $email_subject, $email_body, $headers);
        //redirect to the 'thank you' page
//header('Location: contact-form-thank-you.html');
        echo "Thank you " . $name . "<br />";
        echo "We will contact you soon";

        $name = "";
        $email_address = "";
        $message = "";
    }
}
?>