PHP if-else总是在mysql_num_rows等于1后显示else

时间:2014-08-09 21:05:57

标签: php mysql forms login

我有一个名为login的表单,提交时将字段usernamepassword发送到MySQL数据库以检查它们是否匹配。我想echo在他们不匹配时出错。

以下是表单上方的PHP代码:

if (!isset($_POST['login'])) {
    mysql_connect (...);
    mysql_select_db (...);

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

    $username = stripslashes($username);
    $password = stripslashes($password);
    $username = mysql_real_escape_string($username);
    $password = mysql_real_escape_string($password);

    $sql = "SELECT * FROM members WHERE username='$username' and password='$password'";

    $result = mysql_query($sql);

    if (mysql_num_rows($result) == 1) {
        session_register("username"); 
        session_register("password"); 
        header("Location: $location");
    }
    else {
        echo "Wrong username or password.";
    }

    mysql_close();
}

形式:

<form name="login" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    <input name="location" type="hidden" value="<?php echo $_GET['location']; ?>"/>
    <input name="username" type="text" value="Username" onclick="this.value=''"/>
    <input name="password" type="text" value="Password" onfocus="this.value='';this.type='password'"/>
    <input name="submit" type="submit" value="Login"/>
</form>

如果我使用正确的用户名和密码提交表单,则代码可以正常运行。

问题是即使在提交表单之前始终存在错误消息。有什么想法吗?

3 个答案:

答案 0 :(得分:3)

将第一行更改为:

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

答案 1 :(得分:3)

if (!isset($_POST['login'])) 

删除感叹号。所以if (isset($_POST['login']))

答案 2 :(得分:0)

$ _ POST ['login']很可能未在您的脚本中设置。上述解决方案将修复您的第一个错误。但是,如果未设置$ _POST ['login'],您将无法登录。

我建议你检查一下你将在脚本中使用的帖子变量:

if(isset($_POST['username']) && isset($_POST['password']) && isset($_POST['location'])) {
// your code
}