Я создаю ограниченную область, но у меня есть некоторые проблемы с аутентификацией пароля. Система не распознает пароль, хранящийся в базе данныхОшибка при аутентификации. Пароль не распознается
шаг за шагом. Новый пользователь:
$userName = $_POST['txtUserName'];
$password = $_POST['txtPassword'];
$sql = "INSERT INTO tbl_user (user_name, user_password, user_regdate)
VALUES ('$userName', PASSWORD('$password'), NOW())";
Это работает. Я новый пользователь хранится в базе данных
База данных: MySQL v5.6
`user_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`user_name` varchar(20) NOT NULL DEFAULT '',
`user_password` varchar(32) NOT NULL DEFAULT '',
ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;
Так я пытаюсь войти в (от формы входа):
// if we found an error save the error message in this variable
$errorMessage = '';
$userName = $_POST['txtUserName'];
$password = $_POST['txtPassword'];
// first, make sure the username & password are not empty
if ($userName == '') {
$errorMessage = 'You must enter your User Name';
} else if ($password == '') {
$errorMessage = 'You must enter your password';
} else {
// check the database and see if the username and password combo do match
$sql = "SELECT user_id
FROM tbl_user
WHERE user_name = '$userName' AND user_password = PASSWORD('$password')";
$result = dbQuery($sql);
if (dbNumRows($result) == 1) {
$row = dbFetchAssoc($result);
$_SESSION['plaincart_user_id'] = $row['user_id'];
// log the time when the user last login
$sql = "UPDATE tbl_user
SET user_last_login = NOW()
WHERE user_id = '{$row['user_id']}'";
dbQuery($sql);
// now that the user is verified we move on to the next page
// if the user had been in the admin pages before we move to
// the last page visited
if (isset($_SESSION['login_return_url'])) {
header('Location: ' . $_SESSION['login_return_url']);
exit;
} else {
header('Location: index.php');
exit;
}
} else {
$errorMessage = 'Username or password wrong';
}
}
return $errorMessage;
}
Кажется, что Безразлично» t распознает функцию пароля(), потому что, если я пишу вручную в пароле базы данных, значение не зашифровано, оно работает ...
Убедитесь, что длина вашей колонки для пароля достаточно долго. Также проверьте, все ли элементы формы содержат атрибуты имени и что сеанс действительно запущен; видя, что вы используете сеансы. Проверьте наличие ошибок со всех сторон PHP/SQL. –
Из документации mysql: 'Столбец Password должен быть достаточно широким для хранения длинных хэшей (41 байт) .' – vaso123
*« Кажется, что не распознает функцию пароля() »* - Это противоречит тому, что вы сказали *« Это работает. У меня есть новый пользователь, который хранится в базе данных "*. --- * "если я пишу вручную в пароле базы данных, это значение не зашифровано, оно работает." * Проверьте имена элементов формы. ** Еще лучше, разместите свою HTML-форму. ** Добавьте отчет об ошибках в начало вашего файла (ов) сразу после открытия тега Php' 'error_reporting (E_ALL); ini_set ('display_errors', 1); 'посмотрите, не даст ли что-либо. –