Я пытаюсь создать функцию, которая создаст уникальное имя пользователя для каждого пользователя, хранящегося в базе данных.Рекурсивная функция PHP не возвращает ожидаемое значение
Мой план состоял в том, чтобы создать имя пользователя, объединив имя и фамилию, а затем проверьте, было ли это имя пользователя принято. Если бы это было не просто хранить его в базе данных, и если бы оно было затем добавлено число на конце.
Например, если ConnorAtherton был взят, функция будет следующей проверкой ConnorAtherton1, ConnorAtherton2, пока не найдет уникальное имя пользователя.
Вот функция (я добавил некоторое эхо заявления для отладки)
function createUserName($username, $counter){
global $fname, $lname;
echo "\t\t\tUsername at Start - " . $username . "\n";
// 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 . "\n";
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 . "\n\n";
return $username;
}
Вот что он возвращается к консоли
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
возвращает правильное значение после цикла (ConnorAtherton2), но я не знаю, почему после цикла будет второе значение.
Он возвращает ConnorAtherton1, и мне нужно его, чтобы вернуть ConnorAtherton2.
Любая помощь очень ценится.
Возможно, это не тот ответ, который вы ищете, но я бы подумал об изменении вашего sql, чтобы использовать 'WHERE username LIKE" ConnorAtherton% "', а затем подставляя последнюю цифру (цифры) и добавляя 1 :) – Julien