这是我的简单联系表单的代码。所有电子邮件都成功发送,但是当他们没有输入任何信息时,应该出现的错误消息不会发送,并且它会发送电子邮件空白。由于我不希望收到垃圾邮件,我做错了什么?
代码:
<?php
$field_name = $_POST['name'];
$field_email = $_POST['email'];
$field_message = $_POST['message'];
$mail_to = 'myemail@goeshere';
$subject = 'Message from client: '.$field_name;
$body_message = 'From: '.$field_name."\n";
$body_message .= 'E-mail: '.$field_email."\n";
$body_message .= 'Message: '.$field_message;
$headers = 'From: '.$field_email."\r\n";
$headers .= 'Reply-To: '.$field_email."\r\n";
$mail_status = mail($mail_to, $subject, $body_message, $headers);
if ($mail_status) { ?>
<script language="javascript" type="text/javascript">
alert('Thank you for contacting us');
window.location = 'index.html';
</script>
<?php
}
else { ?>
<script language="javascript" type="text/javascript">
alert('Your message failed to send due to invalid credentials.');
window.location = 'index.html';
</script>
<?php
}
?>
HTML表单:
<form method="post" action="contact.php">
<div class="row half">
<div class="6u"><input type="text" class="text" name="name" placeholder="Name" /></div>
<div class="6u"><input type="text" class="text" name="email" placeholder="Email" /></div>
</div>
<div class="row half">
<div class="12u">
<textarea name="message" placeholder="Message"></textarea>
</div>
</div>
<div class="row">
<div class="12u">
<a href="#" class="button submit">Send Message</a>
</div>
</div>
</form>
很抱歉,如果代码没有正确缩进...
答案 0 :(得分:2)
您没有任何代码可以检查字段是否已填写。您应该使用isset()
检查字段是否已设置,并且使用filter_var
之类的内容检查字段是否包含有效数据
此外,您不应该依赖JavaScript来进行重定向,如果用户禁用了JavaScript,则无法使用。使用PHP进行重定向。
答案 1 :(得分:0)
无论表单的验证状态如何,代码始终会发送电子邮件。相反,您可以在尝试发送电子邮件之前检查表单验证。整体逻辑看起来像这样:
在代码中,它可能很简单:
$field_name = $_POST['name'];
$field_email = $_POST['email'];
$field_message = $_POST['message'];
if ($field_email != '') {
// compose and send the email
// display success message
} else {
// display error message
}
要对其他字段进行其他检查,您需要在if
语句中添加其他条件。
答案 2 :(得分:0)
如果邮件被接受传递,mail函数将返回TRUE。由于所有必需参数都存在,即使参数为空字符串,它也会接受邮件。
您需要检查输入是否有效。