0

при проверке пароля зарегистрированного пользователя возникает ошибка-пароль неверный, хотя ввожу его корректно. Просьба помочь с кодом проверки хэша пароля, думаю ошибка в нем, но не могу найти где именно. Код файла логина и файла регистрации прилагаю.

Регистрация
<?php

require_once "config.php"; require_once "session.php";

if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST['submit'])) {

$fullname = trim($_POST['name']);
$email = trim($_POST['email']);
$password = trim($_POST['password']);
$confirm_password = trim($_POST[&quot;confirm_password&quot;]);
$password_hash = password_hash($password, PASSWORD_BCRYPT);

if($query = $db-&gt;prepare(&quot;SELECT * FROM users WHERE email = ?&quot;)) {
    $error = '';
    // Bind parameters (s = string, i = int, b = blob, etc), in our case the username is a string so we use &quot;s&quot;
$query-&gt;bind_param('s', $email);
$query-&gt;execute();
// Store the result so we can check if the account exists in the database.
$query-&gt;store_result();
    if ($query-&gt;num_rows &gt; 0) {
        $error .= '&lt;p class=&quot;error&quot;&gt;The email address is already registered!&lt;/p&gt;';
    } else {
        // Validate password
        if (strlen($password ) &lt; 6) {
            $error .= '&lt;p class=&quot;error&quot;&gt;Password must have atleast 6 characters.&lt;/p&gt;';
        }

        // Validate confirm password
        if (empty($confirm_password)) {
            $error .= '&lt;p class=&quot;error&quot;&gt;Please enter confirm password.&lt;/p&gt;';
        } else {
            if (empty($error) &amp;&amp; ($password != $confirm_password)) {
                $error .= '&lt;p class=&quot;error&quot;&gt;Password did not match.&lt;/p&gt;';
            }
        }
        if (empty($error) ) {
            $insertQuery = $db-&gt;prepare(&quot;INSERT INTO users (name, email, password) VALUES (?, ?, ?);&quot;);
            $insertQuery-&gt;bind_param(&quot;sss&quot;, $fullname, $email, $password_hash);
            $result = $insertQuery-&gt;execute();
            if ($result) {
                $error .= '&lt;p class=&quot;success&quot;&gt;Your registration was successful!&lt;/p&gt;';
            } else {
                $error .= '&lt;p class=&quot;error&quot;&gt;Something went wrong!&lt;/p&gt;';
            }
        }
    }
}
$query-&gt;close();
$insertQuery-&gt;close();
// Close DB connection
mysqli_close($db);

} ?>

Логин

<?php

require_once "config.php"; require_once "session.php";

$error = ''; if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST['submit'])) {

$email = trim($_POST['email']);
$password = trim($_POST['password']);

// validate if email is empty
if (empty($email)) {
    $error .= '&lt;p class=&quot;error&quot;&gt;Please enter email.&lt;/p&gt;';
}

// validate if password is empty
if (empty($password)) {
    $error .= '&lt;p class=&quot;error&quot;&gt;Please enter your password.&lt;/p&gt;';
}

if (empty($error)) {
    if($query = $db-&gt;prepare(&quot;SELECT * FROM users WHERE email = ?&quot;)) {
        $query-&gt;bind_param('s', $email);
        $query-&gt;execute();
        $row = $query-&gt;fetch();
        if ($row) {
            if (password_verify($password, $row['password'])) {
                $_SESSION[&quot;userid&quot;] = $row['id'];
                $_SESSION[&quot;user&quot;] = $row;

                // Redirect the user to welcome page
                header(&quot;location: welcome.php&quot;);
                exit;
            } else {
                $error .= '&lt;p class=&quot;error&quot;&gt;The password is not valid.&lt;/p&gt;';
            }
        } else {
            $error .= '&lt;p class=&quot;error&quot;&gt;No User exist with that email address.&lt;/p&gt;';
        }
    }
    $query-&gt;close();
}
// Close connection
mysqli_close($db);

} ?>

  • @Алексей Шиманский Код проверял на валидаторе, ошибок нет. Что-то не так с самим составом кода. – EvgeniyR1987 Jan 10 '23 at 07:58
  • На каком валидаторе? Есть ещё отладка........ рабочий инструмент – Алексей Шиманский Jan 10 '23 at 07:59
  • $query->fetch() возвращает не то что ты ожидаешь. Мануал здесь – u_mulder Jan 10 '23 at 08:07
  • @u_mulder Подскажите как поправить, пожалуйста. – EvgeniyR1987 Jan 10 '23 at 08:10
  • @u_mulder Спасибо, но к сожалению так и не получается исправить. – EvgeniyR1987 Jan 10 '23 at 11:54
  • @АлексейШиманский, если у меня php не на компе, а на хостинге только, как дебажить? Я новичок в php, буду признателен если подскажите что не так с кодом. – EvgeniyR1987 Jan 10 '23 at 17:57
  • @EvgeniyR1987 вообще, как минимум на хостинге есть логи и надо смотреть туда.... Во-вторых - прежде чем лить на хост - надо всё отточить локально.... .. Если локально всё было идеально, то скорее всего разница с хостом есть.. Как правило ошибки в логах на это укажут..... А так, если логов не хватает и нужно прям дебажить - поищите удалённая отладка php phpstorm к примеру. То есть сама процедура тоже реальна – Алексей Шиманский Jan 10 '23 at 18:06
  • @u-mulder, Вы же знаете в чем причина, поделитесь пожалуйста. – EvgeniyR1987 Jan 11 '23 at 07:51

0 Answers0