Php 生成新用户名并检查是否已存在

Php 生成新用户名并检查是否已存在,php,Php,我需要自动生成唯一用户名,我创建了两个函数,一个用于创建随机用户名,另一个用于检查用户名是否已存储在数据库中。你认为这两个功能可以工作吗 function km_create_random_username($db_user_conn){ //set the random id length $km_random_username_length = 6; //generate a random id encrypt it and store it in $rnd_id $

我需要自动生成唯一用户名,我创建了两个函数,一个用于创建随机用户名,另一个用于检查用户名是否已存储在数据库中。你认为这两个功能可以工作吗

function km_create_random_username($db_user_conn){

  //set the random id length 
  $km_random_username_length = 6; 
  //generate a random id encrypt it and store it in $rnd_id 
  $km_random_username = uniqid(rand(),1); 
  //to remove any slashes that might have come 
  $km_random_username = strip_tags(stripslashes($km_random_username)); 
  //Removing any . or / and reversing the string 
  $km_random_username = str_replace(".","",$km_random_username); 
  $km_random_username = strrev(str_replace("/","",$km_random_username)); 
  //finally I take the first 6 characters from the $km_rnd_id 
  $km_random_username = substr($km_random_username,0,$km_random_username_length); 

  if(!km_check_random_username($db_user_conn, $km_random_username)){
    return $km_random_username;
  }

}


function km_check_random_username($db_user_conn, $km_random_username) {

  $query = "SELECT km_user_username FROM km_users WHERE km_user_username=?";
  $stmt = mysqli_prepare($db_user_conn, $query);
  mysqli_stmt_bind_param($stmt, 's', $km_random_username);
  mysqli_stmt_execute($stmt);
  mysqli_stmt_store_result($stmt);
  $rows = mysqli_stmt_num_rows($stmt);
  mysqli_stmt_fetch($stmt);

  if($rows > 0) {

    km_create_random_username($db_user_conn);

  }else{

    return false;

  }

}

要测试代码是否发现重复,然后生成新的randon用户名,请执行以下操作

  • 清空表
    km\u user
    或记录最后一个
    id

  • 运行
    km\u check\u random\u username()
    函数两次,同时手动传递相同的用户名

    km_check_random_username($db_user_conn, 'ItsMee');
    km_check_random_username($db_user_conn, 'ItsMee');
    
  • 检查一下桌子?它是否创建了
    ItsMee
    用户名

  • 在创建
    ItsMe
    用户名之后,它是否创建了一个随机的
    username
    ?如果是的话,它就会发现Dup并运行再生阶段

  • 要测试代码是否发现重复,然后生成新的randon用户名,请执行以下操作

  • 清空表
    km\u user
    或记录最后一个
    id

  • 运行
    km\u check\u random\u username()
    函数两次,同时手动传递相同的用户名

    km_check_random_username($db_user_conn, 'ItsMee');
    km_check_random_username($db_user_conn, 'ItsMee');
    
  • 检查一下桌子?它是否创建了
    ItsMee
    用户名

  • 在创建
    ItsMe
    用户名之后,它是否创建了一个随机的
    username
    ?如果是的话,它就会发现Dup并运行再生阶段
  • echo gen_random_用户名(10);
    //生成jPMNfrQZil
    函数gen\u random\u username($db\u user\u conn,$length){
    $chars=“0123456789abcdefghijklmnopqrstuvxyzabcdefghijklmnopqrstuvxyz”;
    $random_username=“”;
    对于($i=0;$i<$length;$i++){
    $random_username.=$chars[rand(0,strlen$chars)-1];
    }
    如果(!km\u check\u random\u username($db\u user\u conn,$random\u username)){
    返回$random\u用户名;
    }
    }
    //我没有检查这个函数,但是我修改了它以使用上面的函数
    //gen_random_用户名($x,$length)。。。
    函数km\u check\u random\u用户名($db\u user\u conn,$km\u random\u用户名){
    $query=“从km_用户中选择km_用户\用户名,其中km_用户\用户名=?”;
    $stmt=mysqli\u prepare($db\u user\u conn,$query);
    mysqli_stmt_bind_param($stmt,$s',$km_random_username);
    mysqli_stmt_execute($stmt);
    mysqli_stmt_store_结果($stmt);
    $rows=mysqli\u stmt\u num\u rows($stmt);
    mysqli_stmt_fetch($stmt);
    如果($rows>0){
    gen_random_用户名($db_user_conn,10);
    }否则{
    返回false;
    }
    
    echo gen\u random\u用户名(10);
    //生成jPMNfrQZil
    函数gen\u random\u username($db\u user\u conn,$length){
    $chars=“0123456789abcdefghijklmnopqrstuvxyzabcdefghijklmnopqrstuvxyz”;
    $random_username=“”;
    对于($i=0;$i<$length;$i++){
    $random_username.=$chars[rand(0,strlen$chars)-1];
    }
    如果(!km\u check\u random\u username($db\u user\u conn,$random\u username)){
    返回$random\u用户名;
    }
    }
    //我没有检查这个函数,但是我修改了它以使用上面的函数
    //gen_random_用户名($x,$length)。。。
    函数km\u check\u random\u用户名($db\u user\u conn,$km\u random\u用户名){
    $query=“从km_用户中选择km_用户\用户名,其中km_用户\用户名=?”;
    $stmt=mysqli\u prepare($db\u user\u conn,$query);
    mysqli_stmt_bind_param($stmt,$s',$km_random_username);
    mysqli_stmt_execute($stmt);
    mysqli_stmt_store_结果($stmt);
    $rows=mysqli\u stmt\u num\u rows($stmt);
    mysqli_stmt_fetch($stmt);
    如果($rows>0){
    gen_random_用户名($db_user_conn,10);
    }否则{
    返回false;
    }
    
    Hi@riggsfully是的,我不知道如何测试它,因为考虑到大量的组合,将不可能找到匹配的用户名。函数km\u create\u random\u username确实创建得很好,如果你认为这是不可能的……你是否没有回答你自己的问题:):)是的,但我如何测试是否在不幸的情况下如果用户名已存储,则将创建一个新的用户名?Hi@RiggsFolly是的,我不知道如何测试它,因为考虑到大量的组合,将不可能找到匹配的用户名km_create_random_username函数创建得很好,如果您认为这是不可能的……您没有回答自己的问题吗问题:):)是的,但我如何测试在用户名已经存储的不幸事件中,是否会创建一个新的用户名?嗯,快到圣诞节了;-)我刚刚使用了km_check_random_用户名($db_user_conn,'ItsMee'));在我将数据库中存储的用户名更改为“ItsMee”并且似乎可以使用后,它确实会将其更改为新的随机用户名。感谢您的支持,它似乎工作得很好。我使用它的方式是使用km_create_random_username($db_user_conn)哦,快到圣诞节了;-)我刚刚使用了km_check_random_username($db_user_conn,'ItsMee');在我将存储在数据库中的用户名更改为'ItsMee'后,它确实会将其更改为新的随机用户名。它似乎工作正常,感谢您的支持。不过,我使用它的方式是使用km_create_random_用户名($db_user_conn)嗨@Safi不确定这是我问的,但另一种生成随机用户名的方法。无论如何,Thanoks嗨@Safi不确定这是我问的,但另一种生成随机用户名的方法。不管怎样,Thanoks