如何确保只有未使用的登录名在PHP / mySQL中有效?

时间:2015-12-04 17:10:42

标签: php mysql login

我正在尝试为网站构建一个数据库,允许用户在已创建帐户时登录,或创建帐户然后登录。我目前遇到的问题是我只希望将未使用的用户名添加到数据库中,并使用被拒绝的用户名。我的mySQL查询似乎有效,如果userInput不在集合中,则返回空集。目前,如果您输入任何用户名,无论是否使用,都不会让您进入。 以下是我的代码:

    if($firstName != null && $address != null) 
 {
    $userCheck =$dbh->query("SELECT userID FROM user WHERE userID='$userInput'"); 
            if(!$userCheck)
            { 
                $sql = "INSERT INTO user(firstName, userID, password, address) VALUES ('$firstName', '$userInput', '$password', '$address')"; 
                $dbh->exec($sql);   
                is_password_correct($userInput, $password);
            }   

  } 

基本上......如果前两个字段填充了我们(或不为空),那么查询将运行,如果是空的,则服务器应该接收信息并允许用户访问该页面。

  function is_password_correct($userInput, $password)
{ 
    $dbh = new PDO
    $userInput = $_POST["userID"]; 
    $password = $_POST["password"]; 
    $firstName = $_POST["first"]; 
    $rows =$dbh->query("SELECT password FROM user WHERE userID='$userInput' "); 
    if($rows)
        { 
            foreach ($rows as $row)
                {
                    if($password == $row["password"])
                    { 
                        return TRUE;
                    } 
                }
        }
    return FALSE; 
}

3 个答案:

答案 0 :(得分:1)

你应该使用num_rows,这是Documentation 您还应该在查询中使用引号('$userInput')更改方式 -

  if($firstName != null && $address != null) 
 {
    $userCheck =$dbh->query("SELECT userID FROM user WHERE userID='".$userInput."'"); 
            if($userCheck->num_rows == 0)
            { 
                $sql = "INSERT INTO user(firstName, userID, password, address) VALUES ('".$firstName."', '".$userInput."', '".$password."', '".$address."')"; 
                $dbh->exec($sql);   
                is_password_correct($userInput, $password);
            }   

  }

你提到你正在使用 pdo 所以rowCount()是正确使用pdo的东西 -

    if($firstName != null && $address != null) 
     {
        $userCheck =$dbh->query("SELECT userID FROM user WHERE userID='".$userInput."'"); 
        $count = $userCheck->rowCount();
                if($count == 0)
                { 
                    $sql = "INSERT INTO user(firstName, userID, password, address) VALUES ('".$firstName."', '".$userInput."', '".$password."', '".$address."')"; 
                    $dbh->exec($sql);   
                    is_password_correct($userInput, $password);
                }   

      }

答案 1 :(得分:0)

$ dhb->查询不会仅返回资源的行计数或布尔值false。所以你必须使用fetchColumn计算返回资源中的行数。试试这个。

{
    $userCheck =$dbh->query("SELECT userID FROM user WHERE userID='".$userInput."'");
    $num_rows = $userCheck->fetchColumn; 
    if($num_rows == 0)
    { 
        $sql = "INSERT INTO user(firstName, userID, password, address) VALUES ('$firstName', '$userInput', '$password', '$address')"; 
        $dbh->exec($sql);   
        is_password_correct($userInput, $password);
    }   

} 

答案 2 :(得分:-1)

正如Mark Ba​​ker所说,尝试这样的事情:

 if($firstName != null && $address != null) 
 {
    $userCheck =$dbh->query("SELECT userID FROM user WHERE userID='$userInput'"); 
            if(!mysql_num_rows($userCheck))
            { 
                $sql = "INSERT INTO user(firstName, userID, password, address) VALUES ('$firstName', '$userInput', '$password', '$address')"; 
                $dbh->exec($sql);   
                is_password_correct($userInput, $password);
            }   

  }