Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Авторизация (Qt + MySql)
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Разработка баз данных
Vexar
Возникла задача организовать авторизацию средствами 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
1) Во-первых, нафига хранить пароль в базе в открытом виде? Лушче уж MD-5 хэш.
2) Во-вторых, mysql сам все сделает, вам остается только проверить, есть ли результаты после выполнения запроса. Если нет, то авторизация не прошла...
Vexar
Цитата(CrackedMind @ 15.12.2009, 13:19) *
1) Во-первых, нафига хранить пароль в базе в открытом виде? Лушче уж MD-5 хэш.
2) Во-вторых, mysql сам все сделает, вам остается только проверить, есть ли результаты после выполнения запроса. Если нет, то авторизация не прошла...


1. хэш убрал для лучшей читаемости кода.
2. В том то и дело что не знаю как проверить есть ли результаты после выполнения запроса.
Kagami
if (QueryOnline.next()) {
// авторизация прошла
} else {
// не прошла
}
Серый_Ветер
Добрый день.

Можете подсказать по вашему примеру авторизации....
        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
ui->label->setText(insertRow(ui->label->setText->rowCount()));

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

у меня есть ощущение, что ты вообще не понимаешь, что пишешь. "замена не помогла" потому что понимания не появилось, судя по всему.
начни с чтения документации по С++ и Qt. причём читать надо долго и обстоятельно. С++ с Qt - это не вижуал бейсик и не PHP, это нельзя изучить за два дня. и писание чего попало наугад в коде здесь не поможет.
AD
В строке QueryOnline.exec( "SELECT * FROM User WHERE ... синтаксическая ошибка в кавычках. Убедитесь в их корректности, как минимум.
Алексей1153
Цитата
QueryOnline.exec( "SELECT * FROM users WHERE login='"+strName+"' AND password='"+strPass+"'" );


добро пожаловать, sql-инъекция!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.