PHP 通知:未定义的索引 - 联系表单不起作用 [重复]

PHP Notice: Undefined index - Contact Form not working [duplicate]

提问人:Swayam 提问时间:6/18/2016 最后编辑:CommunitySwayam 更新时间:6/18/2016 访问量:1398

问:

所以这是一个带有基本验证的联系表单 php 脚本。此脚本运行绝对正常,没有任何问题或错误。直到最近,我才将文件转移到另一个虚拟主机。

以前的虚拟主机的PHP版本为5.4.35 虽然新的虚拟主机具有 PHP 版本 5.4.45

我对PHP了解不多,所以我不知道发生了什么。以下是每次有人提交联系表格时error_log记录的内容。

[2016 年 6 月 17 日 17:05:20 等/格林威治标准时间]PHP注意:未定义索引:/home/domain/public_html/contact中的名称.php在第70行

[2016 年 6 月 17 日 17:05:20 等/格林威治标准时间]PHP 通知:未定义索引:第 76 行 /home/domain/public_html/contact 中的电子邮件.php

[2016 年 6 月 17 日 17:05:20 等/格林威治标准时间]PHP 注意:未定义索引:第 82 行 /home/domain/public_html/contact 中的消息.php

为了解决这个问题,我将错误变量($name,$email,$message)初始化为null,在这种情况下,没有更多的错误,但联系表单无法正常工作。

请帮帮我!我不知道为什么会出现这个问题。

<?php

if (isset($_POST["submit"])) {
    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];
    $human = intval($_POST['human']);
    $to = '[email protected]';
    $subject = 'Contact Form';

    $header = "From:[email protected] \r\n";
    $header = "Cc:[email protected] \r\n";
    $header .= "MIME-Version: 1.0\r\n";
    $header .= "Content-type: text/html\r\n";

    $body = "From: $name\n E-Mail: $email\n Message:\n $message";
    if (!$_POST['name']) {
        $errName = 'Please enter your name';
    }

    if (!$_POST['email'] || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
        $errEmail = 'Please enter a valid email address';
    }

    if (!$_POST['message']) {
        $errMessage = 'Please enter your message';
    }

    if ($human !== 2) {
        $errHuman = 'Your anti-spam is incorrect';
    }

    if (!$errName && !$errEmail && !$errMessage && !$errHuman) {
        if (mail($to, $subject, $body, $header)) {
            $result='Thank You! Your message will be replied soon!';
        } else {
            $result='Sorry there was an error sending your message.';
        }
    }
}
?>
        <form class="col l12" method="post" action="contact.php">
                    <input id="name" name="name" type="text" class="validate" value="<?php echo htmlspecialchars($_POST['name']); ?>">
                    <?php echo "<p class='red-text'>$errName</p>";?>
                    <label for="name">Name</label>

                    <input id="email" name="email" type="email" class="validate" value="<?php echo htmlspecialchars($_POST['email']); ?>">
                    <?php echo "<p class='red-text'>$errEmail</p>";?>
                    <label for="email">Email</label>

                    <textarea name="message" class="materialize-textarea"><?php echo htmlspecialchars($_POST['message']);?></textarea>
                    <?php echo "<p class='red-text'>$errMessage</p>";?>
                    <label for="message">Message</label>

                    <label for="human"><strong>AntiSPAM Check:</strong> 5 - 3 = ?</label>
                    <input id="human" name="human" type="text" class="validate">
                    <?php echo "<p class='red-text'>$errHuman</p>";?>

                        <p class="left-align"><button class="blue darken-1 btn-large waves-effect waves-light" id="submit" type="submit" style="font-weight:500;" name="submit">Send</button>
                        <?php echo $result; ?>
        </form>
PHP 表单 undefined-index

评论

0赞 Swayam 6/18/2016
@Rizier123 尽管由于相同的错误标签,这似乎是重复的,但我已经实现了另一个线程中提到的更改,但这并没有解决问题。这个问题是唯一的,尽管标记在同一个“php notice”标签下。

答:

0赞 Here2Help 6/18/2016 #1

这些错误告诉您,您的数组没有 or 或 。有人提交了空表单。$_POSTnameemailmessage

现在,稍后在脚本中检查缺失值,但直到您尝试访问这些缺失的数组值之后才检查。

最好的办法是移动您的验证码......

if (!$_POST['name']) {
    ...

...到顶部,以便它首先运行。然后,只有在您确定它存在时才这样做。$name = $_POST['name'];

评论

0赞 Swayam 6/18/2016
我进行了更改,但刷新或加载页面时似乎会出现错误。但是,在实施更改后,您提到提交表单后生成的错误不存在,但表单仍然无法正常工作:(
0赞 Here2Help 6/18/2016
@Swayam 嗯,你的问题是关于错误的,我回答了这个问题。刷新页面时会出现错误是完全有道理的,此时没有提交表单数据!
0赞 Here2Help 6/18/2016
@Swayam 不确定你说的“仍然无法工作”是什么意思。如果您现在收到不同的错误,或者可能只是没有收到电子邮件,那么这是一个全新的问题。做一些故障排除,添加日志记录,当你有关于你的问题的具体信息并可以显示你尝试过的内容时,回来发布一个新问题。
0赞 Swayam 6/18/2016
嗯。。但是,为什么上面的脚本会在这个虚拟主机中产生问题呢?发生这种情况是因为 php 版本的变化吗?
0赞 Here2Help 6/18/2016
@Swayam嗯?您最初的问题是通知,这并不是一个错误。这些是根据您的 PHP 设置生成的,您可以在其中控制报告/记录哪些错误级别。我不认为次要版本更改与它有任何关系。