使用 PHP 检查用户名是否已经存在
Check if username already exists using PHP
我想检查我的数据库中是否已存在用户名。如果是这样,我想重定向回我的注册页面。我的代码可以添加用户名,但不检查用户名是否存在。请帮忙!!!这是 register.php 页面的代码。
该代码完全跳过了对 'username' 的检查,并在数据库存在或不存在时将其插入到数据库中。
<?php
error_reporting (E_ALL ^ E_NOTICE);
include ('dbconn.php');
session_start();
$GLOBALS[$error_message];
$GLOBALS[$username];
if(isset($_POST['submit']))
{
$error = array();
if(empty($_POST['username']))
{
$error[] = 'Please enter a username. ';
}
else
{
$username = mysqli_real_escape_string($connection, $_POST['username']);
}
if(empty($_POST['password']))
{
$error[] = 'Please enter a password. ';
}
else
{
$password = mysqli_real_escape_string($connection,$_POST['password']);
}
if(empty($_POST['cpassword']))
{
$error[] = 'Please confirm password. ';
}
else
{
$cpassword = mysqli_real_escape_string($connection,$_POST['cpassword']);
}
if($password == $cpassword)
{
$mainpassword= $password;
}
else
{
$error[] = 'Your passwords do not match. ';
}
if(empty($error))
{
$query = "SELECT * from User WHERE username=' ".$username." ' ";
$result = mysqli_query($connection, $query) or die
(mysqli_error($connection));
if(mysqli_num_rows($result)> 0)
{
$multi = "Sorry ! This Username is not available...Please choose another";
}
else{ $sql="INSERT INTO user(username,password)VALUES ('$username','$password')";
mysqli_query($connection, $sql) or die(mysqli_error($connection));
header('Location:/MySQLi/confirmation.php'); }
}
else
{
$error_message = '<span class="error">';
foreach($error as $key => $values) {
$error_message.="$values";
}
$error_message.="</span><br/><br/>";
}
}
?>
您正在手动添加用户名周围的空格,因此看起来它不存在:
$query = "SELECT * from User WHERE username=' ".$username." ' ";
^ ^
应该是:
$query = "SELECT * from User WHERE username='".$username."' ";
使用准备好的语句可以一次性避免该问题和潜在的 sql 注入问题:
$query = "SELECT * from User WHERE username=?";
还要确保您始终如一地使用 table- 和列名称:User
不一定与 user
相同。
另请注意您永远不应在数据库中存储纯文本密码,您应该salt and hash them.
SQL table 名称可以区分大小写,因此 'user' 和 'User' 是不一样的。如果您的 table 被命名为小写的 'user',那么大写的 'SELECT * FORM User' 可能不会给出任何结果。
如果你只是想检查是否存在,你可以 select '1' 并添加限制 1 这样查询就不会扫描整个 table,像这样:
"SELECT 1 FROM user WHERE username='" . $username . "' LIMIT 1";
或者您可以将您的用户名列设置为唯一,然后如果用户名已经存在,INSERT 语句将失败,为您提供一个简单的单查询检查,既可以插入一个新用户,也可以让您知道该名称是否存在已经有人了。
最后,您的代码很容易受到 SQL 注入攻击。始终转义用户输入或使用准备好的语句。
我想检查我的数据库中是否已存在用户名。如果是这样,我想重定向回我的注册页面。我的代码可以添加用户名,但不检查用户名是否存在。请帮忙!!!这是 register.php 页面的代码。 该代码完全跳过了对 'username' 的检查,并在数据库存在或不存在时将其插入到数据库中。
<?php
error_reporting (E_ALL ^ E_NOTICE);
include ('dbconn.php');
session_start();
$GLOBALS[$error_message];
$GLOBALS[$username];
if(isset($_POST['submit']))
{
$error = array();
if(empty($_POST['username']))
{
$error[] = 'Please enter a username. ';
}
else
{
$username = mysqli_real_escape_string($connection, $_POST['username']);
}
if(empty($_POST['password']))
{
$error[] = 'Please enter a password. ';
}
else
{
$password = mysqli_real_escape_string($connection,$_POST['password']);
}
if(empty($_POST['cpassword']))
{
$error[] = 'Please confirm password. ';
}
else
{
$cpassword = mysqli_real_escape_string($connection,$_POST['cpassword']);
}
if($password == $cpassword)
{
$mainpassword= $password;
}
else
{
$error[] = 'Your passwords do not match. ';
}
if(empty($error))
{
$query = "SELECT * from User WHERE username=' ".$username." ' ";
$result = mysqli_query($connection, $query) or die
(mysqli_error($connection));
if(mysqli_num_rows($result)> 0)
{
$multi = "Sorry ! This Username is not available...Please choose another";
}
else{ $sql="INSERT INTO user(username,password)VALUES ('$username','$password')";
mysqli_query($connection, $sql) or die(mysqli_error($connection));
header('Location:/MySQLi/confirmation.php'); }
}
else
{
$error_message = '<span class="error">';
foreach($error as $key => $values) {
$error_message.="$values";
}
$error_message.="</span><br/><br/>";
}
}
?>
您正在手动添加用户名周围的空格,因此看起来它不存在:
$query = "SELECT * from User WHERE username=' ".$username." ' ";
^ ^
应该是:
$query = "SELECT * from User WHERE username='".$username."' ";
使用准备好的语句可以一次性避免该问题和潜在的 sql 注入问题:
$query = "SELECT * from User WHERE username=?";
还要确保您始终如一地使用 table- 和列名称:User
不一定与 user
相同。
另请注意您永远不应在数据库中存储纯文本密码,您应该salt and hash them.
SQL table 名称可以区分大小写,因此 'user' 和 'User' 是不一样的。如果您的 table 被命名为小写的 'user',那么大写的 'SELECT * FORM User' 可能不会给出任何结果。
如果你只是想检查是否存在,你可以 select '1' 并添加限制 1 这样查询就不会扫描整个 table,像这样:
"SELECT 1 FROM user WHERE username='" . $username . "' LIMIT 1";
或者您可以将您的用户名列设置为唯一,然后如果用户名已经存在,INSERT 语句将失败,为您提供一个简单的单查询检查,既可以插入一个新用户,也可以让您知道该名称是否存在已经有人了。
最后,您的代码很容易受到 SQL 注入攻击。始终转义用户输入或使用准备好的语句。