PHP注意:未定义的索引 - 联系表单不起作用

时间:2016-06-17 17:36:18

标签: php forms undefined-index

所以这是一个带有基本验证的Contact Form php脚本。这个脚本运行得非常好,没有任何问题或错误。直到最近,我才将文件转移到另一个虚拟主机。

以前的网络主机有PHP版本5.4.35 虽然新的Web主机具有PHP版本5.4.45

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

  

[2016年6月17日17:05:20 Etc / GMT] PHP注意:未定义索引:第70行/home/domain/public_html/contact.php中的名称

     

[2016年6月17日17:05:20 Etc / GMT] PHP注意:未定义索引:第76行/home/domain/public_html/contact.php中的电子邮件

     

[17-Jun-2016 17:05:20 Etc / GMT] 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 = 'example@domain.com';
    $subject = 'Contact Form';

    $header = "From:contact@domain.com \r\n";
    $header = "Cc:contact2@domain.com \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>

1 个答案:

答案 0 :(得分:0)

这些错误告诉您,您的$_POST数组没有nameemailmessage。有人提交了一份空表格。

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

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

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

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