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