以下代码允许用户注册我的网站。他们必须输入用户名,密码和电子邮件。我已经包含了我的所有PHP代码,您可以更好地理解,基本上,它只是验证用户输入的内容,如果用户输入有效的详细信息,它将存储在数据库中。我将包含目前无效的代码。谢谢,我也只是PHP的新手。
<?php
include('classes/DB.php');
//function to abstract information entered and then store it
if (isset($_POST['createaccount']))
{
$username = $_POST['username'];
$password = $_POST['password'];
$email = $_POST['email'];
if (!DB::query('SELECT username FROM users WHERE username=:username', array(':username'=>$username))) // Username Validation (Duplicate)
{
if (strlen($username) >= 3 && strlen($username) <= 32)//Length of Username Validation
{
if (preg_match('/[a-zA-Z0-9_]+/', $username)) // Username - Validation = Allow the Username to include a-z , A-Z , 0-9
{
if (strlen($password) >= 6 && strlen($password) <= 60) //Length of Password Validation
{
if (filter_var($email, FILTER_VALIDATE_EMAIL)) // Email Validation (Duplicate)
{
DB::query('INSERT INTO users VALUES (\'\', :username, :password, :email)', array(':username'=>$username, ':password'=>password_hash($password, PASSWORD_BCRYPT), ':email'=>$email)); // Encrypts password
echo "Success!";
}
else
{
echo 'Invalid email!'; //Error message - Email Duplicate
}
}
else
{
echo 'Invalid password!'; //Error message - Length of Password
}
}
else
{
echo 'Invalid username1'; //Error message - Username
}
}
else
{
echo 'Invalid username'; // Error message - Username
}
}
else
{
echo 'User already exists!'; //Error message - Duplicate Username
}
}
?>
我遇到这些代码行的问题,就好像我在网站中输入相同的用户名,它仍然将它添加到数据库中,它不应该这样。
if (!DB::query('SELECT username FROM users WHERE username=:username', array(':username'=>$username))) // Username Validation (Duplicate)
此外,当用户进入文本框时,应进行散列
DB::query('INSERT INTO users VALUES (\'\', :username, :password, :email)', array(':username'=>$username, ':password'=>password_hash($password, PASSWORD_BCRYPT), ':email'=>$email)); // Encrypts password
答案 0 :(得分:0)
要检查用户是否已存在其用户名,请使用以下命令:
<?php
$user = DB::query('SELECT username FROM users WHERE username=:username',
array(':username'=>$username));
if(!empty($user->fetch()))
{
//Instruction
}
?>
当然,确保不重复用户名的最佳方法是在DBMS之后添加唯一约束