Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Функция в цикле выполняется дважды
Форумы портала PHP.SU » » Если скрипт не работает » Функция в цикле выполняется дважды

Страниц (1): [1]
 

1. StormMan - 20 Ноября, 2015 - 19:41:27 - перейти к сообщению
Друзья, я столкнулся с неожиданной, и, пожалуй, довольно ламерской проблемой.

У меня есть скрипт, который регистрирует юзеров в партнёрской системе. Все логины в этой системе уникальны, то есть у разных партнёров не могут повторяться.

Мой скрипт генерирует логин автоматически.
Сперва скрипт пытается зарегистрировать сгенерированный на основе определённых данных логин. Если регистрация получается, то ок, а если нет, то за дело берётся функция tryRegister, которая перебирает логины и пытается их регистрировать.

В этой функции сперва я проверяю в цикле функцией checkOrg, есть ли такой логин среди моих клиентов, если есть - то регистрировать не нужно.

Если нет, тогда я добавляю к логину одну букву и пытаюсь его зарегистрировать функцией regOrg, пока не кончится строка, из которой берётся буква, или пока не получится успешная регистрация. Листинг функции прилагается.

Проблема в том, что функция regOrg в цикле исполняется дважды, то есть получается две регистрации.

Что я сделал не так? Почему 2 раза?

PHP:
скопировать код в буфер обмена
  1. function tryRegister ( $user_login, $user_password, $alphabet = "78abcdefghjkmnpqrstuvwxyz" ) {
  2.         // Изменяем логин, перебором по алфавиту проверяем, не зарегистрирован ли он у нас, и если нет, пытаемся зарегистрировать, пока не зарегистрируем или не исчерпаем алфавит
  3.         $x = 0;
  4.         while ( $x < 25 ) {
  5.  
  6.                 $firstletter = $alphabet{$x}; // первая буква генерируемого логина
  7.                 $user_login = $firstletter.$user_login; //прибавляем букву к логину, чтоб не повторялся
  8.  
  9.                 # Если юзер зарегистрирован у меня, останавливаем перебор
  10.                 $checkOrgArray = checkOrg ( $user_login); // Выполняю проверку, если у меня есть такой юзер, чтобы не регистрировать повторно
  11.                 if ( $checkOrgArray['code'] == 1 ) { // Если юзер мой
  12.                         $status = 1;
  13.                         break; // Стоп перебор
  14.                 } else {
  15.                         # Если юзера удалось зарегистрировать, останавливаем перебор
  16.                         $regOrgArray = regOrg ($user_login, $user_password ); // Пытаемся зарегистрировать
  17.                         if ( $regOrgArray['code'] == 1 ) { // Если регистрация успешна, останавливаем, иначе продолжаем
  18.                                 $status = 2;
  19.                                 break; // Стоп перебор
  20.                         }
  21.                 }
  22.                
  23.                 $x++;
  24.         }
  25.  
  26.         return $status;
  27. }

 

Powered by ExBB FM 1.0 RC1