如何使用PHP验证表单,并立即显示所有错误消息?

如何使用PHP验证表单,并立即显示所有错误消息?,php,forms,validation,if-statement,Php,Forms,Validation,If Statement,我有一个用PHP验证的表单,使用了一堆嵌套的if语句。它起作用了,但问题当然是错误消息会一次显示一条。我想让它们一次全部显示出来。因此,我尝试在不使用嵌套条件语句的情况下重写代码。我已经花了至少4个小时尝试,但没有任何效果。有人能给我一些建议吗?这将是非常感谢…而且,我不确定是否有可能写一个if语句,如果条件得到满足,让它不执行任何代码。这就是我的代码目前试图做的事情,我确信这是一个可怕的做法,但我想不出其他方法来做 <?php if($_POST['submit']==

我有一个用PHP验证的表单,使用了一堆嵌套的if语句。它起作用了,但问题当然是错误消息会一次显示一条。我想让它们一次全部显示出来。因此,我尝试在不使用嵌套条件语句的情况下重写代码。我已经花了至少4个小时尝试,但没有任何效果。有人能给我一些建议吗?这将是非常感谢…而且,我不确定是否有可能写一个if语句,如果条件得到满足,让它不执行任何代码。这就是我的代码目前试图做的事情,我确信这是一个可怕的做法,但我想不出其他方法来做

    <?php

    if($_POST['submit']==1)
    {
        //$submit = strip_tags(isset($_POST['submit']));
        $fname =  strip_tags($_POST['fname']);
        $lname = strip_tags($_POST['lname']);
        $usernamereg = strip_tags($_POST['usernamereg']);
        $passwordreg = strip_tags($_POST['passwordreg']);
        $email = strip_tags($_POST['email']);
        $emailcheck = strip_tags($_POST['emailcheck']);
        $date = date("Y-m-d");
        $connect = mysql_connect("localhost","user","password") or die ("There is a problem connecting to the database");
        mysql_select_db("user_db",$connect) or die("Couldn't find the database."); 

        $queryusername = mysql_query("SELECT * FROM users WHERE username = '$usernamereg'");
        $numrowsusername = mysql_num_rows($queryusername);  
        $queryemail = mysql_query("SELECT * FROM users WHERE email = '$email'");
        $numrowsemail = mysql_num_rows($queryemail);

        if($fname&&$lname&&$usernamereg&&$passwordreg&&$email&&$emailcheck)
        {

        }
        else
        {
            $all_fields = 'All fields must be filled in';
        }
        if (strlen($usernamereg)>25||strlen($fname)>25||strlen($lname)>25)
        {
                $length_error = "First name, last name, and username cannot be longer than 25 characters";

        }
        if($numrowsusername = 0)
        {

        }
        else
        {
            $username_error ='username already taken';
        }
        if(strlen($passwordreg)<6)
        {
            $password_error ="Password must be atleast 6 characters";

        }
        else
        {
            //some form of password encryption
        }
        if($email != $emailcheck)
        {
            $emails_no_match = "Emails don't match";
        }
        if($numrowsemail = 0)
        {

        }
        else
        {
            $email_in_use_error ="This email is already in use";
        }


if(isset($all_fields)||isset($length_error)||isset($username_error)||isset($password_error)||isset($emails_no_match)||isset($email_in_use_error)==1)
            {

            }
            else
            {
                $queryget =mysql_query("INSERT INTO users(date,fname,lname,username,password,email,emailcheck)VALUES('$date','$fname','$lname','$usernamereg','$passwordreg','$email','$emailcheck')");
                echo "You have been registered!";
            }

        }   
        ?>


Here is my form code

    <form action ='' method = 'POST' name ='regform'>
                <table width = '500px'>
                <tr>
                    <td id ="form_title" align ='left'>Sign Up Here</td>    
                </tr>
                <tr>
                    <td id="form_subtitle" align ='left'> 100% Free</td>
                </tr>
                <tr>
                    <td align ='left'><input type ='text' name = 'fname' placeholder = 'First Name' class = 'firstname' /><input type ='text' name='lname' placeholder = 'Last Name' class = 'lastname' /></td>
                </tr>
                <tr>
                    <td></td>
                </tr>
                <tr>
                    <td align ='left'><input type ='text' name = 'usernamereg' placeholder = 'Username' class = 'username2' /></td>
                </tr>
                <tr>
                    <td><?php 
                        if(!empty($username_error)){
                            echo $username_error;
                        }
                    ?></td>
                </tr>
                <tr>
                    <td align ='left'><input type ='password' name='passwordreg' placeholder = 'Password' class = 'password2' /></td>
                </tr>
                <tr>
                    <td><?php
                            if(isset($password_error)){
                            echo $password_error;
                        }
                        ?></td>
                </tr>
                <tr>
                    <td align ='left'><input type ='email' name = 'email' placeholder = 'Email' class = 'email'/></td>
                </tr>
                <tr>
                    <td><?php 
                        if(!empty($emails_no_match)){
                            echo $emails_no_match;
                        }
                    ?></td>
                </tr>
                <tr>
                    <td align ='left'><input type ='email' name = 'emailcheck' placeholder = 'Re-enter Email' class = 'emailcheck'/></td>
                </tr>
                <tr>
                    <td><?php 
                        if(!empty($email_in_use_error)){
                            echo $email_in_use_error;
                        }
                    ?></td>
                </tr>
                <tr>
                    <td><?php 
                        if(!empty($all_fields)){
                            echo $all_fields;
                        }
                    ?> </td>
                </tr>

                <td align='center'><input type = 'submit' name = 'submit' id= 'regbutton' value = 'Register' /></td>
                </form>

您能给我们提供更多的细节(原件)和问题的更好描述吗。这很难理解

然而,在你发布的代码中有一些错误,我想

if($numrowsusername = 0)
这是一项任务。所以,在这种情况下,总是错误的。。。应该是

if ( $numrowsusername == 0 )
与“if($numrowsemail=0)”相同


顺便说一句,是的,如果if语句为true,则可能不执行任何操作。不要把任何东西放在括号之间,或者更好,只放一个括号;介于两者之间,以确保可读性。

您可以将错误放入数组中,然后在出现任何错误时显示其内容

<?php

$errors = array();
if ($_POST['submit'] == 1) {
    //$submit = strip_tags(isset($_POST['submit']));
    $fname =  strip_tags($_POST['fname']);
    $lname = strip_tags($_POST['lname']);
    $usernamereg = strip_tags($_POST['usernamereg']);
    $passwordreg = strip_tags($_POST['passwordreg']);
    $email = strip_tags($_POST['email']);
    $emailcheck = strip_tags($_POST['emailcheck']);
    $date = date("Y-m-d");
    $connect = mysql_connect("localhost","user","password") or die ("There is a problem connecting to the database");
    mysql_select_db("user_db",$connect) or die("Couldn't find the database."); 

    $queryusername = mysql_query("SELECT * FROM users WHERE username = '$usernamereg'");
    $numrowsusername = mysql_num_rows($queryusername);  
    $queryemail = mysql_query("SELECT * FROM users WHERE email = '$email'");
    $numrowsemail = mysql_num_rows($queryemail);

    if (!$fname || !$lname || !$usernamereg || !$passwordreg || !$email || !$emailcheck) {
        $errors[] = 'All fields must be filled in';
    }

    if (strlen($usernamereg) > 25 || strlen($fname) > 25 || strlen($lname) > 25) {
        $errors[] = "First name, last name, and username cannot be longer than 25 characters";

    }

    if ($numrowsusername > 0) {
        $errors[] ='Username already taken';
    }

    if (strlen($passwordreg) < 6) {
        $errors[] = "Password must be atleast 6 characters";
    } else {
        $passwordreg = md5($passwordreg);
    }

    if ($email != $emailcheck) {
        $errors[] = "Emails don't match";
    }

    if ($numrowsemail > 0) {
        $errors[] ="This email is already in use";
    }

    // If no errors occurred, insert the user into the database
    if (count($errors) == 0) {
        $queryget =mysql_query("INSERT INTO users(date,fname,lname,username,password,email,emailcheck)VALUES('$date','$fname','$lname','$usernamereg','$passwordreg','$email','$emailcheck')");
        echo "You have been registered!";
    }

} 
对于字符串,应使用确保变量正确处理,如下所示:

$myStr = (isset($_POST['myStr']) ? mysql_real_escape_string($_POST['myStr']) : null);
因此,
$fname
变量行变为以下内容:

$fname = (isset($_POST['fname']) ? mysql_real_escape_string($_POST['fname']) : null);
对于其余的输入变量,依此类推


理想情况下,您希望使用PDO和准备好的语句,但这超出了这个问题的范围。另外,
mysql_*()
函数已被弃用,可能很快就会在未来的版本中从PHP中删除。建议您改用该库。

我添加了我的表单代码。谢谢你的回复。不要问愚蠢的问题,但是如果我在括号之间放了一个分号,当我的代码执行时,并且条件满足,代码会跳转到代码的下一部分(在我的例子中是另一个if语句)还是停止执行?你可以简单地检查一下,但是是的,它会转到下一个if语句。和@user3407857?所有这些代码都在同一个php源代码中吗?如果您正在构建具有空主体的If语句,那么最好反转逻辑,以便它检查相反的条件,例如
If($numrowsusername==0)
变为
If($numrowsusername>0)
,等等。谢谢两个完整的格式,我现在将尝试反转它们。是的,谢谢你。我将用mysqli函数重写代码。别忘了使用strip_标记更改行!此外,您可能需要检查用户名是否只包含有效字符,以及电子邮件地址是否也有效。有很多问题可以告诉你怎么做。:)目前,即使我的所有验证检查都得到满足,我的表单输入也没有添加到表单中。当我检查提交按钮是否被点击时,这是否与我的第一条if语句有关。您需要将其添加到
/>
前面的每个
输入
字段中:

$myStr = (isset($_POST['myStr']) ? mysql_real_escape_string($_POST['myStr']) : null);
$fname = (isset($_POST['fname']) ? mysql_real_escape_string($_POST['fname']) : null);