Php 要检查数据库中是否存在用户名?
我已经尝试了几个小时来获得一个解决方案来检查用户名是否存在,但它不断添加与我添加的相同的用户名(没有输出它存在的错误) 我目前的职能Php 要检查数据库中是否存在用户名?,php,mysql,Php,Mysql,我已经尝试了几个小时来获得一个解决方案来检查用户名是否存在,但它不断添加与我添加的相同的用户名(没有输出它存在的错误) 我目前的职能 function mysqli_result($res, $row, $field=0) { $res->data_seek($row); $datarow = $res->fetch_array(); return $datarow[$field]; } function name_exists($name){
function mysqli_result($res, $row, $field=0) {
$res->data_seek($row);
$datarow = $res->fetch_array();
return $datarow[$field];
}
function name_exists($name){
$con = mysqli_connect('localhost','root','','database');
$name = ($name);
$query = mysqli_query($con,"SELECT COUNT(id) FROM users WHERE name = '$name'");
// Count the amount of rows where username = $unsername
$check = mysqli_num_rows($query);
return (mysqli_result($query, 0) == 1) ? true:false;
}
我验证用户名和其他东西的完整代码如下所示
//Validates Username
if(empty($error)) {
if(name_exists($name)==true){
$email_error = "Sorry, the username: $name is already Taken.";
$error = true;
}
if(empty($name)) {
$error = true;
$email_error = "You Forgot to Enter Your Username!";
}
if(!preg_match('/^\w{5,}$/', $name)){
$error = true;
$email_error= "Invalid Username format.";
// valid username, alphanumeric & longer than or equals 5 chars
}
}
if(!filter_var($email,FILTER_VALIDATE_EMAIL)) {
$error = true;
$email_error = "Please Enter Valid Email ID";
}
if(strlen($password) < 6) {
$error = true;
$password_error = "Password must be minimum of 6 characters";
}
if($password != $cpassword) {
$error = true;
$cpassword_error = "Password and Confirm Password doesn't match";
}
if (!$error)
{
// prepare and bind
$stmt = $con->prepare("INSERT INTO users (name,email,password) VALUES (?, ?, md5(?))");
$stmt->bind_param("sss", $name, $email, $password);
//$stmt->execute();
if( $stmt->execute() == true) {
$successmsg = "Successfully Registered! <a href='login.php'>Click here to Login</a>";
} else {
$errormsg = "Error in registering...Please try again later!";
}
}
首先,您可以向数据库中的“名称”列添加唯一标识符,以避免重复插入 其次,让问题变得简单
SELECT COUNT(id)
FROM users
WHERE name = ' ".$name." ' ";
在单引号内,变量$name
被视为字符串$name
,而不是被替换为$name
替换的值:
$query = mysqli_query($con,"SELECT COUNT(id) FROM users WHERE name = '$name'");
与:
我测试过,它对我有效为什么需要在应用程序端签入。。?最好也在db端执行它。。。使用。-为什么我建议这样做,因为您的应用程序可能会同时检查用户名是否存在。请尝试摆脱用不必要的东西(如
==true
)来混乱代码的习惯。您的函数在返回布尔值时遇到了很多麻烦,因此只需执行如果(name_存在($name))
就可以了。警告:使用mysqli
时,您应该使用并将用户数据添加到查询中。不要使用字符串插值或串联来完成此操作,因为您已经创建了严重的错误。切勿将$\u POST
、$\u GET
或任何用户数据直接放入查询中,如果有人试图利用您的错误进行攻击,这可能会非常有害。警告:编写自己的访问控制层并不容易,而且有很多机会使其严重出错。请不要编写您自己的身份验证系统,因为任何现代的同类产品都具有强大的内置功能。至少绝对不要使用像SHA1或MD5这样无用的弱散列来存储密码。在这里使用串联是不好的。和其他查询一样,使用占位符是正确解决此问题的方法。使用户名唯一。然后运行一个简单的INSERT。如果插入失败,您就知道用户名已经被使用了。
$query = mysqli_query($con,"SELECT COUNT(id) FROM users WHERE name = '$name'");
$query = mysqli_query($con,"SELECT name FROM users WHERE name = '$name'");