带有isset函数的PHP问题

带有isset函数的PHP问题,php,html,forms,isset,Php,Html,Forms,Isset,我正在为我的网站制作一个联系表单,它使用php将输入的信息发送到我的电子邮件中 我的问题是isset php函数返回false。我不知道这是为什么 这是我的php代码(输出的结果是“未发送”) 这是我的表格代码 <form action="contactform.php" method="post" enctype="text/plain"> <label for="name">

我正在为我的网站制作一个联系表单,它使用php将输入的信息发送到我的电子邮件中

我的问题是isset php函数返回false。我不知道这是为什么

这是我的php代码(输出的结果是“未发送”)


这是我的表格代码

<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>

名称
电子邮件
主题
消息
不要使用引用提交按钮的isset($\u POST['submit']),以防表单上有多个提交按钮,因为该按钮并非始终按下。这在过去给我带来了很多问题

在任何字段上按enter键都将提交表单,其中第一个提交按钮可用


使用其中一个字段。在您的例子中,您可以使用
if(isset($\u POST['name']){

函数没有问题。它甚至不是与PHP相关的问题

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

  • (默认)
  • 您使用的是第三个,它记录如下:

    使用
    text/plain
    格式的有效载荷是人为的 可读性。它们不能被计算机可靠地解释,就像 格式不明确(例如,无法区分 从值末尾的换行符开始的值中的文字换行符)

    由于PHP在使用
    enctype=“text/plain”
    时不填充
    $\u POST
    ,因此不会得到任何
    POST
    变量

    在superglobal的文档中:

    通过传递给当前脚本的变量的关联数组 使用
    应用程序/x-www-form-urlencoded
    multipart/form data
    作为请求中的HTTP内容类型


    尽管如此,您仍然可以从请求主体读取原始数据

    $data = file_get_contents('php://input');
    
    但您将以字符串(纯文本)的形式获得整个数据


    最后但并非最不重要的是,要小心,
    php://input
    不适用于
    enctype=“multipart/form data”

    当您删除表单标签中的enctype时会发生什么?只需
    die(“”.print\r($\u POST)。
    …我想您需要删除enctype,请阅读此()是什么让你认为
    isset
    返回false?这是不正确的。以任何方式提交表单都应该发送其所有输入元素,包括
    type=input
    好的,我明白你的意思了。我将行更改为if(isset($\u POST['name'])).我明白你的意思,但不幸的是它不起作用。结果仍然是“未发送”@SaidbakR这是不正确的。如果未单击提交按钮,即在文本字段上按enter键,则不会发送提交按钮。请尝试。其他每个字段都会发送提交按钮。提交按钮不会发送。例如@SaidbakR您的jsbin有错误,但我测试正确,您是对的,第一次提交已发送。我发布此答案是因为我使用了多个submit按钮,并有此问题。由于第一个提交按钮被发送,我的答案是错误的,我已经更新了它,但现在它是无关的,所以我将它留给版主离开或删除。我从文本/纯文本更改为多部分/表单数据,它工作完美。谢谢!!!
    $data = file_get_contents('php://input');