验证登录数据PDO PHP


Validating login data PDO PHP

我试图将我的代码从mysql_connect更改为PDO,我遇到了一些问题。我是PHP的新手,我被告知mysql_connect是旧的,所以这里是我的代码。我似乎无法验证用户。即使输入错误的用户,也不会输出无效的用户。

     $_GET['errorCode'];
        $errors = array(
      1 => 'Invalid User',
      2 => 'Incorrect Password');
      if(isset($_GET['errorCode'])){
      $code = $_GET['errorCode'];
      print isset($errors[$code]) ? $errors[$code] : 'Unknown error';
    }

         if($_SERVER['REQUEST_METHOD']== 'POST'){

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


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

              $stmt = $dbh->prepare("SELECT password, salt FROM user WHERE username = :user_name");
         $stmt->execute(array(':user_name' => "$username"));
            $stmt->bindParam(':user_name', $username, PDO::PARAM_STR);

        if(!$stmt->rowCount() > 0)
       {
        header('Location: index.php?errorCode=1');
        exit;
    }
        $result = $stmt->fetch(PDO::FETCH_ASSOC);
    $hash = hash('sha256', $result['salt'] . hash('sha256', $password) );
if($hash != $result['password']) //incorrect password
    {
      header('Location: index.php?errorCode=2');
       exit;
        }
        else
        {
            validateUser(); //sets the session data for this user
            Header("Location: index.php");
        exit;
        } 
        }
           }

您忘记执行语句了—您只需要在绑定参数后运行$stmt->execute();

—编辑—
删除一行:$userData = $dbh->query($stmt);;您的行将被获取到$result与您当前的代码

除了缺失的execute语句,这是永远不会工作的:

Header("Location: index.php");
$errmessage = "Invalid user";
print "<p id'"errmessage'"> $errmessage </p>";
exit;

一旦你重定向,浏览器将加载index.php,所以你永远不会看到你的错误信息。您应该重定向显示错误消息,但不能同时显示错误消息。