我试图建立一个登录/注册与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,但当我单击提交时,它会直接将我带到登录页面,跳过错误。我认为它直接将用户带到登录,尽管密码不匹配,或者可能跳过了通行证控制。
1条答案
按热度按时间oogrdqng1#
为了保持效率,你应该做的是首先检查密码是否匹配,然后检查电子邮件地址的存在,并从这一点开始执行逻辑,因此你的代码应该看起来像这样:
除此之外,重要说明:
$password = $_POST['password'];
会覆盖你的$password = $connessione->real_escape_string($_POST['password']);
,明智地命名你的变量。1.我强烈建议在使用数据库时使用**PHP PDO来处理数据库,如果您知道自己在做什么,则使用
MySQLi
**。1.修改您的执行计划,以便您不必运行由于
false
条件而可能不会使用的查询。