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. poseydon_2003 - 02 Апреля, 2013 - 10:11:52 - перейти к сообщению
Добрый день.
Ситуация такова:

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.  


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

В чём может быть дело? подскажите, плиз!
2. DelphinPRO - 02 Апреля, 2013 - 10:52:18 - перейти к сообщению
для генерации уникальной строки вполне подойдет такая простая функция


и проверять ничего не надо. Вероятность коллизии очень и очень низкая.
3. poseydon_2003 - 02 Апреля, 2013 - 12:03:43 - перейти к сообщению
DelphinPRO пишет:
для генерации уникальной строки вполне подойдет такая простая функция


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



Хорошо, спасибо.

 

Powered by ExBB FM 1.0 RC1