уникальный случайный идентификатор - PullRequest
0 голосов
/ 17 мая 2010

Я создаю уникальный идентификатор для своего небольшого приложения, но я столкнулся с проблемой variable scope мой код -

function create_id()
{  
global $myusername;  
$part1 = substr($myusername, 0, -4);  
$part2 = rand (99,99999);  
$part3 = date("s");  
return $part1.$part2.$part3;  
}

$id;  
$count=0;

while($count == 1)  
{  
$id;  
$id=create_id();  
$sqlcheck = "Select * FROM ruser WHERE userId='$id';";  
$count =mysql_query($sqlcheck,$link)or die(mysql_error());  
}  


echo $id;  

Я не знаю, какую переменную я должен объявить как global

Ответы [ 3 ]

4 голосов
/ 17 мая 2010

Это не похоже на проблему с переменной областью, это похоже на простую задачу присвоения переменной:

$count=0;
while($count == 1)
{

Этот блок явно никогда не будет выполнен.

Далее, пожалуйста, используйте логическое имя с хорошим именем при выполнении логических проверок. Это выглядит намного чище. i.e.:

function isUniqueUserID($userIDToCheck)
{
    $sqlcheck = "Select * FROM user WHERE userId='$userIDToCheck';";  
    $resource = mysql_query($sqlcheck)or die(mysql_error()); 
    $count = mysql_fetch_assoc($resource);
    if( count($count) > 0)
    {return false;}

    return true;
}


$userIDVerifiedUnique = false;
while(! $userIDVerifiedUnique )
{
     $userIDToCheck = create_id();
     $userIDVerifiedUnique = isUniqueUserID($userIDToCheck );
}

Обратите внимание, что mysql_query будет использовать последнее использованное соединение, если вы не укажете ссылку: http://us2.php.net/mysql_query Нет необходимости делать его глобальным.

3 голосов
/ 17 мая 2010

в дополнение к ответу Зака, я бы передал имя пользователя в функцию вместо использования глобалов

function create_id($username)
{
    $part1 = substr($username, 0, -4);  
    $part2 = rand (99,99999);  
    $part3 = date("s");  
    return $part1.$part2.$part3;  
}

также

//$id;  no need for this
$count=1; // this bit

while($count == 1)   // not sure what's going on
{  
//$id; again same thing  no need for this
$id=create_id($myusername);

edit: Теперь, когда я думаю об этом: как вы ожидаете найти "Select * FROM ruser WHERE userId='$id';"? Запрос Select используется, чтобы найти что-то конкретное, ваше имя пользователя настолько случайное, что я думаю, что вероятность успешного получения записи составляет 1 в баджиллионе.
edit2 упс, я вижу, что весь смысл в том, чтобы получить уникальное имя пользователя ... O_O

2 голосов
/ 17 мая 2010

В дополнение к остальным:

$count =mysql_query($sqlcheck,$link)or die(mysql_error());  

mysql_query не возвращает количество записей, а скорее ресурс.

mysql_query

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...