首页 > 解决方案 > 单击提交后,表单到邮件操作不起作用

问题描述

我的索引页面上有一个 html 表单,填写完字段并单击提交按钮后,表单操作将移动到我命名为“indexform.php”的新页面,但不执行“indexform.php”上的 php 代码“ 页。

下面是我的html表单代码:

<form method="post" action="indexform.php">

<input name="name" type="text" class="form-control" placeholder="Your Name">

<input name="email" type="text" class="form-control" placeholder="Your Email">

<input name="subject" type="text" class="form-control" placeholder="Subject">

<input name="budget" type="text" class="form-control" placeholder="Your Budget">

<textarea name="message" id="" cols="30" rows="7" class="form-control" placeholder="What kind of content marketing services are you looking for?"></textarea>

<input type="submit" formaction="indexform.php" name="submit" value="Send Message">

</form>

下面是我在 indexform.php 页面上的 php 代码:

<?php

$mail_to_send_to = "joseph@digitage.net";
$from_email = "joseph@digitage.net";
$sendflag = $_REQUEST['sendflag'];
if ($sendflag == "send") {
    $email = $_REQUEST['email'];
    $message = $_REQUEST['message'];
    $name = $_REQUEST['name'];
    $budget = $_REQUEST['budget'];
    $headers = "From: $from_email" . "\r\n" . "Subject: $subject" . "\r\n" .
            "Reply-To: $email" . "\r\n";
    $a = mail($mail_to_send_to, "Message from a Home page contact form", $message, $headers);
    if ($a) {
        print("Message was sent, you can send another one");
    } else {
        print("Message wasn't sent, please check that you have changed emails in 
the bottom");
    }
}
?>

执行表单操作后,我没有收到任何消息。

标签: phphtml

解决方案


您不需要formaction="index.php"按钮元素中的属性。只要action="indexform.php"您的<form>标签中有 ,它就会将 POST 请求发送到该 URL。

<form method="post" action="indexform.php">
    <input name="name" type="text" class="form-control" placeholder="Your Name" />
    <input name="email" type="text" class="form-control" placeholder="Your Email" />
    <input name="subject" type="text" class="form-control" placeholder="Subject" />
    <input name="budget" type="text" class="form-control" placeholder="Your Budget" />
    <textarea name="message" cols="30" rows="7" class="form-control" placeholder="What kind of content marketing services are you looking for?"></textarea>
    <input type="submit" name="submit" value="Send Message" />
</form>

我注意到在您的 PHP 中,您正在检查输入字段'sendflag',但这在您的 HTML 中没有输入指令,所以实际上每次检查“sendflag”时,它总是为 NULL。此外,您应该真正使用$_POST来获取您提交的输入字段,而不是$_REQUEST. 这称为“POST”,因为您正在向指定的 URL 发送 HTTP POST 请求 - 您选择了带有method="post"属性的“POST”。

试试这个:

<?php

$mail_to_send_to = "joseph@digitage.net";
$from_email = "joseph@digitage.net";

if (!empty($_POST)) {
    $email = $_POST['email'];
    $message = $_POST['message'];
    $name = $_POST['name'];
    $budget = $_POST['budget'];
    $headers = "From: $from_email" . "\r\n" . "Subject: $subject" . "\r\n" .
        "Reply-To: $email" . "\r\n";
    $a = mail($mail_to_send_to, "Message from a Home page contact form", $message, $headers);
    if ($a) {
        echo "<p>Message was sent, you can send another one</p>";
    } else {
        echo "<p>Message wasn't sent, please check that you have changed emails in the bottom</p>";
    }
}
?>

检查是否已提交任何表单的一个好方法是if (!empty($_POST))使用empty() 函数

如果您愿意,您可以使用 编写一个表单method="get",然后您的所有输入字段将出现在 URL 中,如下所示:

indexform.php?name=my+name&email=me%40example.com&subject=My+Subject    ... etc.

然后当然你会使用$_GET数组来检索它们。我知道这可能不是您想要的,我只是在解释两个主要 HTTP 请求之间的区别。

如果你愿意,你也可以使用一个<button>元素作为你的表单提交者,它会呈现与你的<input type="submit">.

<button>Send Message</button>

推荐阅读