Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

2 страниц V   1 2

Запросы PDO

[РЕШЕНО]
Статус пользователя AZA
сообщение 4.8.2016, 6:38
Сообщение #1


Стаж: 11 лет

Сообщений: 479
Благодарностей: 173
Полезность: 490

Приветствую,не могу понять почему добавляет пользователя 2 раза в бд после регистрации.В чем причина?

Код
//Фильтруем $_POST и убираем html символы с input
$login=filter_input(INPUT_POST, 'login',FILTER_SANITIZE_FULL_SPECIAL_CHARS);
$pass=filter_input(INPUT_POST, 'pass',FILTER_SANITIZE_FULL_SPECIAL_CHARS);
$pass2=filter_input(INPUT_POST, 'pass2',FILTER_SANITIZE_FULL_SPECIAL_CHARS);
$acitev_button=filter_input(INPUT_POST, 'acitev_button',FILTER_SANITIZE_FULL_SPECIAL_CHARS);

$resul=$pdo->prepare("SELECT * FROM `user` ORDER BY `user`.`login` ASC");
$resul->execute();
$data = $resul->fetchAll();

if (isset($login) && $login==!$data['login'] && isset($pass) && isset($pass2) && $pass==$pass2 && $login!=$pass2 && isset($acitev_button)){
    
  $pass2=null;
  $login=trim($login);
  $pass=trim($pass);
  $pass=password_hash($pass,PASSWORD_BCRYPT);
   $pdo->query("INSERT INTO user (login,pass) VALUES('$login','$pass')");
  }


Отредактировал: AZA, - 4.8.2016, 6:38


*
* puk
*
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя onotole
сообщение 4.8.2016, 8:53
Сообщение #2


Иконка группы

Стаж: 13 лет

Сообщений: 1572
Благодарностей: 1119
Полезность: 1550

Меценат Меценат

$data = $resul->fetchAll();
Это тут зачем?

а, понял

Либо ты не весь код показал, либо отправляешь 2 запроса
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
voed
сообщение 4.8.2016, 13:12
Сообщение #3
Стаж: 11 лет

Сообщений: 2593
Благодарностей: 1760
Полезность: 405

Код
$resul=$pdo->prepare("SELECT * FROM `user` ORDER BY `user`.`login` ASC");

Как-то странно запрос выглядит smile.gif
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
MpAimPro
сообщение 4.8.2016, 14:51
Сообщение #4
Стаж: 9 лет
Город: Минск

Сообщений: 827
Благодарностей: 205
Полезность: 253

Меценат Меценат

$pdo->query("INSERT INTO user (login,pass) VALUES('$login','$pass') LIMIT 1");

Ограничь выполнение запроса только 1 раз. Мб и поможет.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя oxoTHuk.
сообщение 4.8.2016, 15:03
Сообщение #5


Иконка группы

Стаж: 17 лет

Сообщений: 879
Благодарностей: 515
Полезность: 867

MpAimPro, идеальный выход хД Зачем выяснять, если можно ограничить хД

AZA, вероятно, где-то цикл упустил (показать нам). Сделай вывод в var_dump() переменной $login сразу после объявления. Там и будет ясно, в запросе явно нет ничего такого.
voed, что там странного? Вроде все в норме и в селекте тоже.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя MarVal
сообщение 4.8.2016, 15:04
Сообщение #6


Стаж: 12 лет

Сообщений: 197
Благодарностей: 54
Полезность: 73

Цитата(MpAimPro @ 4.8.2016, 16:51) *
$pdo->query("INSERT INTO user (login,pass) VALUES('$login','$pass') LIMIT 1");

Ограничь выполнение запроса только 1 раз. Мб и поможет.


кратко: INSERT and LIMIT => error.

Отредактировал: MarVal, - 4.8.2016, 15:04
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
MpAimPro
сообщение 4.8.2016, 15:09
Сообщение #7
Стаж: 9 лет
Город: Минск

Сообщений: 827
Благодарностей: 205
Полезность: 253

Меценат Меценат

MarVal,
Уже увидел, сор, кароче ограничить запрос

oxoTHuk.,
А что тут думать? Вызывается функция 2жды по нажатию на кнопку регистрации. Или ограничить запрос в бд, или сделать по нажатию редикрект на авторизованную страницу

Отредактировал: MpAimPro, - 4.8.2016, 15:11
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя MarVal
сообщение 4.8.2016, 15:12
Сообщение #8


Стаж: 12 лет

Сообщений: 197
Благодарностей: 54
Полезность: 73

AZA, Еще один момент, по приведенному коду, вы используете только "login" из таблицы "user", вместо * напишите сразу "SELECT `login` FROM ...
P.S. к проблеме это не относится.

Отредактировал: MarVal, - 4.8.2016, 15:13
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
voed
сообщение 4.8.2016, 15:33
Сообщение #9
Стаж: 11 лет

Сообщений: 2593
Благодарностей: 1760
Полезность: 405

oxoTHuk., может я не так понял, но:
Код
$resul=$pdo->prepare("SELECT * FROM `user` ORDER BY `user`.`login` ASC"); // получаем данные ВСЕХ пользователей

$login==!$data['login'] // сравниваем МАССИВ с логинами и СТРОКУ с текущим логином
$login=trim($login) // юзаем трим уже после сравнения, в итоге логины до и после сравнения будут отличаться

Эти два действия меня немного смущают
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя oxoTHuk.
сообщение 4.8.2016, 16:01
Сообщение #10


Иконка группы

Стаж: 17 лет

Сообщений: 879
Благодарностей: 515
Полезность: 867

voed, тут все правильно. $login из поста приходит. В условии он сравнивает его с первым из выборки по критериям. Очевидно, что select скорее всего возвращает кучу значений, и я предпоолагаю, тут нужен цикл. Но пока автор не озвучит полность что нужно на выходе, точно не скажу =)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя AZA
сообщение 4.8.2016, 18:35
Сообщение #11


Стаж: 11 лет

Сообщений: 479
Благодарностей: 173
Полезность: 490

Собственно я чуток переделал,теперь работает так ищем логин,потом проверяем если массив пуст,то заносим в базу.

$resul=$pdo->prepare("SELECT login FROM `user` WHERE `login` = ?");
$resul->execute([$login]);
$data = $resul->fetchAll();

И спасибо onotole и ykpon за подсказки :)

Отредактировал: AZA, - 4.8.2016, 18:36


*
* puk
*
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя onotole
сообщение 4.8.2016, 20:58
Сообщение #12


Иконка группы

Стаж: 13 лет

Сообщений: 1572
Благодарностей: 1119
Полезность: 1550

Меценат Меценат

AZA, В этом случае лучше fetch(). Ну, это, конечно, если логин у тебя уникален
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
nekosoku
сообщение 4.8.2016, 21:14
Сообщение #13
Стаж: 9 лет

Сообщений: 171
Благодарностей: 52
Полезность: < 0

onotole, если не ошибаюсь, в случае с fetchAll() нужный результат запроса будет в элементе массива с ключом 1.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя oxoTHuk.
сообщение 5.8.2016, 8:18
Сообщение #14


Иконка группы

Стаж: 17 лет

Сообщений: 879
Благодарностей: 515
Полезность: 867

nekosoku, fetchAll выдаст все совпадения, fetch только одно.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя onotole
сообщение 5.8.2016, 9:41
Сообщение #15


Иконка группы

Стаж: 13 лет

Сообщений: 1572
Благодарностей: 1119
Полезность: 1550

Меценат Меценат

Цитата(nekosoku @ 4.8.2016, 22:14) *
onotole, если не ошибаюсь, в случае с fetchAll() нужный результат запроса будет в элементе массива с ключом 1.

С ключем 0, 1, 2, ... n
В зависимости от количества результатов
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя MarVal
сообщение 5.8.2016, 10:59
Сообщение #16


Стаж: 12 лет

Сообщений: 197
Благодарностей: 54
Полезность: 73

Я так понимаю, что логин должен быть уникален, поэтому лучше в SELECT делать LIMIT 1, зачем искать еще по базе.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
nekosoku
сообщение 5.8.2016, 11:01
Сообщение #17
Стаж: 9 лет

Сообщений: 171
Благодарностей: 52
Полезность: < 0

oxoTHuk., я знаю что выдаст fetchAll. Только в запросе, где условие подразумевает уникальный результат, fetchAll и fetch равнозначны, а вот мой вопрос совсем о другом.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя onotole
сообщение 5.8.2016, 15:23
Сообщение #18


Иконка группы

Стаж: 13 лет

Сообщений: 1572
Благодарностей: 1119
Полезность: 1550

Меценат Меценат

Цитата(nekosoku @ 5.8.2016, 12:01) *
oxoTHuk., я знаю что выдаст fetchAll. Только в запросе, где условие подразумевает уникальный результат, fetchAll и fetch равнозначны, а вот мой вопрос совсем о другом.

Сравни время выполнения fetch и fetchAll, и скажи после этого, что они идентичны)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя default1k
сообщение 5.8.2016, 15:35
Сообщение #19
Стаж: 12 лет

Сообщений: 718
Благодарностей: 180
Полезность: 153

Код
Result :
fetchAll : 0.160676956177s, 118539304b
fetch : 0.121752023697s, 118544392b


Отредактировал: default1k, - 5.8.2016, 15:36
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя onotole
сообщение 5.8.2016, 20:56
Сообщение #20


Иконка группы

Стаж: 13 лет

Сообщений: 1572
Благодарностей: 1119
Полезность: 1550

Меценат Меценат

Цитата(default1k @ 5.8.2016, 16:35) *
Код
Result :
fetchAll : 0.160676956177s, 118539304b
fetch : 0.121752023697s, 118544392b

А теперь умножь это в среднем на 10 выборок + время исполнения других операций. Хотя что я говорю, это же пхп...

0,1 секунды... У тебя там что, пентиум 3 чтоли? =))
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
2 страниц V   1 2
 
Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: