SQLインジェクションから自分のウェブサイトを保護しようとしています。だから私は自分のコードを変更し、それをプリペアドステートメントに置き換えることにしました。私は以下のコードで軽度のミスステイクをしたと思います。接続データベース中の準備文
<?php
session_start();
$host= 'localhost';
$user='root';
$pass='';
$db='gameforum';
$conn= mysqli_connect($host, $user, $pass, $db);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$username = $_POST['username'];
$password = $_POST['password'];
$rpassword = $_POST['rpassword'];
$email = $_POST['email'];
if ($password!==$rpassword) {
$_SESSION['err']="Passwords did not match, please try again!";
header("Location: index.php");
$conn->close();
}
else {
$stmt = $conn->prepare("INSERT INTO users (username, password, rpassword, email) VALUES (?, ?, ?, ?)");
if(!$stmt){
echo "false";
}else {
$stmt->bind_param("ssss", $username, $password, $rpassword, $email);
if ($stmt->execute === TRUE) {
$redirectUrl = 'index.php';
$_SESSION['registrationsuccessful']="Your account was successfully created! You may now log in to your account.";
header("Location: index.php");
}else{
$_SESSION['alreadyexists']="Username or email already exists!";
header("Location: index.php");
$stmt->close();
$conn->close();
}
$stmt->close();
$conn->close();
}
}
私が今直面しています問題は、私は実際には存在しないアカウントを作成しようとすると、私はメッセージ「ユーザーがすでに存在」してしまうことがあります。ありがとう!
'$ stmt-> execute()'を2回呼び出すのではなく、変数に代入して真偽をテストしてください。 – RamRaider