Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 要检查数据库中是否存在用户名?_Php_Mysql - Fatal编程技术网

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'");