Company logo
  • Empleos
  • Bootcamp
  • Acerca de nosotros
  • Para profesionales
    • Inicio
    • Empleos
    • Cursos y retos
    • Preguntas
    • Profesores
    • Bootcamp
  • Para empresas
    • Inicio
    • Nuestro proceso
    • Planes
    • Pruebas
    • Nómina
    • Blog
    • Calculadora

0

247
Vistas
How to generate unique username - PHP

I have strings of usernames in array . I want to generate a unique string of username which do not exits in array.(probably with some numbers following the username)

How do I achieve this?

I have summarize the code:

function generate_unique_username(){
    $firstname      = "james";//data coming from user
    $lastname       = "oduro";//data coming from user
    $new_username   = $firstname.$lastname;
    $usersnames     = array("james39","oduro32","kwame93","elvisasante","frimpong32","edward32","jamesoduro");

    //Loop through ARRAY usernames and check elements against VAR $new_username

    if (in_array($new_username, $usersnames)) {
        //generate new username which is not inside array
        //the new generated string should also be check against array to ensure is doens not exit.


    }else{
        return $new_username;
    }
}

Thank you.

8 months ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Generating username from the stored array is not a good practice, I would suggest you to use the database.

If you are using the database instead of the array, you can use the best method to generate the unique username as following:

function generate_unique_username(){
    $firstname      = "james";//data coming from user
    $lastname       = "oduro";//data coming from user
    $new_username   = $firstname.$lastname;

    /* Note: writing here pseudo sql code, replace with the actual php mysql query syntax */
    $query = "SELECT COUNT(id) as user_count FROM user WHERE username like '%".$new_username."%'";
    $result = mysql_query($query);
    $count = $result['user_count'];

    if(!empty($count)) {
        $new_username = $new_username . $count;
    }

    return $new_username;
}
8 months ago · Santiago Trujillo Denunciar

0

I think in this case you should first off try and assign cooler user names to the users then when that fails you go for a number suffix. This is an approach I may use. You may need to change the code to your more preferred and secured mysqli call like using the PDO or MySQLI prepared statement.

//function that will be used to figure out if the user name is available or not
function isAvailable($userName){
    global $mysqli;
    $result = $mysqli->query("SELECT id FROM users WHERE user_name='$userName'") or die($mysqli->error());

    // We know username exists if the rows returned are more than 0
    if ( $result->num_rows > 0 ) {
         //echo 'User with this username already exists!';
         return false;
    }else{
        return true;
    }
}

function generate_unique_username($firstname, $lastname, $id){    
    $userNamesList = array();
    $firstChar = str_split($firstname, 1)[0];
    $firstTwoChar = str_split($firstname, 2)[0];
    /**
     * an array of numbers that may be used as suffix for the user names index 0 would be the year
     * and index 1, 2 and 3 would be month, day and hour respectively.
     */
    $numSufix = explode('-', date('Y-m-d-H')); 

    // create an array of nice possible user names from the first name and last name
    array_push($userNamesList, 
        $firstname,                 //james
        $lastname,                 // oduro
        $firstname.$lastname,       //jamesoduro
        $firstname.'.'.$lastname,   //james.oduro
        $firstname.'-'.$lastname,   //james-oduro
        $firstChar.$lastname,       //joduro
        $firstTwoChar.$lastname,    //jaoduro,
        $firstname.$numSufix[0],    //james2019
        $firstname.$numSufix[1],    //james12 i.e the month of reg
        $firstname.$numSufix[2],    //james28 i.e the day of reg
        $firstname.$numSufix[3]     //james13 i.e the hour of day of reg
    );


    $isAvailable = false; //initialize available with false
    $index = 0;
    $maxIndex = count($userNamesList) - 1;

    // loop through all the userNameList and find the one that is available
    do {
        $availableUserName = $userNamesList[$index];
        $isAvailable = isAvailable($availableUserName);
        $limit =  $index >= $maxIndex;
        $index += 1;
        if($limit){
        break;
        }
    } while (!$isAvailable );

    // if all of them is not available concatenate the first name with the user unique id from the database
    // Since no two rows can have the same id. this will sure give a unique username
    if(!$isAvailable){
        return $firstname.$userId;
    }
    return $availableUserName;
}

//Get the unique user id from your database, for now let's go with 30
$userId = 30;
echo generate_unique_username('john', 'oduro', $userId);

Also, it would be nice to provide a fallback feature where the user can change their user name to any other unique value, in case they do not like the auto-generated value.

8 months ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar empleo Planes Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2023 PeakU Inc. All Rights Reserved.