当用户尝试在我的网站上编辑密码时,有3个标签,1个用于旧密码,另外2个用于新密码和新密码的确认。现在,当我正确地编辑它时,一切都按预期进行,但如果新密码和确认密码不同,那么一切都很好,但事实并非如此。我尝试了一些解决方案,但我无法修复它。
Php Code
<?php
session_start();
if(isset($_SESSION['loggedin']) && $_SESSION['loggedin'] == true){
}
else{
header("location: index.php");
}
require_once ('ligaDB.php');
if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST['send'])) {
require_once ('ligaDB.php'); // Connect to the db.
$email = $con->real_escape_string(trim($_POST['email']));
$p = $con->real_escape_string(trim($_POST['pass']));
$id = $_SESSION['user_id'];
这是我想要做的,如果它们不相同但它不起作用。
if ($_POST['pass1'] != $_POST['pass2']) {
$frase = "A sua senha não foi atualizada.";
header("location: mudar_passe.php?erro=$frase");
} else {
$np = $con->real_escape_string(trim($_POST['pass1']));
}
// verifica se a senha antiga está correta
$sql = "SELECT user_id FROM utilizadores WHERE (user_id='$id' AND user_senha=SHA1('$p') )";
$result = $con->query($sql);
if ($result->num_rows == 1) { // a senha está correta
$row = $result->fetch_array();
// atualiza a senha com o novo valor inserido
$q = "UPDATE utilizadores SET user_senha=SHA1('$np') WHERE user_id=$row[0]";
$r = $con->query($q);
if ($con->affected_rows == 1) { // Se foi afetada/atualizada uma linha
它来到这里并成功编辑。
$frase = "A sua senha foi atualizada.";
header("location: login_index.php?erro=$frase");
} else {
// Debugging message:
//echo '<p>' . mysqli_error($dbc) . '<br /><br />Query: ' . $q . '</p>';
$frase = "A senha não foi atualizada, ocorreu um erro no sistema.";
header("location: mudar_passe.php?erro=$frase");
}
include ('includes/footer.php');
exit();
} else { // Há problemas com os dados na base de dados, ou os dados não existem ou há email e senha repetidos
$frase = "A senha está incorreta!!.";
header("location: mudar_passe.php?erro=$frase");
}
$con->close(); // fecha a ligação à base de dados.
}
?>
HTML代码
<div class="container-fluid">
<div class="row">
<div class="page-header"><br>
<center><h2>Alterar Palavra-Passe</h2></center>
</div>
<center><form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
<div class="form-group">
<label for="InputPasse">Palavra-Passe Atual</label><br>
<input id="InputPasse" name="pass" required="required" type="password" />
</div>
<div class="form-group">
<label for="InputPasse">Nova Palavra-Passe</label><br>
<input id="InputPasse" name="pass1" required="required" type="password" />
</div>
<div class="form-group">
<label for="InputPasse">Nova Palavra-Passe</label><br>
<input id="InputPasse" name="pass2" required="required" type="password" />
</div>
<input type="submit" name="send" class="btn btn-primary" value="Alterar">
<a href="login_index.php" class="btn btn-default">Cancelar</a>
</form><br><br><br>
<p>Boas <b><?php echo $_SESSION['username']?></b>, aqui poderás alterar a tua palavra-passe. </p></center>
</div>
</div>
答案 0 :(得分:0)
设置header
并不会阻止您的后续代码被执行,因此它会更新密码(但不会初始化$ np)。这应该有效,只要你在此之前没有任何输出:
[...]
if ($_POST['pass1'] != $_POST['pass2']) {
$frase = "A sua senha não foi atualizada.";
header("location: mudar_passe.php?erro=$frase");
exit;
}
[...]
作为参考:php: header manual,参数 - >&gt;标题