【问题标题】:Undefined Index in PHP using textarea [duplicate]PHP中使用textarea的未定义索引[重复]
【发布时间】:2025-12-22 01:30:11
【问题描述】:

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

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

我知道textarea的名字必须和我在PHP中$_POST上的名字一样。请看一下这两段代码,并告诉我你是否明白为什么它不会从我的 textarea 中获取信息。名字是message-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@test.com';
      $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

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

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 = 'harry.brockley@hotmail.co.uk';
   $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

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

【问题讨论】:

  • 提示:如果某些项目正在提交而其他项目未提交,请仔细查看它们之间的区别,并消除该区别。
  • 尝试将message-area 重命名为不带连字符的名称。
  • 谢谢大家,看看。我已经从我的 HTML 和 PHP 中删除了连字符/破折号,但现在仍然出现同样的错误,上面写着“未定义的索引:messagearea” 遗憾的是问题仍然存在。

标签: php html forms undefined undefined-index


【解决方案1】:

&lt;textarea&gt;&lt;/textarea&gt; 中似乎有一个随机的form="" 属性

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

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

关于 $message 的检查不适用于($message == null),您应该使用empty() 进行检查,因为这将捕获NULL""

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

【讨论】:

  • 一般form 属性不是问题;当属性引用的表单不​​存在时,这只是一个问题。在这种情况下,因为表单有name=contact-me-form,所以它需要是一个id。 – 所以,缺乏解释,但它的问题。
  • 从文本区域中删除了表单属性,我将contact-me-form更改为id但仍然没有结果。
【解决方案2】:

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

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

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

【讨论】:

  • 删除了这个和 type="text" 但仍然没有结果。感谢您的尝试。
【解决方案3】:

感谢您的帮助,我发现了问题,并且似乎可以正常工作。我实际上还没有收到电子邮件(可能是糟糕的越南互联网)。

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

【讨论】: