Don_Donald
@Don_Donald

В чем ошибка PDO?

Не могу разобраться что я делаю не так.
Есть в БД например логин admin и пароль admin
В форме ввожу логин admin и пароль admin
include_once 'connectDB.php';
    
if (isset($_POST['entry'])) {
    $login = $_POST['login'];    
    $password = password_hash($_POST['password'], PASSWORD_BCRYPT, ['cost' => 12]);
    $sql = $pdo->prepare("SELECT login, password FROM dataname WHERE login=? AND password=?");
    $sql->execute([$login, $password]);
    $data = $sql->fetch();

    if ($data['login'] == $login and $data['password'] == $password) {        
        echo 'YES';
    }
    else {
        echo 'NO';
    }
}

и он мне пишет что такого нет, как я понимаю что что то не совпадает.
а если я убираю пароль то логины совпадают
include_once 'connectDB.php';
    
if (isset($_POST['entry'])) {
    $login = $_POST['login'];    
    $password = password_hash($_POST['password'], PASSWORD_BCRYPT, ['cost' => 12]);
    $sql = $pdo->prepare("SELECT login FROM dataname WHERE login=?");
    $sql->execute([$login]);
    $data = $sql->fetch();

    if ($data['login'] == $login) {        
        echo 'YES';
    }
    else {
        echo 'NO';
    }
}


Регистрация
include_once 'connectDB.php';
if (isset($_POST['go'])) {
    $login = $_POST['login'];
    $password = password_hash($_POST['password'], PASSWORD_BCRYPT, ['cost' => 12]);
    if(!empty($login)) {
        $sql = $pdo->prepare("INSERT INTO dataname(login, password) VALUES (?, ?)");
        $sql->execute([$login, $password]);           
        echo "YES" ;
    }
    else {
        echo "NO";
    }
}
?>


Вход
include_once 'connectDB.php';
    
if (isset($_POST['entry'])) {
    $login = $_POST['login'];    
    $password = password_hash($_POST['password'], PASSWORD_BCRYPT, ['cost' => 12]);
    $sql = $pdo->prepare("SELECT login, password FROM dataname WHERE login=? AND password=?");
    $sql->execute([$login, $password]);
    $data = $sql->fetch();

    if ($data['login'] == $login and $data['password'] == $password) {        
        echo 'YES';
    }
    else {
        echo 'NO';
    }
}
  • Вопрос задан
  • 245 просмотров
Решения вопроса 1
BuriK666
@BuriK666
Компьютерный псих
password_hash генерирует каждый раз разные строки. используйте password_verify для проверки.

include_once 'connectDB.php';
    
if (isset($_POST['entry'])) {
    $login = $_POST['login'];    
    $sql = $pdo->prepare("SELECT login, password FROM dataname WHERE login=?");
    $sql->execute([$login]);
    $data = $sql->fetch();

    if (password_verify($_POST['password'], $data['password'])) {        
        echo 'YES';
    }
    else {
        echo 'NO';
    }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы