Я заставляю пользователя сменить пароль при первом входе на сайт в wordpress. В таблице wp_users я добавил это поле status tinyint(1) NOT NULL DEFAULT -1. Когда пользователь входит в систему, я запрашиваю базу данных и, если поле статуса равно -1, показываю форму для изменения пароля следующим образом:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<php
if($_SESSION['status'] == '-1'): ?>

<div class="alteracao">
    <form class="alteracao-signin">       
        <h2 class="alteracao-signin-heading">Tem de alterar a sua senha.</h2>
        <input type="password" class="form-control" name="senha" id="senhaatual"  placeholder="Senha Atual" required=""/>
        <input type="password" class="form-control" name="senha" id="senhanova" placeholder="Nova Senha" required=""/> 
        <input type="password" class="form-control" name="senha" id="senhaconfir" placeholder="Confirmar Senha" required=""/>
        <button class="btn btn-lg btn-primary btn-block" type="button" onclick="inserir_senha();">Alterar</button>   
    </form>
</div> 

<?php endif; ?>

Затем, чтобы изменить пароль в базе данных, я делаю это так:

$senhaatual = $_POST["senhaatual"];
$senhanova = $_POST["senhanova"];
$senhaconfir = $_POST["senhaconfir"];
$status = '1';
$id_util = $_SESSION['usuarioId'];

$senhafinal = password_hash($senhanova, PASSWORD_DEFAULT);

    $query = 'UPDATE wp_inf.inf_users SET user_pass= ?, status= ? WHERE ID = ? '; 
    $conn->prepare($query)->execute([$senhafinal, $status, $id_util]);

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

Вы можете помочь?

0
Pinto 20 Май 2021 в 13:37

1 ответ

Лучший ответ

Там все эти пароли-переменные пустые.

$senhaatual = $_POST["senhaatual"];
$senhanova = $_POST["senhanova"];
$senhaconfir = $_POST["senhaconfir"];

Это потому, что в вашем HTML нет элементов с name="senhaatual", name="senhanova" и name="senhaconfir".

Плюс form не имеет method="post" и по умолчанию отправляется методом GET.

Рабочий код будет

<form method="post">
    ...
    <input type="password" class="form-control" name="senhaatual" id="senhaatual"  placeholder="Senha Atual" required=""/>
    <input type="password" class="form-control" name="senhanova" id="senhanova" placeholder="Nova Senha" required=""/> 
    <input type="password" class="form-control" name="senhaconfir" id="senhaconfir" placeholder="Confirmar Senha" required=""/>
    ...
</form>
1
pavel 20 Май 2021 в 10:53