【问题标题】:isset($_POST['submit']) always falseisset($_POST['submit']) 总是假的
【发布时间】:2017-05-15 16:12:46
【问题描述】:

我正在尝试使用 php 创建联系表单,但遇到了一些麻烦。

条件:isset($_POST['submit']) 总是产生 false,即使我只是提交一个空白页。

这是我的代码:

contact.html 部分:

<form action='emailto.php' method='POST' enctype='text/plain'>
First Name:<br>
<input type='text' name='firstname'><br>
Last Name:<br>
<input type='text' name='lastname'><br>
Email Address:<br>
<input type='text' name='emailadd' ><br>
Subject:<br>
<input type='text' name='subject' ><br>
Message:<br>
<textarea name='message' rows=5 cols=30 ></textarea><br><br>
<input type='submit' value='Send' name='submit'>
</form>

emailto.php:

<?php 
if (isset($_POST['submit'])) {
$to = "emailaddress";
$subject = $_POST['subject'];
$firstname = $_POST['firstname'];
$lastname = $_POST['lastname'];
$Emailadd = $_POST['emailadd'];
$Message = $_POST['message'];
$Body= "";
$Body .= $firstname;
$Body .= $lastname;
$Body .= "\n";
$Body .= $Emailadd;
$Body .= "\n";
$Body .= $Message;
mail($to,$subject,$Body);
echo "Mail Sent! <a href='contact.html'>Go Back</a>";
} else {
header("Location: contact.html");
exit(0);
}
?>

此外,奇怪的是,如果我删除 emailto.php 中的 if-else 语句, 提交后会报错: undifined index: subject, firstname, lastname, emailadd, message...

我完全糊涂了.. 期待听到一些建议。 提前致谢。

【问题讨论】:

  • 另请注意,isset() 对于定义为空字符串的变量(例如空白 POST 数据字段)返回 true。

标签: php html


【解决方案1】:

从您的表单中删除此enctype='text/plain',它将开始工作; 我保证。如果它失败了,那么你需要找出原因并确保邮件可供你使用。

旁注:您还应该检查是否有任何输入为空(required 有帮助)。

并为mail() 使用正确的(完整)标题:

否则,您的邮件可能会被视为垃圾邮件或被完全拒绝。

应该有一个有效的From: &lt;email&gt; 作为邮件的第四个参数的一部分。

即并从手册中:

<?php
$to      = 'nobody@example.com';
$subject = 'the subject';
$message = 'hello';
$headers = 'From: webmaster@example.com' . "\r\n" .
    'Reply-To: webmaster@example.com' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();

mail($to, $subject, $message, $headers);
?>

"另外,比较奇怪的是,如果我删除emailto.php中的if-else语句,提交后会报错:未定义索引:主题,名字,姓氏,emailadd,message... "

  • 再次;这是由 enctype='text/plain' 的形式引起的,该形式不是使用 POST 数组的有效编码类型。

编辑:

将if/else 添加到mail()。如果它回显“休斯顿我们有问题”,那么你这边就有问题了。

如果它回显“邮件已发送!”,但没有收到邮件,请查看您的垃圾邮件箱。邮件已经完成了它的工作,您需要找出为什么它从未发送/接收。

<?php 
if (isset($_POST['submit'])) {
$to = "emailaddress";
$subject = $_POST['subject'];
$firstname = $_POST['firstname'];
$lastname = $_POST['lastname'];
$Emailadd = $_POST['emailadd'];
$Message = $_POST['message'];
$Body= "";
$Body .= $firstname;
$Body .= $lastname;
$Body .= "\n";
$Body .= $Emailadd;
$Body .= "\n";
$Body .= $Message;

if(mail($to,$subject,$Body)){
echo "Mail Sent! <a href='contact.html'>Go Back</a>";
} else { echo "Houston, we have a problem"; }

} else {
header("Location: contact.html");
exit(0);
}
?>

【讨论】:

  • @Progrock 是的。但是,我在回答中添加了一些内容以帮助他们。希望一切顺利并按预期进行。
  • 谢谢!真的很有帮助!
  • @NicoleYan 您可能希望将问题/答案标记为已解决,以便通知所有人/堆栈系统找到了解决方案。否则它将被视为“仍然开放/未解决”,其他人可能认为他们应该发布更多答案。 欢迎来到 Stack
猜你喜欢
  • 2015-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-04
  • 2015-03-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多