Я пытаюсь создать функцию, которая создаст уникальное имя пользователя для каждого пользователя, хранящегося в базе данных.
Мой план состоял в том, чтобы создать имя пользователя, объединив имя и фамилию, а затем проверить, занято ли это имя пользователя. Если бы это было не просто сохранить его в базе данных, а если бы это было так, то добавить число в конце.
Например, если 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.
Любая помощь приветствуется.
WHERE username LIKE "ConnorAtherton%"
, а затем подстроке последних цифр и добавлении 1 :) - person Julien   schedule 08.03.2013