isset和!empty始终为登录字段返回true

时间:2016-11-30 20:58:24

标签: php html forms validation if-statement

我试图创建一个可以检查登录字段并验证用户名和密码的php文件(login.php)。目前,它只是使用正则表达式检查用户名。以下是我的代码。我无法触发第二个else子句,似乎isset和!empty总是正确的,即使我可以看到它们在视觉上是空的,就像刷新页面后一样。

<?php 
if (isset($_POST['login']) && !empty($_POST['login'])) {
    if (preg_match('/^[a-z0-9]{6,15}$/i', $_POST['username'])) {
        echo 'set';          
    }
    else {
        echo 'wrong';
    }
} else {
    echo 'required field';
}   
?>

<div id="login"> <!-- Login field with link to registration -->
    <form method="POST" action="login.php">
    <Legend>Login</Legend>
    Username <input type="text" name="username"/>
    Password <input type="password" name="password"/>
    <input type="submit" name="login">
        <div id="register">
            <a href="registration.html">Not a member? Click here to register!</a>
        </div>
    </form>     
</div>

2 个答案:

答案 0 :(得分:1)

我会建议更像这样的东西。首先,检查是否先设置$_POST['login'],这样如果尚未点击提交按钮,则不会检查其他任何内容。然后在其中,验证是否已输入用户名和密码。如果他们有,继续,但你要验证它们。

if (isset($_POST['login'])) {
    if (empty($_POST['username']) || empty($_POST['password'])) {
        echo 'required field';
    } else {
        if (preg_match('/^[a-z0-9]{6,15}$/i', $_POST['username'])) {
            echo 'set';
        }
        else {
            echo 'wrong';
        }
    }
}

答案 1 :(得分:0)

试试这个。只需检查是否有任何POST请求,

if (!empty($_POST)) 
{
  // Your code...
}