所以这是一个带有基本验证的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>
答案 0 :(得分:0)
这些错误告诉您,您的$_POST
数组没有name
或email
或message
。有人提交了一份空表格。
现在,您将在脚本中检查缺失值,但在您尝试访问这些缺少的数组值之后才会检查。
最好的办法就是移动验证码......
if (!$_POST['name']) {
...
...到顶部所以先运行。然后,只有在您确定它存在时才执行$name = $_POST['name'];
。