PHP 表单抛出错误 - 注意:未定义的索引

Posted

技术标签:

【中文标题】PHP 表单抛出错误 - 注意:未定义的索引【英文标题】:PHP form throwing errors - Notice: Undefined index 【发布时间】:2014-06-01 08:49:27 【问题描述】:

我正在尝试为一个简单的表单实现 php

<?php
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$from = 'From: Hola'; 
$to = 'test@yahoo.com'; 
$subject = 'Hola';

$body = "From: $name\n E-Mail: $email\n Message:\n $message";

if ($_POST['submit']) 
if (mail ($to, $subject, $body, $from))  
    echo '<p>Your message has been sent!</p>';
 else  
    echo '<p>Something went wrong, go back and try again!</p>'; 

?>

<form class="form" method="post" action="say-hello.php">
    
    <label>Name</label>
    <input name="name" placeholder="Spongebob" required data-errormessage-value-missing="Whoa, you can't leave this blank!">
        
    <label>Email</label>
    <input name="email" type="email" placeholder="squarepants@krustykrab.com" required data-errormessage-value-missing="Whoa, you can't leave this blank!" data-errormessage-type-mismatch="Something isn't right...">
        
    <label>Message</label>
    <textarea name="message" placeholder="Well Hello!" required data-errormessage-value-missing="Whoa, you can't leave this blank!"></textarea>

    <div class="bttnholder">       
    <input class="submit" name="submit" type="submit" value="Submit" placeholder="Send">
    </div>
    
</form>

我无法弄清楚为什么我的部分 PHP 显示为 html,以及为什么我在页面上收到以下错误:

注意:未定义索引:第 35 行 C:\xampp\htdocs\sandbox\say-hello.php 中的名称

注意:未定义索引:第 36 行 C:\xampp\htdocs\sandbox\say-hello.php 中的电子邮件

注意:未定义索引:第 37 行 C:\xampp\htdocs\sandbox\say-hello.php 中的消息

对让这段代码正常工作有什么帮助吗?


以下是第 35、36、37 行。

$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];

【问题讨论】:

你能确定“say-hello.php”中的哪些行是35、36和37? 我将其添加为编辑@Helpful 【参考方案1】:

您必须首先检查要设置的变量。试试这个:

if (isset($_POST['submit'])) 
  $name = $_POST['name'];
  $email = $_POST['email'];
  $message = $_POST['message'];
  $from = 'From: Hola'; 
  $to = 'test@yahoo.com'; 
  $subject = 'Hola';
  if (mail ($to, $subject, $body, $from))  
    echo '<p>Your message has been sent!</p>';
   else  
    echo '<p>Something went wrong, go back and try again!</p>';
  

【讨论】:

它发送了部分消息并给出了这个错误:注意:未定义变量:C:\xampp\htdocs\sandbox\say-hello.php 中的正文第 42 行您的消息已发送! 是的。我的错。请将 $body 更改为 $message。对不起。 感谢您的帮助! @train_fox【参考方案2】:

$_POST['submit'] 已过时,因为您应该检查正确的表单输入。 我检查每个表单输入是否已设置且不为空。如果其中之一为空或未设置 -> 错误。 如果所有字段都给出 -> 发送邮件。

<?php

    $from = 'From: Hola'; 
    $to = 'test@yahoo.com'; 
    $subject = 'Hola';

    if(
        !isset($_POST['name']) || empty($_POST['name']) ||
        !isset($_POST['email']) || empty($_POST['email']) ||
        !isset($_POST['message']) || empty($_POST['message'])
    )
        echo '<p>Please fill in all fields</p>';
    else
        $body = "From: " . $_POST['name'] . "\n E-Mail: " . $_POST['email'] . "\n Message:\n " . $_POST['message'] . "";
        if (mail ($to, $subject, $body, $from))  
            echo '<p>Your message has been sent!</p>';
         else  
            echo '<p>Something went wrong, go back and try again!</p>'; 
        
    

?>

【讨论】:

当然,您也可以自行检查每个输入,以提供更好的错误消息;-) 该行仅在您未提交所有字段时出现。如果您不想显示错误,只需删除该行。可选的,您还可以反转语句... 去掉这行意味着省略 echo '

请填写所有字段

'; @Vestalis
【参考方案3】:

要摆脱通知,您应该将您的 php 更改为:

<?php
if(isset($_POST['name'])) 
    $name = $_POST['name'];

if(isset($_POST['email'])) 
    $email = $_POST['email'];

if(isset($_POST['message'])) 
    $message = $_POST['message'];

$from = 'From: Hola'; 
$to = 'test@yahoo.com'; 
$subject = 'Hola';

$body = "From: $name\n E-Mail: $email\n Message:\n $message";

if (isset($_SERVER['CONTENT_LENGTH'])) 
    if (mail ($to, $subject, $body, $from))  
        echo '<p>Your message has been sent!</p>';
     else  
        echo '<p>Something went wrong, go back and try again!</p>'; 

【讨论】:

【参考方案4】:

你的邮件函数是错误的,里面没有“发件人”参数,如果你想要一个发件人参数,你的邮件函数应该是这样的:

首先定义一个headers变量:

$headers = "From: $from";

还有你的邮件功能:

mail($to,$subject,$body,$headers)

【讨论】:

【参考方案5】:

您必须在 if 语句中插入这些行。

$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$from = 'From: Hola'; 
$to = 'test@yahoo.com'; 
$subject = 'Hola';

$body = "From: $name\n E-Mail: $email\n Message:\n $message";

当 html 页面加载时,例如名称不存在。单击提交按钮后已设置。所以如果你把它放在 if 语句中,脚本只会在提交按钮发布后读取变量。

无论如何,为了您以后的考虑,这些不是错误,是警告,脚本仍然有效。

【讨论】:

以上是关于PHP 表单抛出错误 - 注意:未定义的索引的主要内容,如果未能解决你的问题,请参考以下文章

PHP 注意:未定义索引:将表单提交同步到 mailchimp 列表时

未定义的索引:formSignInEmail [关闭]

我填写了表单上的所有值,我的 PHP 仍然返回未定义索引

“注意:未定义的变量”、“注意:未定义的索引”和“注意:未定义的偏移量”使用 PHP

“注意:未定义的变量”、“注意:未定义的索引”和“注意:未定义的偏移量”使用 PHP

“注意:未定义的变量”、“注意:未定义的索引”和“注意:未定义的偏移量”使用 PHP