PHP表单未加载密码匹配

omqzjyyz  于 2023-06-04  发布在  PHP
关注(0)|答案(1)|浏览(190)

我试图建立一个登录/注册与PHP的Web服务器,它填补了MySQL表。
代码运行得很好,但是当我试图实现一个密码相同的控件时,它似乎跳过了密码匹配代码,直接进入登录表单。
代码如下:

<?php

require_once('config.php');

$email = $connessione->real_escape_string($_POST['email']);
$username = $connessione->real_escape_string($_POST['username']);
$password = $connessione->real_escape_string($_POST['password']);
$hashed_password = password_hash($password, PASSWORD_DEFAULT);

// Controlla se l'email esiste già nel database
$query = "SELECT * FROM utenti WHERE email = '$email'";
$result = $connessione->query($query);

if ($result->num_rows > 0) {
    echo "L'email esiste già nel database. Si prega di utilizzare un'altra email.";
} else {
    // L'email non esiste nel database, procedi con la creazione dell'account

$passwordMatchError = '';

if(isset($_POST['password']) && isset($_POST['password1'])) {
    $password = $_POST['password'];
    $password1 = $_POST['password1'];

    if($password === $password1) {

        header("Location: login.html");
        exit();
      
    } else {
        $passwordMatchError = 'Le password non corrispondono.'; 
    }
}

    $sql = "INSERT INTO utenti (email, username, password) VALUES ('$email', '$username', '$hashed_password')";
    if ($connessione->query($sql) === true) {
        // Registrazione avvenuta con successo, reindirizza l'utente alla pagina desiderata
        header("Location: login.html");
        exit();
    } else {
        echo "Errore durante la registrazione utente: " . $connessione->error;
    }
}

$connessione->close();

?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="styles.css">
</head>

<body>
    <div>
        <form action="register.php" method="POST">
            <h2>Registrati</h2>
            <label for="email">Email</label>
            <input type="text" name="email" id="email" placeholder="Inserisci la mail" required>
           
            <label for="username">Username</label>
            <input type="text" name="username" id="username" placeholder="Inserisci username" required>
            
            <label for="password">Password</label>
            <input type="password" name="password" id="password" placeholder="Inserisci la password" required>
    
            <label for="password1">Conferma Password</label>
            <input type="password" name="password1" id="password1" placeholder="Conferma password" required>
    
            <input type="submit" value="Invia">
    
            <?php if (isset($error)) : ?>
                <p><?php echo $error; ?></p>
            <?php endif; ?>
    
            <p>Hai già un account? <a href="login.html">Accedi</a></p>
        </form>
    </div>
</body>
</html>

到目前为止,我试图将register.php直接实现为“index.php”,但没有任何效果。当用户使用两个不匹配的密码提交表单时,我希望显示echo,但当我单击提交时,它会直接将我带到登录页面,跳过错误。我认为它直接将用户带到登录,尽管密码不匹配,或者可能跳过了通行证控制。

oogrdqng

oogrdqng1#

为了保持效率,你应该做的是首先检查密码是否匹配,然后检查电子邮件地址的存在,并从这一点开始执行逻辑,因此你的代码应该看起来像这样:

if (isset($_POST['password']) && isset($_POST['password1'])) {
    $password = $_POST['password'];
    $password1 = $_POST['password1'];

    if ($password === $password1) {
        $query = "SELECT email ....";
        $result = $connessione->query($query);

        if ($result->num_rows > 0) {
            echo "L'email ....";
        } else {
            $sql = "INSERT ....";
            if ($connessione->query($sql) === true) {
                ....
            }
        }
    }
}

除此之外,重要说明

  1. $password = $_POST['password'];会覆盖你的$password = $connessione->real_escape_string($_POST['password']);,明智地命名你的变量。
    1.我强烈建议在使用数据库时使用**PHP PDO来处理数据库,如果您知道自己在做什么,则使用MySQLi**。
    1.修改您的执行计划,以便您不必运行由于false条件而可能不会使用的查询。

相关问题