php - 单击提交后,表单到邮件操作不起作用
问题描述
我的索引页面上有一个 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");
}
}
?>
执行表单操作后,我没有收到任何消息。
解决方案
您不需要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>
推荐阅读
- php - php sql将ID和文本导入testarea,然后在对文本进行更改后发布这两个值
- android - 我能否使用 React Native 框架在 Mountain Lion 中编写/发布 iOS 和 Android 应用程序?
- python - 试图从不位于类内但位于脚本中的网站作为变量抓取信息
- java - Number 类如何工作(在 java 中)?
- angular - 将数据从一个可观察对象传递到另一个对象的正确方法
- css - Vuetify Container 最大宽度固定
- python - 基于变量值的自定义绘图标记
- php - 如何在 PHP/cURL/Guzzle 上使用 --preproxy
- angular - 带有引导程序 4.1 的 Angular 6 未加载
- java - 转换 java.util.Set 的
对象到简单的 pojo 对象