Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Разработка баз данных _ Авторизация (Qt + MySql)

Автор: Vexar 15.12.2009, 6:11

Возникла задача организовать авторизацию средствами 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.

Автор: CrackedMind 15.12.2009, 6:19

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

Автор: Vexar 15.12.2009, 6:51

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


1. хэш убрал для лучшей читаемости кода.
2. В том то и дело что не знаю как проверить есть ли результаты после выполнения запроса.

Автор: Kagami 15.12.2009, 9:06

if (QueryOnline.next()) {
// авторизация прошла
} else {
// не прошла
}

Автор: Серый_Ветер 4.1.2016, 17:48

Добрый день.

Можете подсказать по вашему примеру авторизации....

        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

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

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

у меня есть ощущение, что ты вообще не понимаешь, что пишешь. "замена не помогла" потому что понимания не появилось, судя по всему.
начни с чтения документации по С++ и Qt. причём читать надо долго и обстоятельно. С++ с Qt - это не вижуал бейсик и не PHP, это нельзя изучить за два дня. и писание чего попало наугад в коде здесь не поможет.

Автор: AD 11.1.2016, 11:09

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

Автор: Алексей1153 12.1.2016, 7:55

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


добро пожаловать, sql-инъекция!

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)