I'm learning more about PHP, so I've decided to create a simple login/create account system. Entering information for creating a new account sends the data to my localhost machine, using MySQLi and the web server MySQL. I'm looking for feedback about security, efficiency, and overall code. I would like to kick old habits to the curb before it's too late. Any and all help is appreciated and considered. Thank you in advance!
create.html
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<title>create.html</title>
<script src="script.js"></script>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body bgcolor="pink">
<center>
<form action="create.php" method="post">
<label>Username</label>
<input type="text" name="username"><br>
<label>Password</label>
<input type="password" name="password"><br>
<label>Re-enter Password</label>
<input type="password" name="confirm_password"><br>
<button type="submit">Create Account</button>
</form>
</center>
</body>
</html>
create.php
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<title>create.php</title>
</head>
<body bgcolor="pink">
<?php
$servername = "localhost";
$username = "XXXXXXXXXX"; // Not shown
$password = "XXXXXXXXXX"; // Not shown
$dbname = "Database";
//Create connection
$mysqli = new mysqli($servername, $username, $password, $dbname);
//Test connection
if ($mysqli->connect_error) {
die("Connection failed: " . $mysqli->connect_error);
}
$new_user_usr = filter_input(INPUT_POST, 'username');
$new_user_pwd = filter_input(INPUT_POST, 'password');
$new_user_pwd_conf = filter_input(INPUT_POST, 'confirm_password');
$sql = "SELECT usr, pwd FROM Users";
$result = $mysqli->query($sql);
if($result->num_rows > 0) {
/* If passwords don't match */
if($new_user_pwd !== $new_user_pwd_conf) {
die("Passwords don't match");
}
/* If password isn't between bounds */
if(strlen($new_user_pwd) <= 7 || strlen($new_user_pwd) >= 13) {
die("Password not long enough! Must be at least 8 characters long, but not greater than 12 characters");
}
/* If username is the same as password*/
if($new_user_usr === $new_user_pwd) {
die("Username cannot equal password!");
}
while($row = $result->fetch_assoc()) {
if($row['usr'] === $new_user_usr) {
die("Username already taken");
}
}
$add = "INSERT INTO Users (usr, pwd) VALUES ('$new_user_usr', '$new_user_pwd')";
echo $mysqli->query($add) ? "user created successfully" : "Error: " . $add . "<br>" . $mysqli->error;
}
?>
</body>
</html>