Daedrikus
Новичок
Повторяющиеся результаты функций по генерированию уникальных значений
Здравствуйте, у меня возникла проблема с регулярно повторяющимися результатами работы класса.
Есть класс с функциями генерирования логинов и паролей.
Есть скрипт по записи того что он сгенерировал в БД, но только вот проблема возникает в том что результаты начинают повторятся. Причем блоками. По 151 запись. Перезапуск скрипта не дает результатов. При перезапуске Apache появляется порядка 20 новых записей, потом опять те же что уже были при предыдущем запуски (так показывает сравнение с таблицей в БД в которой такие логины уже есть).
Пытался найти ответ в мануале и тут на форуме. Наверное плохо искал
Подозрения падают на кеширования результатов работы класса / функций.
Спасибо.
Здравствуйте, у меня возникла проблема с регулярно повторяющимися результатами работы класса.
Есть класс с функциями генерирования логинов и паролей.
Есть скрипт по записи того что он сгенерировал в БД, но только вот проблема возникает в том что результаты начинают повторятся. Причем блоками. По 151 запись. Перезапуск скрипта не дает результатов. При перезапуске Apache появляется порядка 20 новых записей, потом опять те же что уже были при предыдущем запуски (так показывает сравнение с таблицей в БД в которой такие логины уже есть).
Пытался найти ответ в мануале и тут на форуме. Наверное плохо искал
Подозрения падают на кеширования результатов работы класса / функций.
PHP:
<?php
class TextGeneration {
var $ABC = Array(
'0' => Array (
'A', 'E', 'I', 'J', 'O', 'Q', 'U', 'Y'
),
'1' => Array (
'B', 'C', 'D', 'F', 'G', 'H', 'K', 'L', 'M', 'N', 'P', 'R', 'S', 'T', 'V', 'W', 'X', 'Z'
),
'2' => Array (
'1', '2', '3', '4', '5', '6', '7', '8', '9', '0'
),
);
var $MinLoginLength = 4;
var $MaxLoginLength = 8;
var $PasswordLength = 10;
public function LoginGeneration () {
$LoginLength = rand ($this->MinLoginLength, $this->MaxLoginLength - 1);
$Login = '';
$A = rand (0, 1);
for ($i = 1; $i <= $LoginLength; $i++) {
if (isset($B) && $B == 2) {
$B = 1;
} else {
$B = rand (1, 2);
}
if ($B == 1) {
$Login .= $this->ABC[$A][array_rand($this->ABC[$A])];
if ($A == 0) {$A = 1;} else {$A = 0;}
} else {
$index1 = array_rand($this->ABC[$A]);
$Login .= $this->ABC[$A][$index1];
$index2 = array_rand($this->ABC[$A]);
if ($index2 == $index1) {
$ABC = $this->ABC;
unset($ABC[$A][$index2]);
$index2 = array_rand($this->ABC[$A]);
}
$Login .= $this->ABC[$A][$index2];
$i++;
if ($A == 0) {$A = 1;} else {$A = 0;}
}
}
$Login = strtolower($Login);
if (rand (0, 1) == 1) {
$Login = ucfirst($Login);
}
return $Login;
}
public function PasswordGeneration () {
$Password = '';
for ($i = 1; $i <= $this->PasswordLength; $i++) {
if (isset($A)) {
$A = rand(0, 2);
} else {
$A = rand(0, 1);
}
$B = rand(0, 1);
if ($B == 0) {
$Password .= strtolower($this->ABC[$A][array_rand($this->ABC[$A])]);
} else {
$Password .= strtoupper($this->ABC[$A][array_rand($this->ABC[$A])]);
}
}
return $Password;
}
}
?>
<?php
class NewUsers {
var $MaxGenerateUsers = 1000;
private function GenerateUsers($new_users_count) {
global $mysql, $TG;
echo '<TABLE border=0 cellspacing=1 cellpadding=5 width=100% bgcolor=#CCCCCC>';
for ($u = 1; $u <= $new_users_count; $u++) {
$Login = $TG->LoginGeneration();
$Passwd = $TG->PasswordGeneration();
$result = $mysql->query('SELECT `id` FROM `users` WHERE `login` = "'.$Login.'"');
if (mysql_num_rows($result) > 0) {
echo '<TR valign="top" bgcolor=#FF0000>';
} else {
$mysql->query('INSERT INTO `users` (
`login`,
`passwd`
) VALUES (
"'.$Login.'",
"'.$Passwd.'"
);');
echo '<TR valign="top" bgcolor=#FFFFFF>';
}
echo '<TD>'.$u.'</TD>';
echo '<TD>'.$Login.'</TD>';
echo '<TD>'.$Passwd.'</TD>';
echo '</TR>';
}
echo '</TABLE><BR>';
}
function __construct() {
if (isset($_POST['gen'])) {
if ($_POST['new_users_count'] > $this->MaxGenerateUsers) {$_POST['new_users_count'] = $this->MaxGenerateUsers;}
$this->GenerateUsers($_POST['new_users_count']);
}
echo '<FORM method="POST">';
echo 'Колличество новых пользователей: <INPUT type="text" name="new_users_count">';
echo '<INPUT type="submit" name="gen" value="Сгенерировать">';
echo '</FORM>';
}
}
?>