2016-11-30 85 views
0

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

<?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> 
+0

并且'var_dump($ _ POST ['login'])'显示什么? –

+1

'isset'和'empty'有点矫枉过正[看手册](http://php.net/manual/en/function.empty.php) – RiggsFolly

+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'; 
     } 
    } 
} 
0

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

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