2009-06-05 4 views
4

У меня есть страница регистрации на моем сайте, где пользователь должен указать адрес электронной почты и пароль.Как создать имя пользователя с адреса электронной почты - PHP

Я хочу, чтобы создать имя пользователя для этого пользователя автоматически, используя первую часть предоставленного вами письма;

принадлежность пользователя Гордон @ yourdomain.com, я хочу, чтобы имя пользователя «Гордон»

мне не нужны объяснения о том, как создать форму или представление данных в базу данных, только код для извлечения данных из предоставленного сообщения электронной почты и, если необходимо, если происходит дублирование, добавьте номер в конец.

Надеюсь, что это имеет смысл, кажется основной функцией, но не может найти примеров в любом месте в сети!

+7

Просто используйте весь адрес электронной почты - то, что люди будут более вероятно, будут помнить! В противном случае просто используйте regexp для захвата ([^ @] *) @ с адреса электронной почты. – JeeBee

+0

Я смущен, а также почему вы не хотите просто использовать весь адрес электронной почты в качестве своего имени пользователя. По крайней мере, начните с него и позвольте пользователю изменить его на что-то уникальное, если захотят. – JoshFinnie

ответ

13

Это не очень хорошая идея, просто используйте их полный адрес электронной почты. Следующие адреса электронной почты могут быть разными людьми, но они станут такими же в вашей системе.

[email protected] 
[email protected] 

Добавление номера до конца, чтобы пользователь вспомнить что-то уникальное в вашей системе и вызвать большую путаницу в их конце.

+0

Спасибо за ваш быстрый ответ .... Я не использую имя пользователя для входа в систему, он все равно будет использовать там адрес электронной почты для достижения этого (как указано ниже, адрес электронной почты в отличном уникальном идентификаторе). Причина, по которой я хочу извлечь часть электронной почты и использовать ее как имя пользователя, больше для создания профиля. Я проектирую социальную сеть, поэтому, если пользователь встречает кого-то, они могут указать им имя пользователя или адрес электронной почты, чтобы найти – 2009-06-05 15:48:18

+2

. Тогда вы должны приложить дополнительные усилия, чтобы позволить пользователю выбрать имя пользователя; вам все равно придется проверять конфликты –

+0

Я хочу, чтобы пользователь зарегистрировался, это моя главная цель здесь, и я хочу, чтобы это было очень легко. Как только пользователь зарегистрирован, они могут изменить профиль на все, что они предпочитают, очень легко. Другой причиной для этого является то, что я хочу, чтобы пользователи могли создавать учетную запись со мной, просто отправляя по электронной почте конкретный адрес. – 2009-06-05 16:01:20

2

Что-то вроде:

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

должен делать. Вы можете изучить regular expressions для выполнения этих задач.

Затем добавить счетчик:

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; 

} 

, а затем:

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

ВАЖНО: Рассмотрите возможность использования всей электронной почты, как имя пользователя: вы не хотите [email protected] считается равным [email protected]

Примечание: пример кода считается Гордону, gordon1, gordon2 но gordonbah, gordonq, gordonxxx тоже

Примечание: это довольно грубо, и не следует считать лучшим PHP практика; это просто дать общую идею

+0

Вы не обращаетесь к поведению OP, запрошенному для случаев дублирования. – chaos

+0

Это потому, что я неправильно понял это - спасибо, сразу добавит предложения –

+0

Ух, вы не избежали $ name перед тем, как положить его в mysql ... * очень плохо * – Ian

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

Согласовано, вы лишаете обязательно уникальный идентификатор в уникальный код. Если вы не хотите добавить какую-то обработку, чтобы добавить номер в имя пользователя или что-то еще. Если это то, что вы действительно хотите сделать, это должно установить $ имя на вещи перед адресом электронной почты:

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

должны удовлетворить ваши потребности: 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

В РНР 5.3.0 Вы также можете использовать:

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

Это вернет всю строку от начала до первого вхождения «@». Что в этом случае:

test 
0

я использую что-то вроде этого,

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

Я использую для установки по умолчанию имя пользователя, если пользователь не установил его/ее имя в профиле.

0

Вы можете использовать strstr функцию, чтобы найти конкретное слово из строки

<?php 

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

    ?>