уникальный случайный идентификатор

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

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

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

 $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 Не нужно делать ее глобальной.

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

 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';" ? Выбирающий запрос используется для поиска чего-то определенного, ваше имя пользователя настолько случайное, я думаю, что вероятный капюшон, фактически успешно получающий запись, равен 1 в бай-дионе.
edit2 whoops , я вижу, что все дело в том, чтобы получить уникальное имя пользователя … O_O

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

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

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

mysql_query