使用PHP登录网站,使用正确的密码给出“错误的密码”错误

时间:2019-05-22 04:57:16

标签: php html mysql xampp

向YouTube用户“ mmtuts”大喊大叫,因为这基本上是他的教程的副本(至少我学到了东西)(https://www.youtube.com/watch?v=LC9GaXkdxF8)。

这是我第一次尝试使用具有登录系统的网站。

TL; DR:我遇到了一个问题,即任何用户都无法使用正确的密码(显然该用户被接受,因为我在数据库中找不到错误“ wronguser”又名“ user”,但后来我发现了我的错误)

我正在使用MySQL和Apache(使用XAMPP)运行数据库。我试图重写数据库中的所有名称以及网站上的主要PHP索引(使用模态上的登录输入)。

react-datepicker/dist/react-datepicker-cssmodules.min.css1

寻找答案,并尝试修复至少1小时。抱歉,如果我的帖子违反了我可能不知道的任何规则。我之所以这样做是因为我知道这样的事情总是一个愚蠢的错误。

编辑1:如果需要,我可以提供更多代码。

      mysqli_stmt_bind_param($stmt, "ss", $mailuid, $mailuid);
      mysqli_stmt_execute($stmt);
      $result = mysqli_stmt_get_result($stmt);
      if ($row = mysqli_fetch_assoc($result)) {
        $pwdCheck = password_verify($password, $row['Password']); <!-- CHECKS IF INSERTED PASSWORD = DATABASE PASSWORD FOR INSERTED USER -->
        if ($pwdCheck == false) { <!-- IF PASSWORD DOESN'T MATCH WITH DATABASE PASSWORD FOR INSERTED USER THEN GO TO THIS "WRONG PASSWORD" ERROR PAGE (KEEPS GOING TO THIS PAGE) -->
          header("Location: ../index.php?error=password_errada1"); 
          exit();
    }
    else if($pwdCheck == true) { <!-- IF THE PASSWORD IS CORRECT THEN OPEN SESSION FOR THE INSERTED USER -->
      session_start();
      $_SESSION['userId'] = $row['idAluno'];
      $_SESSION['userUid'] = $row['NumeroAluno'];
      $_SESSION['userPrimeiroNome'] = $row['PrimeiroNome'];
      $_SESSION['userUltimoNome'] = $row['UltimoNome'];
      $_SESSION['userAno'] = $row['Ano'];
      $_SESSION['userTurma'] = $row['Turma'];
      $_SESSION['userRequisitou'] = $row['Requisitou'];

      header("Location: ../index.php?login=login_sucesso");
      exit();
    }

dbStructure代码:

创建表$servername = "localhost"; $dBUsername = "root"; $dBPassword = ""; $dBName = "loginsystem"; $conn = mysqli_connect($servername, $dBUsername, $dBPassword, $dBName); if (!$conn) { die("Erro de conexão: ".mysqli_connect_error()); }(   alunos int(11)NOT NULL,   idAluno varchar(7)NOT NULL,   NumeroAluno varchar(50)NOT NULL,   Password varchar(50)NOT NULL,   Email varchar(25)NOT NULL,   PrimeiroNome varchar(25)NOT NULL,   UltimoNome int(2)NOT NULL,   Ano varchar(8)NOT NULL,   Turma int(1)非空默认值'0' )ENGINE = InnoDB DEFAULT CHARSET = latin1;

2 个答案:

答案 0 :(得分:0)

您的密码没有被散列。

尝试替换代码

if ($pwdCheck == false)

使用

if($password != $row['Password'])

如果可行,请重新检查您的密码被散列的脚本。

谢谢。

编辑1 :请同时更改else(如果有)部分,然后再次检查。我没有看到其他错误。

替换

else if($pwdCheck == true)

使用

else if($password == $row['Password'])

这应该可以解决您的问题。

答案 1 :(得分:0)

我是使用数据库页面手动保存密码的,显然保存的密码具有纯文本且没有被散列,因此,当我尝试使用PHP代码登录时,插入的密码将被散列并且散列的密码得到比较纯文本密码。

通过创建一个使用哈希密码创建用户的注册来解决此问题,从而使PHP比较“哈希” /“哈希”而不是“哈希-非哈希”。

也可以通过不在任何地方散列密码来解决(不安全,但很容易)。

相关问题