как создать имя пользователя из предоставленного адреса электронной почты - PHP - PullRequest
4 голосов
/ 05 июня 2009

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

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

Пользователь поставляет gordon@yourdomain.com, я хочу сделать имя пользователя 'gordon'

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

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

Ответы [ 9 ]

13 голосов
/ 05 июня 2009

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

samename@gmail.com
samename@yahoo.com

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

5 голосов
/ 05 июня 2009

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

<?php
   $username = preg_replace('/([^@]*).*/', '$1', $email);
?>
2 голосов
/ 02 мая 2012
$username = gordon@example.com;

$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;

}
2 голосов
/ 05 июня 2009

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

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

должен сделать. Вы можете изучить регулярные выражения для задач такого типа.

Затем вы добавляете счетчик:

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;
}

ВАЖНО: Подумайте об использовании всей электронной почты в качестве имени пользователя: вы не хотите, чтобы gordon@flash.net считался равным gordon@clash.com

ПРИМЕЧАНИЕ: пример кода учитывает gordon, gordon1, gordon2, но gordonbah, gordonq, gordonxxx тоже

ПРИМЕЧАНИЕ: это довольно грубо и не должно рассматриваться как лучшая практика PHP; это просто чтобы дать общее представление

1 голос
/ 21 января 2015

Начиная с PHP 5.3.0 вы также можете использовать:

$email = 'test@stackoverflow.com';
$user = strstr($email, '@', true);

Это вернет всю строку от начала до первого вхождения '@'. Который в этом случае:

test
1 голос
/ 05 июня 2009
<?php
 preg_match('/[^@]+)@/',$email,$matches);
 $username = $matches[1];
 check_availability($username);
?>
0 голосов
/ 04 августа 2016

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

   <?php

    $username = strstr("username@domain.com",'@',true); //get text before @    
    /*    
    echo strstr("username@domain.com","@"); // get text after @
    */
     check_availability($username);

    ?>
0 голосов
/ 06 мая 2015

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

$cust_email = "test@gmail.com";
$parts = explode("@", $cust_email);
$cust_name = $parts[0];

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

0 голосов
/ 05 июня 2009

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

}
...