为了账号安全,请及时绑定邮箱和手机立即绑定

PHP 的 isset 函数问题

PHP 的 isset 函数问题

PHP
largeQ 2023-07-08 21:44:37
我正在为我的网站制作一个联系表单,该表单使用 php 将输入的信息发送到我的电子邮件。我的问题是 isset php 函数返回 false。我不知道这是为什么。这是我的php代码(输出结果是“未发送”)<?phpif (isset($_POST['submit'])){    $name = $_POST['name'];    $subject = $_POST['subject'];    $mailFrom = $_POST['mail'];    $message = $_POST['message'];    $mailTo = "btrorapps@gmail.com";    $headers = "From: " .$mailFrom;    $txt = "You have received an email from " .$name.".\n\n".$message;    if (mail($mailTo, $subject, $txt, $headers)){        echo "<h1>sent successfully</h1>";    } else {        echo "<h1>something went wrong</h1>";    }} else {    echo "not sent";}?>这是我的表单代码<form action="contactform.php" method="post" enctype="text/plain">     <label for="name">Name</label>     <input type="text" name="name" placeholder="Full name.." maxlength="20" required>     <label for="mail">Email</label>     <input type="text" name="mail" placeholder="Your email.."       pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z{2,}$" required>     <label for="subject">Subject</label>     <input type="text" name="subject" maxlength="25" placeholder="Subject..">     <label for="message">Message</label>     <input type="text" name="message" placeholder="Message.." style="height:170px"       maxlength="150" required>     <input type="submit" value="submit" name="submit"></form>
查看完整描述

2 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

功能上没有什么问题isset。这甚至不是 PHP 相关的问题。

这都是关于表单提交编码的。表单有 3 种有效的编码类型:

  1. application/x-www-form-urlencoded(默认)

  2. multipart/form-data

  3. text/plain

您正在使用第三个,其记录如下:

使用该text/plain格式的有效负载旨在便于人类阅读。它们无法被计算机可靠地解释,因为格式不明确(例如,无法区分值中的文字换行符和值末尾的换行符)。

您没有获得任何POST变量,因为 PHP$_POST在使用enctype="text/plain".

在 superglobal的文档中$_POST

application/x-www-form-urlencoded当使用或 multipart/form-data作为请求中的 HTTP Content-Type时,通过 HTTP POST 方法传递到当前脚本的变量的关联数组。


话虽如此,您仍然可以从请求正文中读取原始数据。

$data = file_get_contents('php://input');

但您将获得字符串(纯文本)形式的整个数据。

最后但并非最不重要的一点是,要小心,php://input不适用于enctype="multipart/form-data".


查看完整回答
反对 回复 2023-07-08
?
浮云间

TA贡献1829条经验 获得超4个赞

isset($_POST['submit'])如果表单上有多个提交按钮,则不要使用引用提交按钮,因为该按钮并不总是被按下。这在过去给我带来了问题。

在任何字段上按 Enter 键将提交表单,并且第一个提交按钮可用。

使用其中一个字段。在你的情况下你可以使用if (isset($_POST['name'])){


查看完整回答
反对 回复 2023-07-08
  • 2 回答
  • 0 关注
  • 97 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信