提问人:Swayam 提问时间:6/18/2016 最后编辑:CommunitySwayam 更新时间:6/18/2016 访问量:1398
PHP 通知:未定义的索引 - 联系表单不起作用 [重复]
PHP Notice: Undefined index - Contact Form not working [duplicate]
问:
所以这是一个带有基本验证的联系表单 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>
答:
这些错误告诉您,您的数组没有 or 或 。有人提交了空表单。$_POST
name
email
message
现在,稍后在脚本中检查缺失值,但直到您尝试访问这些缺失的数组值之后才检查。
最好的办法是移动您的验证码......
if (!$_POST['name']) {
...
...到顶部,以便它首先运行。然后,只有在您确定它存在时才这样做。$name = $_POST['name'];
评论