всем привет. возникла небольшая проблема, подскажите, пожалуйста, как исправить. пишу форму смены пароля, но не появляются ошибки и пароль не меняется. подскажите, пожалуйста, что не так
if(isset($data['do_change'])) {
$user = R::findOne('users', 'login = ?', array($data['login']));
$errors = array();
if($user){
if(password_verify($data['old_password'], $user->password)) {
// change here
if($data['new_password_1'] == '') {
$errors[] = "Введите новый пароль!";
}
if($data['new_password_2'] != $data['new_password_1']) {
$errors[] = 'Повторный пароль введён неверно!';
}
if(empty($errors)) {
$user->password = password_hash($data['new_password_1'], PASSWORD_DEFAULT);
echo '<div id="success" style="color: green;">Пароль успешно сменён!</div><hr>';
} else {
echo '<div id="errors" style="color: red;">' . array_shift($errors) . '</div><hr>';
}
} else {
$errors[] = "Старый пароль введён неверно";
}
}
if(!empty($errors)) {
echo '<div id="errors" style="color: red;">' . array_shift($errors) . '</div><hr>';
}
}
Для начала убедитесь что у вас показываются ошибки php, а не тот array error который вы создаете.
Добавьте в шапке файла:
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
Далее я бы обратил внимание на три места в вашем коде:
if($user){
Вардампните что-то после этой строки или запишите в файл, чтобы убедится что пользователь определяется и скрипт это условие обрабатывает.
if($user){
var_dump($data['old_password']); // вардамп старого пароля.
Следующее место:
if(password_verify($data['old_password'], $user->password)) {
password_verify использует сравнение пароля хешу. Т.е. в $data['old_password']
должен быть пароль в виде 1111, а в $user->password
закодированная алгоритмом строка. Выведите и то, и то, убедитесь что они соответствуют друг другу.
Вардампните перед этим условием:
var_dump($data['old_password']);
var_dump($user->password);
if(password_verify($data['old_password'], $user->password)) {
echo "соответствуют";
Последнее место на которое стоит обратить внимание:
if(empty($errors)) {
$user->password = password_hash($data['new_password_1'], PASSWORD_DEFAULT);
Я не уверен что за фреймворк/CMS вы используете, но у вас точно так должен записываться новый пароль в БД?
Похоже что здесь просто присваивается к $user->password
хеш нового пароля.
Соответственно как только скрипт заканчивает обработку никаких записей куда-либо не происходит. Полагаю что данные вы храните в БД, а значит нужно через SQL произвести UPDATE значения пароля пользователя. Возможно в виде какого-то класса или обработчика в соответствии с вашей CMS/фреймворком.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
В контроллере сделал импорт модели $this->load->model('catalog/product');, также есть массив данных товара, примерно такой:
Платёжная система https://payeercom предоставляет возможность подключить Мерчант, система работает, но, не работают многие вещи из PHP7 session как в пример,...
В чем здесь ошибка? $update= $conn->query("UPDATE 'accounts' SET password=REPLACE(password,'%$2y$10$%','%$2a$10$%') where password like '%$2y$10$%'");