Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie schlagen Sie Benutzern in PHP eindeutige Benutzernamen vor?

Ich vermute, die Frage ist eine Basisfrage, also gebe ich ein einfaches Beispiel:

<?php

// Untested code and only one of the many possible ideas
$suggestions = array(
    'foobar' => TRUE,
    'foo1974' => TRUE,
    'foo37' => TRUE,
    'drfoo' => TRUE,
    'mrfoo' => TRUE,
);


$params = $placeholders = array();
foreach(array_keys($suggestions) as $position => $username){
    $params['u' . $position] = $username;
    $placeholders[] = ':u' . $position;
}
$sql = 'SELECT username
    FROM user
    WHERE username IN (' . implode(', ', $placeholders) . ')';

$res = $conn->prepare($sql);
$res->execute($params);
while( $row = $res->fetch(PDO::FETCH_ASSOC) ){
    $suggestions[ $row['username'] ] = FALSE;
}


foreach($suggestions as $username => $available){
    if($available){
        // ...
    }
}

Bearbeiten:

Die einzige Möglichkeit, eine unendliche Liste verfügbarer Namen bereitzustellen, besteht darin, eine sehr einfache Regel zu verwenden, z. B. das Hinzufügen einer fortlaufenden Nummer. In einem solchen Fall können Sie Folgendes versuchen:

SELECT username
FROM user
WHERE username REGEXP '^foo[0-9]+'

... und dann:

$username = 'foo';

$suggestions = array();
$count = 0;
$names_left = 5;
while($names_left>0){
    $count++;

    if( !in_array($username . $count, $names_taken) ){
        $suggestions[] = $username . $count;
        $names_left--;
    }
}