2009-06-05 3 views
4

J'ai une page d'inscription sur mon site Web où un utilisateur doit fournir une adresse e-mail et mot de passe seulement.comment créer un nom d'utilisateur à partir de l'adresse e-mail fournie - PHP

Je souhaite pouvoir créer automatiquement un nom d'utilisateur pour cet utilisateur en utilisant la première partie de l'e-mail fourni;

utilisateur fournit gordon @ yourdomain.com, je veux faire le nom d'utilisateur « gordon »

Je ne nécessite pas d'explication sur la façon de créer la forme ou la soumission des données à base de données, tout le code pour extraire des données à partir de l'e-mail fourni et, si nécessaire, si un doublon se produit, ajoutez le numéro à la fin. J'espère que cela a un sens, semble être une fonction de base, mais n'a pas pu trouver des exemples de n'importe où sur le net!

+7

Il suffit d'utiliser l'adresse e-mail complète - quelque chose que les gens seront plus susceptibles de se souvenir! Sinon, utilisez simplement une expression rationnelle pour saisir ([^ @] *) @ de l'adresse e-mail. – JeeBee

+0

Je suis confus ainsi que pourquoi vous ne voulez pas utiliser simplement l'adresse e-mail complète comme nom d'utilisateur. Au moins commencer avec et permettre à l'utilisateur de le changer en quelque chose d'unique s'ils le veulent. – JoshFinnie

Répondre

13

Ce n'est pas une bonne idée, il suffit d'utiliser leur adresse e-mail complète. Les adresses électroniques suivantes peuvent être différentes, mais elles deviendront les mêmes sous votre système.

[email protected] 
[email protected] 

Ajout d'un numéro à la fin fera l'utilisateur à se rappeler quelque chose d'unique à votre système et provoquer beaucoup de confusion sur leur fin.

+0

Merci pour votre réponse rapide .... Je n'utilise pas le nom d'utilisateur pour un utilisateur à se connecter, ils vont toujours utiliser leur adresse e-mail pour y parvenir (comme mentionné ci-dessous adresse e-mail dans un excellent ID unique). La raison pour laquelle je veux extraire une partie du courrier électronique et l'utiliser comme nom d'utilisateur est plus pour la création de profil. Je suis en train de concevoir un réseau social, donc si l'utilisateur rencontre quelqu'un, il peut leur indiquer son nom d'utilisateur ou son adresse e-mail pour trouver –

+2

Ensuite, vous devriez faire l'effort supplémentaire de laisser l'utilisateur choisir un nom d'utilisateur; vous aurez besoin de vérifier les conflits de toute façon –

+0

Je veux l'utilisateur enregistré qui est mon objectif principal ici, et je veux qu'il soit vu très facile. Une fois que l'utilisateur est enregistré, il peut changer son profil pour celui qu'il préfère très facilement. L'autre raison de faire cela, c'est que je veux pouvoir créer un compte avec moi en envoyant simplement une adresse par courriel. –

2

Quelque chose comme:

$username = left($email, stripos($email, '@')); 

devrait faire. Vous voudrez peut-être apprendre regular expressions pour ce genre de tâche.

vous ajoutez le compteur:

function countOccurrences($name) 
{ 
    $con = mysql_connect(___, ___, ___); 
    if (!$con) 
    { 
     die('Could not connect: ' . mysql_error()); 
    } 

    mysql_select_db(___, $con); 

    $result = mysql_query(" 
     SELECT COUNT(*) AS countOccurrences 
     FROM users 
     WHERE username LIKE '" . mysql_real_escape_string($name, $con) . "%' 
    "); 

    $row = mysql_fetch_array($result); 

    $number = $row['countOccurrences']; 

    mysql_close($con); 

    return $number; 

} 

puis:

$countUsers = countOccurrences($username); 
if ($countUsers>0)  
{  
     $username = $username . $countUsers; 
} 

IMPORTANT: Pensez à utiliser tout le courrier électronique comme nom d'utilisateur: vous ne voulez pas [email protected] pour être considéré comme égal à [email protected]

REMARQUE: exemple de code compte gordon, gordon1, gordon2 mais gordonbah, gordonq, gordonxxx trop

NOTE: ce est assez rude, et ne doit pas être considérée comme la meilleure pratique de PHP; c'est juste pour donner l'idée générale

+0

Vous n'abordez pas le comportement OP demandé pour les cas de duplication. – chaos

+0

C'est parce que j'ai mal lu - merci, va ajouter des suggestions tout de suite –

+0

Ugh, vous n'avez pas échappé $ name avant de le mettre dans mysql ... * très mauvais * – Ian

1
<?php 
preg_match('/[^@]+)@/',$email,$matches); 
$username = $matches[1]; 
check_availability($username); 
?> 
5

D'accord, vous dépouillez un ID nécessairement unique dans un ID non unique. Sauf si vous voulez ajouter une sorte de manipulation pour ajouter un numéro au nom d'utilisateur ou quelque chose. Si c'est ce que vous voulez vraiment faire, cela devrait mettre $ username à la substance avant l'adresse e-mail:

<?php 
    $username = preg_replace('/([^@]*).*/', '$1', $email); 
?> 
0

devrait répondre à vos besoins: D

$username = substr($username, 0, strpos($username, '@')); 

$username = mysql_real_escape_string($username); 

$result = mysql_query('SELECT `username` FROM `users` WHERE `username` = \'' . $username . '%\';'); 

if (mysql_num_rows($result) > 0) { 

    $i = 0; 

    while ($name_arr = mysql_fetch_assoc($result)) { 

     $name = $name_arr['username'];  

     $after = substr($name, strlen($username)); 

     if (ctype_digit($after)) { 

     if (($after = (int) $after) > $i) { 

      $i = $after; 

     } 

     } 

    } 

    if ($i > 0) { 
     $username .= $i; 
    } 

} 
2
$username = [email protected]; 

$username_arr = explode('@',$username); 

$username = $username_arr[0];  

if(!is_taken($username)) 
{ 
    //The name is not taken. 
} 
else 
{ 
    //The name is taken, add numbers and do the search again. 
} 

function is_taken($username) 
{ 
    $db_link = mysql_connect($host,$user,$pass) or die('Could not connect to database'); 

    $username = mysql_real_escape_string($username); 

    $sql = "SELECT * FROM `database`.`users` WHERE `username` = '$username'"; 

    $res = mysql_query($sql , $db_link); 

    return mysql_num_rows($res) == 1; 

} 
1

PHP 5.3.0 vous pouvez également utiliser:

$email = '[email protected]'; 
$user = strstr($email, '@', true); 

Cela retournera toute la chaîne du début à la première occurrence de '@'. Ce qui dans ce cas est la suivante:

test 
0

J'utilise quelque chose comme ça,

$cust_email = "[email protected]"; 
$parts = explode("@", $cust_email); 
$cust_name = $parts[0]; 

j'utiliser pour définir par défaut Nom d'utilisateur si l'utilisateur ne fixe pas son/son nom dans le profil.

0

Vous pouvez utiliser la fonction strstr pour trouver mot spécifique de chaîne

<?php 

    $username = strstr("[email protected]",'@',true); //get text before @  
    /*  
    echo strstr("[email protected]","@"); // get text after @ 
    */ 
    check_availability($username); 

    ?> 
Questions connexes