【问题标题】:Assistance with PHP Form Validation协助 PHP 表单验证
【发布时间】:2013-09-17 16:59:03
【问题描述】:

我一直在开发一个 php 页面以将邮件发送到电子邮件地址,并一直在尝试添加验证。我在某个地方出错了,但我不确定在哪里?该代码应该在按下提交按钮后开始验证。它应该检查一个字段是否为空,然后根据设置的正则表达式进行验证,但是我认为我犯了一个错误。如果表单成功验证,它将发送到我的电子邮件。

<?php 

if(isset($_POST{'submit'} )){

    $f_name=$_POST['first_name'];
    $l_name=$_POST['last_name'];
    $email=$_POST['email']; 
    $message=$_POST['message']; 

    $to = "email@somewhere.com";
    $subject = "A message has been sent from your site";
    $comment = "You have been emailed by: $email \n
                Message Contents: $message \n
                Message sent by $f_name $l_name \n
                Email to respond to: $email" ;

    if (empty($_POST["f_name"]))
        echo "Please enter your first name";
        }
    else{
        if (!preg_match("/^[a-zA-Z ]*$/",$f_name))
            {
        echo "Your first name does not appear to be valid";
            }
    }

    if (empty($_POST["l_name"]))
        echo "Please enter your last name";
        }
    else{
        if (!preg_match("/^[a-zA-Z ]*$/",$f_name))
            {
        echo "Your last name does not appear to be valid.";
            }
    }

    if (empty($_POST["email"]))
        echo "Please enter your email";
        }
    else{
        if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email))
            {
        echo "Your email does not appear to be valid.";
            }
    }

    if (empty($_POST["message"]))
        echo "Please enter a message";
        }

        else{
                    mail($to, $subject, $message);

                    /* Print a message for the user */
                    echo "<b>Your message has been sent successfully, details are as followed:</b><br />";
                    echo "<br /><b>First name: </b>".$f_name;
                    echo "<br /><b>Last name: </b>".$l_name;
                    echo "<br /><b>Email: </b>".$email;
                    echo "<br /><b>Comments: </b>".$message;
                    echo "<br /><br /><b>Thank you for your comment.</b>"; 
    }else{
    ?> 
    <form  action="contact_page.php" method="POST" enctype="multipart/form-data"> 
    <input type="hidden" name="action" value="submit"> 
    First Name:<br> 
    <input name="first_name" type="text" value="" size="30"/><br> 
    Surname:<br>
    <input name="last_name" type="text" value="" size="30"/><br> 
    Your email:<br> 
    <input name="email" type="text" value="" size="30"/><br> 
    Your message:<br> 
    <textarea name="message" rows="7" cols="30"></textarea><br> 
    <input type="submit" value="Send email" name="submit"/> 
    <input type="reset" value="Reset Form">
    </form> 
    <?php 




?>

【问题讨论】:

  • “但是我认为我犯了一个错误”。好吧,是什么让你这么想?
  • 您的脚本中有很多错误。检查if-else 是否阻塞。
  • 此外,此表单需要针对 MySQL 注入以及回显后的 exit() 工作,除非您打算一次显示所有错误。
  • 当您单击提交时,会出现 PHP 错误消息。解析错误:语法错误,意外'}。
  • 看,这是我的想法,但我有点困惑,我发现很难检查空白和验证。感谢所有 cmets。

标签: php regex forms validation email


【解决方案1】:

你不是到处爆发,我相信问题出在

if (empty($_POST["message"])){
    echo "Please enter a message";
    }else{
                mail($to, $subject, $message);

                /* Print a message for the user */
                echo "<b>Your message has been sent successfully, details are as followed:</b><br />";
                echo "<br /><b>First name: </b>".$f_name;
                echo "<br /><b>Last name: </b>".$l_name;
                echo "<br /><b>Email: </b>".$email;
                echo "<br /><b>Comments: </b>".$message;
                echo "<br /><br /><b>Thank you for your comment.</b>"; 
}

开始:按照你的花括号,我认为你已经离开了一些,但最终,你验证的方式使它成为除了消息之外的所有内容都可以是空白的。因此,您的验证器只需检查消息块并执行电子邮件。

我会让你自己轻松一些。

<div id="message">
<?php
if ( isset($_POST['first_name']) || isset($_POST['last_name') || [ETC.]){
     echo("I'm sorry, but all fields must be filled in.");
}else{
     mail($to, $subject, $message);

     /* Print a message for the user */
     echo "<b>Your message has been sent successfully, details are as followed:</b><br />";
     echo "<br /><b>First name: </b>".$f_name;
     echo "<br /><b>Last name: </b>".$l_name;
     echo "<br /><b>Email: </b>".$email;
     echo "<br /><b>Comments: </b>".$message;
     echo "<br /><br /><b>Thank you for your comment.</b>";
}
?>
</div>

【讨论】:

  • 看来我也是个打字慢的人。
  • 我明白了,这样会不会让它在使用时不那么臃肿,或者允许您在不列出所有内容的情况下检查它们?
  • 只是不那么臃肿,如果您比较所有字段,则可以更轻松地阅读。从长远来看,两个 IF 语句有助于。您甚至可以包含一些 CSS 来使 div 变为绿色或红色,具体取决于它们是否通过了您的测试。
【解决方案2】:

我认为您的意思是 if(isset($_POST['action'])) 而不是 if(isset($_POST{'submit'} ))

<input type="hidden" name="action" value="submit">

当提交表单时,此输入将创建一个名为 action 和值 submit 的 POST 字段。您可以使用它在较高级别更改程序流程,但在使用之前仍需要使用isset() 函数检查其他字段是否存在。

如果$_POST['action'] 存在但$_POST['first_name'] 不存在,您的脚本当前会发出通知。

您还有相当数量的额外} 会导致语法错误。反向缩进使发现这些错误变得更加困难。

【讨论】:

    猜你喜欢
    • 2023-04-06
    • 2016-12-09
    • 1970-01-01
    • 2014-07-26
    • 2012-04-30
    • 1970-01-01
    • 2012-02-13
    • 1970-01-01
    相关资源
    最近更新 更多