Php 使用';如果';
我目前正在构建一个非常小的“联系人”表单,用于个人网站 表单工作,每个验证“如果”语句单独工作,但是,例如,如果我输入了有效的电子邮件地址和电话号码,但将消息留空,电子邮件仍会发送,我会收到成功消息 我的猜测是将小的“if”语句包含在一个语句中,检查我的必填字段是否为空,尽管我不确定如何正确地执行此操作,因为它将多个“if”嵌套在一个语句中 干杯Php 使用';如果';,php,forms,validation,Php,Forms,Validation,我目前正在构建一个非常小的“联系人”表单,用于个人网站 表单工作,每个验证“如果”语句单独工作,但是,例如,如果我输入了有效的电子邮件地址和电话号码,但将消息留空,电子邮件仍会发送,我会收到成功消息 我的猜测是将小的“if”语句包含在一个语句中,检查我的必填字段是否为空,尽管我不确定如何正确地执行此操作,因为它将多个“if”嵌套在一个语句中 干杯 <?php // Validation goes here $errors = '';
<?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; ?>
根据提供的信息,我认为您应该使用复杂的if-elseif-else语句,如:
`if (condition) {
code to be executed if this condition is true;
} elseif (condition) {
code to be executed if this condition is true;
} else {
code to be executed if all conditions are false;
} `
在您的特殊情况下:
// 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.";
} elseif(!preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i", $email)) {
$errors = 'Error:invalid email';
}elseif(!preg_match("/^\(?0( *\d\)?){9,10}$/", $number){
$errors .= "Error: Invalid phone number";
} else {
//Do this on successful validation comes here
}
您的问题是,每次通过一个验证条件时,您都会将
$errors
重置回'
:
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 = '';
}
您不应该这样做,只需将错误消息保留给以前的内容即可。这样,当您到达末尾时,$errors
将包含所有错误消息的组合字符串。由于可能有多条消息,您可能希望在每条消息的末尾加一个分隔符:
if(empty($name) || empty($email) || empty($comments)) {
$errors .= "Error: please input a name, email address and your message.<br>";
}
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<br>";
}
if (!preg_match("/^\(?0( *\d\)?){9,10}$/", $number)) {
$errors .= "Error: Invalid phone number<br>";
}
尝试下面的代码,它会帮助你
<?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 {
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 = '';
}
}
?>
您需要提供包含或不包含发送电子邮件条件的代码。感谢上面提供的@JBES。我认为您必须删除else子句,因为每次正确的检查都会删除所有以前设置的错误。因此,只需将您的`if(empty($name)| | empty($email)| empty($comments))拆分为'if(empty($name)| | empty($comments)){$errors.=“Error:请输入姓名、电子邮件地址和您的邮件。”;}否则{$errors='';}`将块插入单个错误邮件中,并删除else
语句。因此,您可以使用$errors作为数组并列出多个错误,例如$errors[]=“无效电子邮件地址”…然后您只需检查计数($errors)>0要知道表单是否无效,仅当您的电子邮件、评论、姓名不为空时,才检查有效的电子邮件和电话。在代码中,如果您的邮件当时为空$error get message,但您的电子邮件地址是正确的,因此它将进一步变为空,并且邮件已发送如果您需要任何帮助,那么您可以询问Underful!感谢您提供了这样一个有用的示例计划也:)谢谢,非常有帮助:)亚历克斯,我很乐意帮忙。我在这个平台上得到了很多帮助。很高兴回报你的帮助。
<?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 {
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 = '';
}
}
?>