crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Авторизация (Qt + MySql)
Vexar
  опции профиля:
сообщение 15.12.2009, 6:11
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 24
Регистрация: 28.11.2008
Пользователь №: 438

Спасибо сказали: 0 раз(а)




Репутация:   0  


Возникла задача организовать авторизацию средствами Qt и Mysql
В теорию как органищовать знаю а вот на практике что-то не выходит.

На бросал тут не большой код, а что дальше делать не знаю.

void LoginSysDialog::AddUserLine()
{
    QString strName = LineEditName->text();
    QString strPass = LineEditPass->text();

    QSqlQuery QueryOnline;
    QueryOnline.exec( "SELECT * FROM users WHERE login='"+strName+"' AND password='"+strPass+"'" );
}

Нужно как то через if и else. Если логин с паролем совпали то if если нет то else.
Причина редактирования: используй тэг code
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
CrackedMind
  опции профиля:
сообщение 15.12.2009, 6:19
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 44
Регистрация: 13.3.2009
Пользователь №: 611

Спасибо сказали: 7 раз(а)




Репутация:   0  


1) Во-первых, нафига хранить пароль в базе в открытом виде? Лушче уж MD-5 хэш.
2) Во-вторых, mysql сам все сделает, вам остается только проверить, есть ли результаты после выполнения запроса. Если нет, то авторизация не прошла...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Vexar
  опции профиля:
сообщение 15.12.2009, 6:51
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 24
Регистрация: 28.11.2008
Пользователь №: 438

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(CrackedMind @ 15.12.2009, 13:19) *
1) Во-первых, нафига хранить пароль в базе в открытом виде? Лушче уж MD-5 хэш.
2) Во-вторых, mysql сам все сделает, вам остается только проверить, есть ли результаты после выполнения запроса. Если нет, то авторизация не прошла...


1. хэш убрал для лучшей читаемости кода.
2. В том то и дело что не знаю как проверить есть ли результаты после выполнения запроса.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Kagami
  опции профиля:
сообщение 15.12.2009, 9:06
Сообщение #4


Старейший участник
****

Группа: Участник
Сообщений: 601
Регистрация: 2.2.2009
Пользователь №: 523

Спасибо сказали: 101 раз(а)




Репутация:   9  


if (QueryOnline.next()) {
// авторизация прошла
} else {
// не прошла
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Серый_Ветер
  опции профиля:
сообщение 4.1.2016, 17:48
Сообщение #5


Новичок


Группа: Новичок
Сообщений: 2
Регистрация: 4.1.2016
Пользователь №: 4512

Спасибо сказали: 0 раз(а)




Репутация:   0  


Добрый день.

Можете подсказать по вашему примеру авторизации....
        if (db.open()){
             QSqlQuery QueryOnline;
             QueryOnline.exec( "SELECT * FROM User WHERE login='"+strName+"' AND passwd='"+strPass+"'" );
             if (QueryOnline.next()) {
             // авторизация прошла
                 ui->label->setText("OK");
             } else {
             // не прошла
                 ui->label->setText("CANCEL");
             }
        }else{ //Если нет - выводим сообщение об ошибке

        }

вот в таком виде все работает....

а в таком:
        if (db.open()){
             QSqlQuery QueryOnline;
             QueryOnline.exec( "SELECT name FROM User WHERE login='"+strName+"' AND passwd='"+strPass+"' LIMIT 0, 1);
             if (QueryOnline.next()) {
             // авторизация прошла
                 ui->label->setText(insertRow(ui->label->setText->rowCount()));
             } else {
             // не прошла
                 ui->label->setText("CANCEL");
             }
        }else{ //Если нет - выводим сообщение об ошибке

        }


работать отказывается, можете подсказать, что и как и на что подправить нужно? нужно чтобы поле name из запроса вставилось в label

не помогла также замена

ui->label->setText(insertRow(ui->label->setText->rowCount()));
на
ui->label->setText(QueryOnline.value.toString());



p.s. прошу прощения за некропостинг... не заметил сразу.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 10.1.2016, 12:51
Сообщение #6


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


ui->label->setText(insertRow(ui->label->setText->rowCount()));

вообще говоря, это синтаксический бред. набор вызовов, слепленных без какого-либо смысла.

у меня есть ощущение, что ты вообще не понимаешь, что пишешь. "замена не помогла" потому что понимания не появилось, судя по всему.
начни с чтения документации по С++ и Qt. причём читать надо долго и обстоятельно. С++ с Qt - это не вижуал бейсик и не PHP, это нельзя изучить за два дня. и писание чего попало наугад в коде здесь не поможет.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 11.1.2016, 11:09
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


В строке QueryOnline.exec( "SELECT * FROM User WHERE ... синтаксическая ошибка в кавычках. Убедитесь в их корректности, как минимум.

Сообщение отредактировал AD - 11.1.2016, 11:09
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 12.1.2016, 7:55
Сообщение #8


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Цитата
QueryOnline.exec( "SELECT * FROM users WHERE login='"+strName+"' AND password='"+strPass+"'" );


добро пожаловать, sql-инъекция!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.11.2024, 9:23