I am trying to create a function that will create a unique username for each user stored in the database.
My plan was to create a username by concatenating the first and last name then check if this username was taken. If it wasn't just store it in the database and if it was then add a number on the end of it.
For example if ConnorAtherton was taken the function would next check ConnorAtherton1, ConnorAtherton2 until it found a unique username.
Here is the function (I have added some echo statements for debugging)
function createUserName($username, $counter){
global $fname, $lname;
echo "\t\t\tUsername at Start - " . $username . "
";
// connect to database
require($_SERVER['DOCUMENT_ROOT'] . "/inc/db.connect.php");
$stmt = $conn->prepare('SELECT * FROM users WHERE username = ?');
$stmt->bind_param('s', $username);
$stmt->execute();
$stmt->store_result();
echo "\t\t\tUsername before loop - " . $username . "
";
if( $stmt->num_rows > 0){
//construct original name and try again
$username = ucfirst($fname) . ucfirst($lname) . $counter;
$counter++;
createUserName($username, $counter);
}
echo "\t\t\tUsername after loop - " . $username . "
";
return $username;
}
Here is what it returns to the console
Username at Start - ConnorAtherton
Username before loop - ConnorAtherton
Username at Start - ConnorAtherton1
Username before loop - ConnorAtherton1
Username at Start - ConnorAtherton2
Username before loop - ConnorAtherton2
Username after loop - ConnorAtherton2
Username after loop - ConnorAtherton1
It returns the correct value after the loop (ConnorAtherton2) to begin with but I don't know why there would be a second value after the loop.
It returns ConnorAtherton1 and I need it to return ConnorAtherton2.
Any help is greatly appreciated.