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]   

> Описание: Проверка на наличие в БД при генерации пароля
AlxB57
Отправлено: 23 Ноября, 2013 - 17:51:08
Post Id



Новичок


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


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




Всем привет!
Дано:
Генерация логина :


Проверка в БД на совпадение -
PHP:
скопировать код в буфер обмена
  1.  $query = mysql_query("SELECT COUNT(partner_id) FROM partners WHERE partner_login='".$loginpartner."'");


Условие проверки -

Вопрос как это объединить в проверку которая по возвращении значения больше нуля снова бы генерировала логин, проверяла на совпадение снова?

Как я понял мне нужен цикл. Я думаю так:

PHP:
скопировать код в буфер обмена
  1. $query = mysql_query("SELECT COUNT(partner_id) FROM partners WHERE partner_login='".$loginpartner."'");
  2.  
  3. do {
  4.  
  5. $loginpartner =  mt_rand(100000, 999999);
  6.  
  7. } while (mysql_result($query, 0) > 0);


Правильно ли эта конструкция? Если нет помогите составить, пожалуйста.

Т.е. чего я хочу:

1. Генерю логин партнера mt_rand
2. Проверяю сгенеренный логин селектом на наличие совпадений в БД
2.1. Если есть такой логин, то:
2.1.1 Снова генерю логин.
2.1.2. Снова проверяю.
3. Если такого логина (который был сгенерирован в п.1) нет в БД, пишу его в БД

И все проверки должны быть без echo! т.е. скрипт сам проверяет и сам генерирует, до момента удовлетворения условиям.

PS Если я изобретаю велосипед подскажите как это сделать без изобретений Улыбка

(Отредактировано автором: 23 Ноября, 2013 - 17:52:59)

 
 Top
teddy
Отправлено: 23 Ноября, 2013 - 17:56:50
Post Id


Участник


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


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




а что мешает запихнуть генерацию в цикл, сделать колонку которая должна быть уникальной UNIQUE и использовать INSERT IGNORE?

ну а если хочется оставить все как есть, тогда можно так прямо цикле(если массовая добавка значений и нужные только уникальные)
//тут селект на проверку
if(!$row){//если запрос ничего не вернул(значит такого логина нет)
//тут скрипт для генерации
}
если я вас правильно понял то лучше используйте первый вариант

(Отредактировано автором: 23 Ноября, 2013 - 17:57:30)

 
 Top
_Dark_
Отправлено: 23 Ноября, 2013 - 18:08:44
Post Id


Частый гость


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


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

[+]


Не проще использовать для логина текущий ID (auto_increment) ?
Он гарантировано будет уникальный и не нужно никаких циклов.

Правда, сама идея генерации логика немного непонятна.
 
 Top
AlxB57
Отправлено: 23 Ноября, 2013 - 18:33:24
Post Id



Новичок


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


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




_Dark_ Логин рандомное число от 100000 до 999999. По порядку не подходит. Я хочу чтобы было случайное число.

teddy Можете код привести?
(Добавление)
teddy Вот так правильно?
PHP:
скопировать код в буфер обмена
  1.  
  2. # проверяем, не сущестует ли пользователя с таким именем
  3. $loginpartner =  mt_rand(100000, 999999);
  4. $query = mysql_query("SELECT COUNT(partner_id) FROM partners WHERE partner_login='".$loginpartner."'");
  5.  
  6. while (mysql_result($query, 0) > 0) {
  7.  
  8.     $loginpartner =  mt_rand(100000, 999999);
  9. };
 
 Top
_Dark_
Отправлено: 23 Ноября, 2013 - 18:55:33
Post Id


Частый гость


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


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

[+]


AlxB57 пишет:
_Dark_ Логин рандомное число от 100000 до 999999. По порядку не подходит. Я хочу чтобы было случайное число.

Какой смысл, если рано или поздно все равно они будут по порядку?
С увеличением числа зарегистрированных пользователей увеличивается и время поиска свободного логина, эта идея не очень, я вам скажу.
(Добавление)
AlxB57 пишет:
Вот так правильно?

Неправильно, запрос каждый раз необходимо делать заново.
В этом и проблема.
 
 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