gavin_daCEO Ответов: 2

Как я могу получить мои инструкции Select для работы ?


Пожалуйста, мне нужна только небольшая помощь, я не понимаю, почему мой оператор select не работает, я могу войти даже с недействительными учетными данными для входа. я хешировал свой пароль на странице регистрации .
$Query = "SELECT *password FROM users WHERE username = ?";
$statement = $conn->prepare($Query);
$statement->bindValue(':username', $username);
$statement->выполнить();
$user = $statement->fetch(PDO::FETCH_ASSOC);
$RowCount = $statement->rowCount();

} catch (PDOerrorInfo $e){

die('QuerySCD Error '.$e->getMessage());

}
это код, который я использовал для хэширования своего пароля
$password =password_hash($_POST['password'], PASSWORD_DEFAULT);


Что я уже пробовал:

кодовая перебранка, я проверил учебники

2 Ответов

Рейтинг:
2

Richard MacCutchan

$Query = "SELECT *password FROM users WHERE username = ?";

Почему перед ним стоит звездочка password?


gavin_daCEO

Чтобы рассказать код и внести некоторые коррективы, чтобы звездочка была там, и я не изменил оператор запроса.

gavin_daCEO

я удалил звездочку, но ошибка все еще сохраняется

Richard MacCutchan

Какая ошибка? Пожалуйста, предоставьте надлежащую полную информацию о вашей проблеме.

gavin_daCEO

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

Richard MacCutchan

Когда мы просим о полной детализации проблемы, говоря: "это не работает" он ничего не говорит нам о том, в чем и где может заключаться проблема.

Рейтинг:
1

Chris Copeland

Во-первых, как получилось, что вы используете username = ? но потом попытался это сделать bindValue(':username', $username);- Я бы ожидал, что вы будете использовать bindValue(1, $username); потому что в вашем запросе нет именованного параметра.

Во-вторых, если проблема заключается в том, что он позволяет вам войти в систему независимо от того, какой пароль вы вводите, вы опустили часть кода, которая проверяет правильность пароля. Весь код, который вы предоставили, - это получить всех подходящих пользователей и получить количество строк, и это все, что он делает? Я ожидал бы увидеть какой-то код, который проверяет, является ли количество строк единицей, и сравнивает отправленные и сохраненные пароли.


gavin_daCEO

это полный код для страницы входа в систему


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

$имя пользователя = функция TRIM($_POST, где['имя пользователя']);

пробовать{

$Query = "SELECT * password FROM users WHERE username = :username";
$statement = $conn->prepare($Query);
$statement->bindValue(':username', $username);
$statement->выполнить();
$user = $statement->fetch(PDO::FETCH_ASSOC);
$RowCount = $statement->rowCount();

} catch (PDOerrorInfo $e){

die('QuerySCD Error '.$e->getMessage());

}

if( $RowCount == 0 ){

$_SESSION['message'] = "ошибка!";

$message = "неверные учетные данные для входа в систему";

} else{ // пользователь существует

если( функцию password_verify($_POST, где['пароль'], $пользователь['пароль'])){

$_SESSION['логин'] = $пользователь['имя пользователя'];
$_SESSION['активный'] = $user['активный'];

$_SESSION['logged_in'] = true;

заголовок("location: studentportal.php?onions=no&pickles=yes");

} еще {

$_SESSION['message'] = "ошибка!";
//заголовок("место нахождения: error-login.php");
$message = "неверные учетные данные для входа в систему";

}
}
}

$conn = NULL;