PHP 中使用 textarea [duplicate] 的未定义索引

Undefined Index in PHP using textarea [duplicate]

提问人:CardDeath 提问时间:7/20/2016 最后编辑:CardDeath 更新时间:7/20/2016 访问量:2505

问:

我已经看过几十篇关于这个问题的帖子,它基本上归结为一个变量没有被声明或被赋予一个值。但是,我 100% 确定它是相同的并声明的。

我有一个基本的HTML联系表格,我希望当有人点击提交按钮时,它能向我发送和电子邮件。我也在调试代码,看看问题出在哪里。它能找到的唯一问题是有一个属于我的文本区域。Undefined Index

我知道 textarea 的名称必须与 PHP 中 my 的名称相同。请看一下这两部分代码,并告诉我您是否能看到为什么它不会从我的文本区域获取信息。名称是 。$_POSTmessage-area

[HTML全文]

<form action="mail.php" method="post" name=contact-me-form >
     <label name="firstname secondname">Name: *&nbsp;</label><br>
     <input class="half-box" type="text" name="firstname" required >
     <input class="half-box" type="text" name="secondname" required ><br>
     <p class="first-name">First Name</p>
     <p class="second-name">Last Name</p><br>
     <label name="email">Email Address: *&nbsp;</label><br>
     <input class="full-box" type="email" name="email" spellcheck="false" required><br>
     <label name="subject">Subject:&nbsp;</label><br>
     <input class="full-box" type="text" name="subject"><br>
     <label name="message">Message: *&nbsp;</label><br>
     <textarea name="message-area" form="contact-me-form" type="text"  placeholder="Please enter your message"></textarea>
     <button name="submit" type="submit" value="Submit">Submit</button>
</form>

PHP的

<?PHP

  $to = "";
  $from = "";
  $first_name = '';
  $last_name = '';
   $subject = '';
  $message = null;

 error_reporting(-1);
 ini_set('display_errors', 'On');
 set_error_handler("var_dump");

if(isset($_POST['submit'])){
      $to = '[email protected]';
      $from = $_POST['email'];
      $first_name = $_POST['firstname'];
      $last_name = $_POST['secondname'];
      $subject = $_POST['subject'];
      $message = $_POST["message-area"];
if($message == null){echo "no message detected";}

 $headers = "From: " . $from;
 $headers = "From:" . $to;
 mail($to,$subject,$message,$headers);
 }

 ?>

如您所见,名称是相同的,但是当我提交数据时,它会出现以下内容。

int(8) string(29) “Undefined index: message-area” string(58) “/hermes/bosnaweb25a/b2294/ 后跟更多信息,我的错误显示: [”message“]=> NULL } 未检测到消息。

老实说,我不知道为什么这没有被捡起来,有更多经验的人可以强调我的错误吗?

编辑 1

这与破折号/连字符无关,因为我编辑了我的代码,如下所示。同样重要的是要注意,如果我将其更改为原始文本,它仍然不起作用,仍然表现得好像文本区域没有数据一样。

[HTML全文]

                    <form action="mail.php" method="post" id=contact-me-form >
                    <label name="firstname secondname">Name: *&nbsp;</label><br>
                    <input class="half-box" type="text" name="firstname" required >
                    <input class="half-box" type="text" name="secondname" required ><br>
                    <p class="first-name">First Name</p>
                    <p class="second-name">Last Name</p><br>
                    <label name="email">Email Address: *&nbsp;</label><br>
                    <input class="full-box" type="email" name="email" spellcheck="false" required><br>
                    <label name="subject">Subject:&nbsp;</label><br>
                    <input class="full-box" type="text" name="subject"><br>
                    <label name="message">Message: *&nbsp;</label><br>
                    <textarea name="messagearea" type="text"  placeholder="Please enter your message"></textarea>
                    <button name="submit" type="submit" value="Submit">Submit</button>
                </form>

PHP的

<?PHP

$to = "";
$from = "";
$first_name = '';
$last_name = '';
$subject = '';
$message = null;

error_reporting(-1);
ini_set('display_errors', 'On');
set_error_handler("var_dump");

 if(isset($_POST['submit'])){
   $to = '[email protected]';
   $from = $_POST['email'];
   $first_name = $_POST['firstname'];
   $last_name = $_POST['secondname'];
   $subject = $_POST['subject'];
   $message = $_POST["messagearea"];
if($message == null){echo "no message detected";}

$headers = "From: " . $from;
$headers = "From:" . $to;
mail($to,$subject,$message,$headers);
}

 ?>

编辑 2

使用硬编码值对其进行了测试,因此它必须是变量名称。奇怪的是,它只发生在文本区域。

php html 表单 undefined-index

评论

0赞 deceze 7/20/2016
提示:如果某些项目提交,而其他项目未提交,请仔细查看它们之间的区别,并消除该差异。
0赞 Marki555 7/20/2016
尝试将 重命名为不带连字符的名称。message-area
0赞 CardDeath 7/20/2016
谢谢大家,看一看。我已经从我的 HTML 和 PHP 中删除了连字符/破折号,但刚才仍然有同样的错误说“未定义的索引:messagearea”,可惜仍然有问题。

答:

0赞 Carl Casbolt 7/20/2016 #1

您似乎在form=""<textarea></textarea>

如果将其更改为以下内容,它应该可以工作。

<textarea name="message-area" type="text"  placeholder="Please enter your message"></textarea>

关于对 $message 不起作用的检查,您应该使用它来检查它,因为这将捕获和 。($message == null)empty()NULL""

if (empty($message)) {
    echo "no message detected";
}

评论

0赞 deceze 7/20/2016
一般来说,属性不是问题;只有当属性引用的表单不存在时,这才是一个问题。在这种情况下,这是因为表单在需要 id 时具有 。– 所以,缺乏解释,但这就是问题所在。formname=contact-me-form
1赞 CardDeath 7/20/2016
从文本区域中删除了表单属性,我将contact-me-form更改为id,但仍然没有结果。
0赞 Denis Bhojvani 7/20/2016 #2

这是您的解决方案,只需将下面一行替换为您的文本区号即可。

 <textarea name="message-area"   placeholder="Please enter your message"></textarea>

这里不需要文本。form="contact-me-form"

评论

0赞 CardDeath 7/20/2016
删除了这个和 type=“text”,但仍然没有结果。感谢您的尝试。
0赞 CardDeath 7/20/2016 #3

感谢您的帮助,我发现了问题所在,它似乎有效。我实际上还没有收到电子邮件(可能是可怕的越南互联网)。

问题是我定义的变量并没有像我想象的那样设置为空。我必须检查并分配给我的所有变量,它似乎绕过了错误。$variable = ""= null