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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Не работает скрипт

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
poseydon_2003
Отправлено: 02 Апреля, 2013 - 10:11:52
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Февр. 2013  


Помог: 0 раз(а)




Добрый день.
Ситуация такова:

1. При регистрации пользователя в таблицу mysql записывается произвольная строка, которая отправляется пользователю на почту вместе со ссылкой на мой сайт.
2. Пользователь кликает по этой ссылке, далее php сверяет эту ссылку с базой данных, и, если такая строка найдена в БД, то пользователь регистрируется, а произвольная строка напротив его имени обнуляется.

Вот в чём вопрос: как мне сделать проверку, существует ли только что созданная произвольная строка в БД?
И, если она существует, то надо сгенерировать новую.

Вот мой код на PHP & MySQL:

PHP:
скопировать код в буфер обмена
  1.  
  2. $temp = substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 20); #формирую строку
  3. $p = 0;
  4. $res = mysql_query("SELECT temp FROM clients", $link);
  5. while($n = mysql_fetch_array($res)){    #записываю столбец из БД с произвольными строками
  6.         $r[] = $n['temp'];
  7. }              
  8. foreach($r as $name){       #проверяю на существование такой же строки
  9.         if ($name == $temp){
  10.                 $p = 1;
  11.         }
  12. }
  13. if ($p == 1){       #если такая есть, то генерирую новую пока она не станет уникальной
  14.                 do {
  15.                 $temp = substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 20);
  16.                 $p = 0;
  17.                 foreach($r as $name){
  18.                         if ($name == $temp){
  19.                         $p = 1;
  20.                         }
  21.                 }
  22.         }
  23.         while ($p != 1);                       
  24. }
  25. unset ($r);    
  26. echo $temp;
  27.  


Оно кагбы работает, но только один раз. Тоесть вновь созданная строка, когда у меня в БД она уже есть, то формируеся новая, но она уже не переверяется.

В чём может быть дело? подскажите, плиз!
 
 Top
DelphinPRO
Отправлено: 02 Апреля, 2013 - 10:52:18
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




для генерации уникальной строки вполне подойдет такая простая функция


и проверять ничего не надо. Вероятность коллизии очень и очень низкая.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
poseydon_2003
Отправлено: 02 Апреля, 2013 - 12:03:43
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Февр. 2013  


Помог: 0 раз(а)




DelphinPRO пишет:
для генерации уникальной строки вполне подойдет такая простая функция


и проверять ничего не надо. Вероятность коллизии очень и очень низкая.



Хорошо, спасибо.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB