【发布时间】:2017-01-15 13:59:33
【问题描述】:
我目前正在构建一个用于个人网站的非常小的“联系”表单。
表单有效,并且每个验证“if”语句单独有效,但是,例如,如果我输入了有效的电子邮件地址和电话号码但将消息留空,电子邮件仍会发送并且我会收到成功消息。
我的猜测是将小的“if”语句包含在一个检查我的必填字段是否不为空的语句中,尽管我不确定如何正确执行此操作,因为它将多个“if”嵌套到一个中。
干杯
<?php
// Validation goes here
$errors = '';
$success = 'Success! Your message has been sent. You should receive a reply within 48 hours.';
$email = $_POST['email'];
$name = $_POST['thename'];
$comments = $_POST['comments'];
$number = $_POST['number'];
if(empty($name) || empty($email) || empty($comments)) {
$errors .= "Error: please input a name, email address and your message.";
} else {
$errors = '';
}
if (!preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i", $email)) {
$errors .= "Error: Invalid email address";
} else {
$errors = '';
}
if (!preg_match("/^\(?0( *\d\)?){9,10}$/", $number)) {
$errors .= "Error: Invalid phone number";
} else {
$errors = '';
}
?>
<!-- Display red error box or green success box depending on which is true -->
<?php if(!empty($errors)): ?>
<div class="validationbox | errorsbox">
<?php echo $errors; ?>
</div>
<?php elseif(empty($errors)): ?>
<div class="validationbox | successbox">
<?php echo $success; ?>
</div>
<?php
$message = ''; // Blank message to start with so we can append to it.
// Construct the message
$message .= "
Name: {$_POST['thename']};
Email: {$_POST['email']};
Number: {$_POST['number']};
Enquiry-type: {$_POST['enquiry-options']};
Message: {$_POST['comments']};
";
// test@testdomain.com
$to = 'test-email-deleted-for-stackoverflow';
$subject = 'Message from Portfolio';
$from = $_POST['thename'];
// YourSite@domain.com
$fromEmail = 'test-email-deleted-for-stackoverflow';
$header = 'From: ' . $from . '<' . $fromEmail . '>';
mail($to,$subject,$message,$header);
?>
<?php endif; ?>
<?php endif; ?>
【问题讨论】:
-
您需要提供包含发送或不发送电子邮件条件的代码。
-
感谢@JBES,上面提供。
-
我认为你必须删除你的 else 子句,因为每一次正确的检查都会删除所有之前设置的错误。
-
所以把你的` if(empty($name) || empty($email) || empty($cmets)) { $errors .= "Error: please input a name, email地址和您的留言。”; } 其他 { $errors = ''; }` 阻止单个错误消息并摆脱
else语句 -
否则您可以将 $errors 用作数组并列出多个错误。 , 例如$errors[]= "Invalid email address" ... 然后你只需要检查 count($errors) >0 就知道表单是否无效
标签: php forms validation