2010-05-17 3 views
0

Я генерирую уникальный идентификатор для моего небольшого приложения, но перед лицом переменная область проблема. мой код-уникальный случайный идентификатор

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

есть много проблем с этим кодом – knittl

+0

Вы Getter лучше с практикой, хотя :) – Zak

+0

любопытно, что случилось с auto_increment? – mmattax

ответ

4

Это не выглядит как переменная проблемы области видимости, это выглядит как простая переменной задача Назначает:

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

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

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

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 Нет необходимости, чтобы сделать его глобальным.

+2

Почему вы хотите создать уникальный идентификатор таким образом, я понятия не имею ... может быть, потому что позже вы хотите установить куки-файл, который трудно угадать? Лучше всего использовать уже созданную функцию sessionID ... Кроме того, вы должны, вероятно, прочитать раздел безопасности php-сессии в документах: http://us2.php.net/manual/en/session.security.php – Zak

+0

* * Неустранимая ошибка: ** Максимальное время выполнения на 60 секунд превышено в C: \ xampp \ htdocs \ 303 \ rand.php – nectar

+0

ok, какова ваша первая мысль о том, как узнать, почему это занимает более 60 секунд? Почему бы вам не задать новый вопрос, объясняющий, что вы делаете, и проблему, с которой вы сталкиваетесь. Включите новый полный исходный код для страницы. Это даст вам возможность получить новую репутацию по новому вопросу. – Zak

3

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

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

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

2

В дополнение к другим:

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

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

mysql_query

Смежные вопросы