我强迫用户在第一次在 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 :(得分:1)
所有这些密码变量都是空的。
$senhaatual = $_POST["senhaatual"];
$senhanova = $_POST["senhanova"];
$senhaconfir = $_POST["senhaconfir"];
这是因为您的 HTML 中没有包含 name="senhaatual"
、name="senhanova"
和 name="senhaconfir"
的元素。
Plus 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>