php
  • pdo
  • 2013-11-10 35 views -3 likes 
    -3

    我想知道我的下面的代码有什么问题。它所做的是检查我的数据库中是否存在用户,如果它存在,则检查它是否被禁用,然后检查密码输入是否正确。无论如何,我有一个小问题,我有一个帐户在我的数据库下的'用户'和用户名'admin',但当我尝试登录时,它显示:用户管理不存在用户不存在问题

    $check = $dbh->prepare("SELECT * FROM users WHERE username = '$username'"); 
    var_dump($check); 
    $check_array = $check->fetch(); 
    
    if ($check_array == 0){ 
        var_dump($check_array); 
        $error.= 'The user <strong>'.$username.'</strong> does not exist.<br>'; 
    }else{ 
        $r = ($check_array); 
        if ($r["banned"] == '1') { 
         $error.= 'You are currently banned, you can not log in.<br>'; 
        }else{ 
         $r = ($check_array); 
         if($r["password"] !== $password){ 
          $error.= 'The password you entered is incorrect.<br>'; 
         }else{ 
    

    这是在PHP编写,PDO

    +0

    从哪里得到这个'$ r [“禁止”]来自 –

    +0

    'var_dump'的结果是什么? – Lion

    +0

    @ Mr.Alien $ r [“banned”]来自$ r =($ check_array);这意味着要高于$ r [“禁止”],我刚刚解决了这个问题 – user2963430

    回答

    2

    我相信这里的关键问题是,你从来没有执行的SQL语句,你只是准备了。然后提取会失败,并且0将truthy设置为false,这是fetch()返回的内容。请添加$ check-> execute();在你的第一个var_dump($ check)之前;并让我们知道。

    也是重要的:

    请注意,你不应该在变量直接传递给准备语句,并应改用bind_param方法

    $check = $dbh->prepare("SELECT * FROM users WHERE username = ?"); 
    $check->bind_param(1, $username, PDO::PARAM_STR); 
    $check->execute(); 
    

    这是消毒用户的更安全的方法输入并应该支撑漏洞。

    +0

    谢谢,完美的作品。我现在可以登录,只需要将其他部分的代码修复一下就可以了。 – user2963430

    相关问题