php验证显示用户名错误,但不显示密码错误

时间:2016-03-17 19:15:05

标签: php validation

我有一个PHP登录系统,如果用户名或密码字段未填写,则会显示错误。我的问题是,如果密码字段没有填写,则错误不会显示并直接跳到数据库连接。

如果输入字段未填写,则会正确显示用户名错误。

这是我的代码:

     <?php
    if(isset($_POST['submit'])) {

        $username = $_POST['username'];
        $password = ($_POST['password']);

        if(empty($username)) {
            $errorusername = '<p>enter a username.</p>';
        }else{

            if(empty($password)) {
                $errorpassword = '<p>enter a password.</p>';
            }else{

               // bla bla bla checks if username and password is correct (removed from script)
               }else{
                    echo "Username or password is invalid.";
               }
          }
     }

    ?>

<form method="post">
    <input type="text" placeholder="Username" name="username">
    <?php echo $errorusername; ?>
    <input type="password" placeholder="Password" name="password">
    <?php echo $errorpassword; ?>
    <input type="submit" name="submit">
    </form>

编辑:缩进代码,帮助OP可视化问题所在。

1 个答案:

答案 0 :(得分:1)

正如我在评论和其他人中所述,您的if/else结构已关闭。

你现在的代码应该抛弃这个解析错误,因为有2个嵌套的else

  

解析错误:语法错误,第16行的/path/to/file.php中出现意外的'else'(T_ELSE)

如果要使其工作,请使用以下命令。很明显,您正在查看密码是否有效,并且没有包含任何内容来支持该问题。

因此,我使用正确的if/else结构提交以下内容。

你可以填写其余部分。

<?php
    if(isset($_POST['submit'])) {

        $username = $_POST['username'];
        $password = ($_POST['password']);

        if(empty($username)) {
            $errorusername = '<p>enter a username.</p>';
        }
        else{
        // do something here

    echo "Name entered.";
        }

            if(empty($password)) {
                $errorpassword = '<p>enter a password.</p>';
            }
            else{
            // do something here

        echo "Password entered";

            }

     }

    ?>


<form method="post">
    <input type="text" placeholder="Username" name="username">
    <?php echo $errorusername; ?>
    <input type="password" placeholder="Password" name="password">
    <?php echo $errorpassword; ?>
    <input type="submit" name="submit">
    </form>

修改

为避免获得未定义的变量通知,请对变量使用三元运算符:

<form method="post">
    <input type="text" placeholder="Username" name="username">
    <?php echo $errorusername = !empty($errorusername) ? $errorusername : ''; ?>
    <input type="password" placeholder="Password" name="password">
    <?php echo $errorpassword = !empty($errorpassword) ? $errorpassword : ''; ?>
    <input type="submit" name="submit">
</form>

或者,使用预设检查来匹配用户名/密码:

<?php

    if(isset($_POST['submit'])) {

        $username = $_POST['username'];
        $password = $_POST['password'];

        $validuser = "john";
        $validpass = "pass";

        if(empty($username)) {
            $errorusername = '<p>enter a username.</p>';
        }
        else{
        // do something here

            echo "Name entered.<br>";
        }

            if(empty($password)) {
                $errorpassword = '<p>enter a password.</p>';
            }
            else{
            // do something here

                echo "Password entered.<br>";

            }

        if ( (!empty($username) && $username == $validuser) 
                && (!empty($password) && $password == $validpass) )  {

                echo "<br><b>Passed.</b>";
        }
        else { echo "Invalid, try again."; }

     }

?>

<form method="post">
    <input type="text" placeholder="Username" name="username">
    <?php echo $errorusername = !empty($errorusername) ? $errorusername : ''; ?>
    <input type="password" placeholder="Password" name="password">
    <?php echo $errorpassword = !empty($errorpassword) ? $errorpassword : ''; ?>
    <input type="submit" name="submit">
</form>