繁体   English   中英

PHP isset function 问题

[英]PHP Issue with isset function

我正在为我的网站制作一个联系表格,该表格使用 php 将输入的信息发送到我的 email。

我的问题是 isset php function 返回 false。 我不确定这是为什么。

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

<?php

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

isset function 没有任何问题。 它甚至不是与 PHP 相关的问题。

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

  1. application/x-www-form-urlencoded (默认)
  2. multipart/form-data
  3. text/plain

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

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

你没有得到任何POST变量,因为 PHP 在使用enctype="text/plain"时没有填充$_POST

$_POST superglobal 的文档中:

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


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

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

但是您将获得整个数据作为字符串(纯文本)。

最后但同样重要的是,请注意, php://input不适用于enctype="multipart/form-data"

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

在任何字段上按 enter 将使用第一个可用的提交按钮提交表单。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM