Php 使用';如果';

Php 使用';如果';,php,forms,validation,Php,Forms,Validation,我目前正在构建一个非常小的“联系人”表单,用于个人网站 表单工作,每个验证“如果”语句单独工作,但是,例如,如果我输入了有效的电子邮件地址和电话号码,但将消息留空,电子邮件仍会发送,我会收到成功消息 我的猜测是将小的“if”语句包含在一个语句中,检查我的必填字段是否为空,尽管我不确定如何正确地执行此操作,因为它将多个“if”嵌套在一个语句中 干杯 <?php // Validation goes here $errors = '';

我目前正在构建一个非常小的“联系人”表单,用于个人网站

表单工作,每个验证“如果”语句单独工作,但是,例如,如果我输入了有效的电子邮件地址和电话号码,但将消息留空,电子邮件仍会发送,我会收到成功消息

我的猜测是将小的“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; ?>

根据提供的信息,我认为您应该使用复杂的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 = '';
            }
            }



        ?>