0

我被困在无法同时发生的两个所需功能之间;我有一个电子邮件提交表单,我需要它在点击“提交”按钮后将用户重定向到感谢页面。我为您提供了 3 个 html 替代品和 1 个 php 文件。

当 html 是这样的时,电子邮件被发送但重定向不起作用。

            <form id="contact_form" action="mailer.php" method="post" enctype="text/plain">
                                    <div class="message" style="display:none"><div id="contact_alert" class="alert"></div></div>
                <label for="name">Name:</label>
                <input type="text" name="name" id="name" class="full-width help" title="Insert your name" />
                <label for="email">Email:</label>
                <input type="email" name="email" id="email" class="full-width help" title="Insert your email" />
                <label for="message">Message:</label>
                <textarea name="message" id="message" cols="30" rows="7" class="full-width help" title="Insert your message"></textarea>
                <input type="submit" value="Submit" class="button" />
            </form>

当我将最后一行更改为此时,它会再次发送电子邮件,但重定向仍然不起作用:

            <form id="contact_form" action="mailer.php" method="post" enctype="text/plain">
                                    <div class="message" style="display:none"><div id="contact_alert" class="alert"></div></div>
                <label for="name">Name:</label>
                <input type="text" name="name" id="name" class="full-width help" title="Insert your name" />
                <label for="email">Email:</label>
                <input type="email" name="email" id="email" class="full-width help" title="Insert your email" />
                <label for="message">Message:</label>
                <textarea name="message" id="message" cols="30" rows="7" class="full-width help" title="Insert your message"></textarea>
                <a href="thank-you"><input type="submit" value="Submit" class="button" /></a>
            </form>

最后,当我将最后一行更改为此时,重定向有效,但没有发送电子邮件。

            <form id="contact_form" action="mailer.php" method="post" enctype="text/plain">
                                    <div class="message" style="display:none"><div id="contact_alert" class="alert"></div></div>
                <label for="name">Name:</label>
                <input type="text" name="name" id="name" class="full-width help" title="Insert your name" />
                <label for="email">Email:</label>
                <input type="email" name="email" id="email" class="full-width help" title="Insert your email" />
                <label for="message">Message:</label>
                <textarea name="message" id="message" cols="30" rows="7" class="full-width help" title="Insert your message"></textarea>
                <a href="thank-you"><input type="button" value="Submit" class="button" /></a>
            </form>

这是php文件:

<?php
$to = "info@domain.com";
$subject = "Hi Nick, this is ".$_POST['name'];
$name_field = $_POST['name'];
$email_field = $_POST['email'];
$message = $_POST['message'];

$headers = 'From: '.$_POST['email'].'' . "\r\n" .
'Reply-To: '.$_POST['email'].'' . "\r\n" .
'X-Mailer: PHP/' . phpversion();

$body = $message;

mail($to, $subject, $body, $headers );
header('Location: http://www.domain.com/thank-you') ;
?>

任何帮助将不胜感激。谢谢!

4

2 回答 2

0

在第三个 html 块中,重定向有效,因为它是一个简单的超链接,因为它<input type=button>定义了一个可点击的按钮(主要与 JavaScript 一起使用以激活脚本)。因此,不会提交任何表格,但超链接将起作用。

在第二个 html 块中,超链接将不起作用,因为<input type=submit>它将使其成为具有将表单提交到操作文件的默认行为的提交按钮,因此超链接将不起作用。

我知道这并不能回答问题,只是想告诉你原因。

于 2013-08-14T23:50:54.267 回答
0

✓ EDIT(用于成功提交的实际代码)


HTML 表单

<form id="contact_form" action="mailer.php" method="post">
<div class="message" style="display:none"><div id="contact_alert" class="alert"></div></div>
    <label for="name">Name:</label>
    <input type="text" name="name" id="name" class="full-width help" title="Insert your name" />
    <label for="email">Email:</label>
    <input type="email" name="email" id="email" class="full-width help" title="Insert your email" />
    <label for="message">Message:</label>
    <textarea name="message" id="message" cols="30" rows="7" class="full-width help" title="Insert your message"></textarea>
    <input type="submit" value="Submit" class="button" />
</form>

邮件处理程序

<?php

$to = "email@example.com";

$subject = "Hi Nick, this is ".$_POST['name'];
$name_field = $_POST['name'];
$email_field = $_POST['email'];
$message = $_POST['message'];

$headers = 'From: '.$_POST['email'].'' . "\r\n" .
'Reply-To: '.$_POST['email'].'' . "\r\n" .
'X-Mailer: PHP/' . phpversion();

$body = $message;

mail($to, $subject, $body, $headers );
header('Location: http://www.example.com/thank-you');

// commented out for testing purposes.
// Email was sent and received successfully
// echo "Success";
?>


✓ 原始答案(2013 年 8 月 14 日)


=>enctype="text/plain"不应该在<form>元素内部使用,这就是你遇到问题的原因。

试试这个重新格式化的表格:

<form id="contact_form" action="mailer.php" method="post">
<div class="message" style="display:none"><div id="contact_alert" class="alert"></div></div>
    <label for="name">Name:</label>
    <input type="text" name="name" id="name" class="full-width help" title="Insert your name" />
    <label for="email">Email:</label>
    <input type="email" name="email" id="email" class="full-width help" title="Insert your email" />
    <label for="message">Message:</label>
    <textarea name="message" id="message" cols="30" rows="7" class="full-width help" title="Insert your message"></textarea>
    <input type="submit" value="Submit" class="button" />
</form>


我替换了这个:

<form id="contact_form" action="mailer.php" method="post" enctype="text/plain">
                                                        /--------------------/

有了这个:

<form id="contact_form" action="mailer.php" method="post">

这是无效的:

<a href="thank-you"><input type="button" value="Submit" class="button" /></a>

这是有效的:

<a href="thank-you.html">Click here</a>

因为这也是有效的:

<input type="button" value="Submit" class="button" />
于 2013-08-15T01:45:17.653 回答