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 Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
gheka
Отправлено: 13 Марта, 2011 - 10:13:54
Post Id



Частый гость


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


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




Здравствуйте кто может подскажите пожалуйста как можно проверить несколько пунктов из формы.

есть функция проверки введённых данных из формы мне нужно проверить существует ли в базе данных:
Логин
Емайл
wmr кошелёк


Код выглядит таким образом:

PHP:
скопировать код в буфер обмена
  1.  
  2. function Check ($login, $email, $wmr)
  3. {              
  4.  
  5.                 $result = mysql_query ("SELECT * FROM user");
  6.                  
  7.                 if (!$result)
  8.                    die(mysql_error());
  9.                
  10.                 $n = mysql_num_rows($result);
  11.                 $arr = array();
  12.        
  13.                 for($i = 0; $i < $n; $i++)
  14.                 {
  15.                         $row = mysql_fetch_assoc($result);             
  16.                         $arr[] = $row;
  17.                 }
  18.  
  19.                 if (empty ($login) or empty ($email) or empty ($wmr))
  20.                         $error = $error . '<li>Одно или несколько обезательных полей незаполнены!</li>';       
  21.                
  22.                 if ($arr [0]['login'] == $login)
  23.                         $error = $error . '<li>Такой логин уже зарегистрирован попробуйте ввести другой!</li>';
  24.                
  25.                 if ($arr [0]['email'] == $email)
  26.                         $error = $error . '<li>Такой емайл уже зарегистрирован попробуйте ввести другой!</li>';
  27.                        
  28.                 if ($arr [0]['wmr_purse'] == $wmr)
  29.                         $error = $error . '<li>Такой WMR кошелёк уже зарегистрирован попробуйте ввести другой!</li>';
  30.                        
  31. if ($error) // Если существует ошибка то выводи её. иначе переходим ко вносу данных в базу.
  32. {
  33.     return $error;
  34. }
  35. else
  36. {
  37.    return true;
  38. }              
  39.  




Таким образам проверятся только первый результат в базе данных то есть под ключём 0 если поставить другой ключ например 1 то проверяется 2 результат.

можно конечна проверить по методу

PHP:
скопировать код в буфер обмена
  1.  "SELECT * FROM user WHERE login = $login"


и так далее для каждого пункта но это слишком длинный получается код.

Можно ли как нибудь проверить существования данных другим более простым способом.

Буду рад выслушать любые разумные мнения.
 
 Top
Саныч Модератор
Отправлено: 13 Марта, 2011 - 10:35:47
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


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




или я чего-то не понял, или действительно у вас бред написан...
Вы вытаскиваете из базы всех пользователей (5 строка), потом загоняете это все в массив, а в итоге проверяете только по первому пользователю ($arr [0])...


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
gheka
Отправлено: 13 Марта, 2011 - 11:04:41
Post Id



Частый гость


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


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




Саныч пишет:
или я чего-то не понял, или действительно у вас бред написан...
Вы вытаскиваете из базы всех пользователей (5 строка), потом загоняете это все в массив, а в итоге проверяете только по первому пользователю ($arr [0])...



Вы правильно поняли я и спрашиваю как сделать так чтобы проверять не только по первому ключу 0 но по всей таблице user.

Если поставить просто $arr ['login'] то не работает выборка вообще.

Подскажите как сделать может по другому.

(Отредактировано автором: 13 Марта, 2011 - 11:05:37)

 
 Top
SAD
Отправлено: 13 Марта, 2011 - 12:41:47
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


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




gheka пишет:
login = $login

так неправильно. $login должно быть обрамлено одинарными кавычками
 
 Top
gheka
Отправлено: 13 Марта, 2011 - 12:45:44
Post Id



Частый гость


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


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




видно никто не знает.

Но у меня всё таки получилось решить проблему таким способом.

Через цикл FOREACH.

PHP:
скопировать код в буфер обмена
  1.  
  2. foreach ($arr as $view) // вытаскиваем данные из масива в цикле foreach
  3. {
  4.                 if ($view ['login'] == $login)
  5.  
  6.                         $error = $error . '<li>Такой логин уже зарегистрирован попробуйте ввести другой!</li>';
  7.  
  8.                
  9.  
  10.                 if ($view ['email'] == $email)
  11.  
  12.                         $error = $error . '<li>Такой емайл уже зарегистрирован попробуйте ввести другой!</li>';
  13.  
  14.                        
  15.  
  16.                 if ($view ['wmr_purse'] == $wmr)
  17.  
  18.                         $error = $error . '<li>Такой WMR кошелёк уже зарегистрирован попробуйте ввести другой!</li>';
  19. }
  20.  


Если есть другие верянты наиболее правильные прошу написать.



(Добавление)
SAD пишет:
gheka пишет:
login = $login

так неправильно. $login должно быть обрамлено одинарными кавычками


Я знаю просто это был пример и кавычки пропустил но как я и писал этот метод слишком огромен в плане кода.
потому что проверять 3 поля это нужно писать з запроса.

(Отредактировано автором: 13 Марта, 2011 - 12:52:47)

 
 Top
SAD
Отправлено: 13 Марта, 2011 - 13:00:52
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


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




PHP:
скопировать код в буфер обмена
  1. mysql_query ("SELECT * FROM user where login='{$login}' or email='{$email}' or wmr_purse='{$wmr}'");

если количество отобранных записей 0, то заносим в базу

(Отредактировано автором: 13 Марта, 2011 - 13:01:33)

 
 Top
gheka
Отправлено: 13 Марта, 2011 - 14:06:55
Post Id



Частый гость


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


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




SAD пишет:
PHP:
скопировать код в буфер обмена
  1. mysql_query ("SELECT * FROM user where login='{$login}' or email='{$email}' or wmr_purse='{$wmr}'");

если количество отобранных записей 0, то заносим в базу



Да метод работает но в моём случае он мне не подходит так как.

Как вы видели в коде для удобства пользователь, выводятся разные сообщения, какой именно пункт формы совпадает с данными из базы данных.

То есть:

Если ЛОГИН существует то об этом выведется сообщения, что есть такой логин.
И если ЕМАЙЛ существует тоже об этом тоже выведет сообщения и т.д.


А этим способом проверяются все 3 поля и если хотя бы одно поля совпадёт то нужно выводить сообщения:

ЛОГИН или ЕМАЙЛ или WMR КОШЕЛЁК существует в базе данных.

И согласитесь, что именно нужно изменить непонятно и придётся перебирать пользователю до устранения ошибки.
А это не совсем правильно.

Но всё равно спасибо за ваш ответ.
 
 Top
OrmaJever Модератор
Отправлено: 13 Марта, 2011 - 15:17:04
Post Id



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


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




ну дак зделайте 3 запроса
PHP:
скопировать код в буфер обмена
  1. $login = mysql_num_rows(mysql_query ("SELECT * FROM user WHERE login='{$login}'"));
  2. $email = mysql_num_rows(mysql_query ("SELECT * FROM user WHERE email='{$email}'"));
  3. $wmr = mysql_num_rows(mysql_query ("SELECT * FROM user WHERE wmr='{$wmr}'"));

каждая переменая содержит 1 либо 0. 0 - если нету, 1 - есть запись.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
gheka
Отправлено: 13 Марта, 2011 - 15:25:21
Post Id



Частый гость


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


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




OrmaJever пишет:
ну дак зделайте 3 запроса
PHP:
скопировать код в буфер обмена
  1. $login = mysql_num_rows(mysql_query ("SELECT * FROM user WHERE login='{$login}'"));
  2. $email = mysql_num_rows(mysql_query ("SELECT * FROM user WHERE email='{$email}'"));
  3. $wmr = mysql_num_rows(mysql_query ("SELECT * FROM user WHERE wmr='{$wmr}'"));

каждая переменая содержит 1 либо 0. 0 - если нету, 1 - есть запись.


Спасибо за ответ.

Но скажите пожалуйста такой способ по быстра те обработки или ещё каким то параметра лучше приведённого мной?

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. foreach ($arr as $view) // вытаскиваем данные из масива в цикле foreach
  4. {
  5.                 if ($view ['login'] == $login)
  6.                         $error = $error . '<li>Такой логин уже зарегистрирован попробуйте ввести другой!</li>';
  7.  
  8.                 if ($view ['email'] == $email)
  9.                         $error = $error . '<li>Такой емайл уже зарегистрирован попробуйте ввести другой!</li>';
  10.  
  11.                 if ($view ['wmr_purse'] == $wmr)
  12.                         $error = $error . '<li>Такой WMR кошелёк уже зарегистрирован попробуйте ввести другой!</li>';
  13.  
  14. }
  15.  
 
 Top
SAD
Отправлено: 13 Марта, 2011 - 16:51:57
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


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




явно лучше чем ваш.
 
 Top
gheka
Отправлено: 13 Марта, 2011 - 17:04:08
Post Id



Частый гость


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


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




Спасибо всем кто отвечал на мои вопросы.
 
 Top
Саныч Модератор
Отправлено: 13 Марта, 2011 - 20:03:05
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


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




gheka пишет:
Но скажите пожалуйста такой способ по быстра те обработки или ещё каким то параметра лучше приведённого мной?

Конечно лучше... Ты только представь, если у тебя будет 1000 пользователей и ты их всех тащишь из базы, а потом еще по всем цилом проходишься... это ж бред полнейший


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
gheka
Отправлено: 13 Марта, 2011 - 21:43:57
Post Id



Частый гость


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


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




SAD пишет:
явно лучше чем ваш.


Саныч пишет:
Конечно лучше... Ты только представь, если у тебя будет 1000 пользователей и ты их всех тащишь из базы, а потом еще по всем цилом проходишься... это ж бред полнейший


Спасибо понял об этом не подумал.
 
 Top
gheka
Отправлено: 14 Марта, 2011 - 00:27:35
Post Id



Частый гость


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


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




Есть ещё небольшой вопрос.
Нормально ли делать такие проверки введённых данных в внутри функции с проверкой логина и емайл по базе данных?
Или лучше вынести их за пределы функции и делать их в контроллере.

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. if (empty ($login) or empty ($email) or empty ($wmr) or empty ($password) or empty ($password2))
  4. {
  5.         $error = $error . 'Одно или несколько обязательных полей не заполнены!';
  6. }
  7. else
  8. {
  9.         if (!$remember)
  10.         $error = $error . 'Вы не потвердили соглошения с правилами нашего сайта!';
  11.                        
  12.         if (!preg_match ("/^([a-z0-9_\.-]+)@([a-z0-9_\.-]+)\.([a-z\.]{2,6})$/", $email))
  13.                 $error = $error . 'Некорректно введён email адрес!';           
  14.                        
  15.         if (!preg_match ('/^[R][0-9]{12}/', $wmr))
  16.                 $error = $error . 'WMR кошелёк введён некорректно';
  17.                        
  18.         if ($password != $password2)
  19.                 $error = $error . 'Пароли не совпадают!';
  20.                        
  21. }
  22.  


Не сочтите меня слишком любопытным Подмигивание Просто хочется писать культурным кодом как это и должно быть чтобы не стоить велосипеды.

Прошу отвечать только опытным программистам.
 
 Top
OrmaJever Модератор
Отправлено: 14 Марта, 2011 - 01:43:34
Post Id



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


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




а какая разница где их писать? Можно хоть каждое условие в отдельном файле, главное что бы вы поняли или те люди которые будут работать с кодом.
PHP:
скопировать код в буфер обмена
  1. $error = $error . 'WMR кошелёк введён некорректно';
  2. // и
  3. $error .= 'WMR кошелёк введён некорректно';
  4. // лутше писать вторым примером.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB