网站 - 即使pass1和pass2之间存在错误,用户也会编辑密码

时间:2018-02-04 18:14:03

标签: php mysql web

当用户尝试在我的网站上编辑密码时,有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>

1 个答案:

答案 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;标题