【问题标题】:This if or that if in contact formThis if or that if in contact form
【发布时间】:2014-02-12 17:32:32
【问题描述】:

不知道我可以再写一个关于联系表格的问题,但我会尝试 :) 也许你会更快地提供帮助;p

代码:

<?php
 $name = $_POST['name'];
 $email = $_POST['email'];
 $message = $_POST['message'];
 $from = 'From: domain.com'; 
 $to = 'dawid@domain.com'; 
 $subject = 'Message from domain.com';

 $body = "From: $name\n E-Mail: $email\n Message:\n $message";

   if ($_POST['submit']) {
    if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email))
        {
               echo '<p class="msg">Wrong email adress!!!</p>';
        }            

        if ($name != '' && $email != '') {               
                if (mail ($to, $subject, $body, $from)) { 
                        echo '<p class="msg">Your message has been sent!</p>';
                } else { 
                        echo '<p class="msg">Something went wrong, go back and try again!</p>'; 
                       } 
                } else {
                        echo '<p class="msg">You need to fill in all required fields!!</p>';
                       }
    }
?>  

如您所见,我在 if 语句中有一些消息(回声)。但是我想让它只显示一个回声,即使联系表格中会有更多错误......这可能吗?

示例: 有人将所有输入留空并单击“发送”-atm 他会收到有关错误电子邮件的消息和“您需要填写所有必填字段”。 但是在这种操作系统情况下,首先我想只显示关于空字段的消息,然后如果有人会写错误的电子邮件,另一个关于错误电子邮件的消息:D 希望你明白我的意思。谢谢

【问题讨论】:

    标签: php html forms email contact


    【解决方案1】:
    if ($name == '' || $email == '' || $message == '') {               
     echo '<p class="msg">You need to fill in all required fields!!</p>';
    }else if(!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)){
     echo '<p class="msg">Wrong email adress!!!</p>';
    }else if (!mail ($to, $subject, $body, $from)){
     echo '<p class="msg">Your message has not been sent!</p>';
    }else{
     echo '<p class="msg">Your message has been sent!</p>';
    }
    

    【讨论】:

    • 这不是我想要的,但它很接近......现在当我点击发送时,我只看到一条消息......但点击发送后联系表格消失 0.o 我看到了只是消息 ;D 所以即使我无法在不刷新整个网站的情况下更正我的联系表格 ;D
    • @DaVv 好的。更新了答案。
    • 现在差不多好了 我稍微编辑了这段代码: if ($name != '' && $email != '' && $message != '') { echo '

      您需要填写所有必填字段!!

      '; }else if(!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)){ echo '

      邮箱地址错误!!!

      '; }else if (!mail ($to, $subject, $body, $from)){ echo '

      您的邮件尚未发送!

      '; }else{ echo '

      您的消息已发送!

      ';但不知道为什么当所有字段都为空时,我会看到有关错误电子邮件的消息大声笑:C
    • @DaVv 现在怎么样?
    【解决方案2】:

    创建一个错误数组,然后将该数组内爆以显示完整的错误消息。

    // DEFAULT
    $errors = array();
    
    // CHECK THINGS FOR ERRORS AND ADD THEM TO THE ERROR ARRAY
    if ((!$name) || ($name == '')) {
        $errors[] = '* Name is required';
    }
    
    if ((!$email) || ($email == '')) {
        $errors[] = '* Email is required';
    }
    
    // ... etc. - Anything else you want caught in an error
    
    // IF WE HAVE ERRORS, TURN THEM INTO A STRING AND PRINT THEM
    if ($errors) {
        $error_message = implode('<br>', $errors);
        echo $error_message;
    }
    

    编辑: 根据 OP 的要求,这是要求的示例。

    // CHECK THINGS FOR ERRORS AND ADD THEM TO THE ERROR ARRAY
    if ((!$name) || ($name == '')) {
        $errors = '* Name is required';
    }
    
    if ((!$email) || ($email == '')) {
        $errors = '* Email is required';
    }
    
    // ... etc. - Anything else you want caught in an error
    
    // IF WE HAVE ERRORS, PRINT THEM
    if ($errors) {
        echo $error_message;
    }
    

    ** 注意:您可以通过使用条件语句来实现相同的目标(这样做会更有意义)。只有一个条件可以被评估为真,因此一旦找到匹配项,它就不会进入任何其他 'elseif' 语句。

    【讨论】:

    • 是的,但是如果有两个错误,它将显示例如两个错误...我想在屏幕上最多显示一条消息...就像我写的...如果有人不写任何东西我想要类似“填写所有必填字段”之类的消息,如果有人写了所有内容但错误的电子邮件,我只想显示关于“错误电子邮件”的消息
    • 好的,那么您可以执行与上述相同的操作,除了将错误分配给数组之外,您可以将它们分配给变量。 $errors = '* Name is required';。每次发生错误时(如果有多个错误),该变量将被最新的错误消息覆盖。因此,该变量中只会出现一个错误。
    • 你能给我写一个例子吗? :D 我会很高兴 :)
    • 好的,我修改了答案以包含字符串版本。您可能应该像最初那样使用条件句,除非您只能有一个“else”。所有其他的都应该是“elseif”。 if (xxxx) {} elseif (yyyy) {} else {}
    • 该死的,它仍然不能很好地工作......也许实现起来并不容易:D
    【解决方案3】:
    if ($_POST['submit']) {
    
        if (!$email) {
            echo '<p class="msg">Email is required.</p>';
        }
        elseif (!$name) {
            echo '<p class="msg">Name is required.</p>';
        }
        elseif (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)) {
            echo '<p class="msg">Wrong email adress!!!</p>';
        }
        elseif ($name != '' && $email != '') {
    
            if (mail ($to, $subject, $body, $from)) { 
                echo '<p class="msg">Your message has been sent!</p>';
            }
            else { 
                echo '<p class="msg">Something went wrong, go back and try again!</p>'; 
            } 
        }
        else {
            echo '<p class="msg">You need to fill in all required fields!!</p>';
        }
    
    }
    

    【讨论】:

    • 当字段为空并且我单击发送消息时显示“电子邮件错误”除了“填写所有字段”:D
    • 那是因为在您的代码中,您首先要检查电子邮件是否与您的表达方式匹配。然后它将停止处理错误。因此,它永远不会到达您检查电子邮件是否已设置的另一部分。如果您想先检查,则将现有的if (!preg_match... 设为elseif (!preg_match... 并在其之前创建一个新的if (!$email) {echo 'Email is required';}。 PHP 会按从上到下的顺序处理它们。
    • 我可以再请你写完整的代码吗? :D 呵呵,非常感谢你帮助我处理那个糟糕的联系表格:P
    • 我刚刚在条件块的顶部添加了姓名和电子邮件检查。您可以继续添加这样的支票。尽可能多的elseif 语句。它仍然只会打印出一项。
    • 我已经稍微编辑了你的代码,但现在它可以完美运行了!!!现在告诉我,我能为你做些什么来获得帮助? :D 这里有什么选择可以给你一个推荐或什么的吗? :P
    【解决方案4】:

    我仍然认为可以编辑此代码,因为它应该可以按我的意愿工作......但不知道如何;D

    <?php
     $name = $_POST['name'];
     $email = $_POST['email'];
     $message = $_POST['message'];
     $from = 'From: domain.com'; 
     $to = 'dawid@domain.com'; 
     $subject = 'Message from domain.com';
    
     $body = "From: $name\n E-Mail: $email\n Message:\n $message";
    
       if ($_POST['submit']) {
        if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email))
            {
                   echo '<p class="msg">Wrong email adress!!!</p>';
            }            
    
            if ($name != '' && $email != '') {               
                    if (mail ($to, $subject, $body, $from)) { 
                            echo '<p class="msg">Your message has been sent!</p>';
                    } else { 
                            echo '<p class="msg">Something went wrong, go back and try again!</p>'; 
                           } 
                    } else {
                            echo '<p class="msg">You need to fill in all required fields!!</p>';
                           }
        }
    ?>                                 
    

    也许把这个关于邮件的错误放在其他地方或什么地方?或任何其他如果?帮助

    【讨论】:

      猜你喜欢
      • 2017-01-27
      • 2021-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-15
      相关资源
      最近更新 更多