Поиск:

Ответ в темуСоздание новой темы Создание опроса
> QT и Postgre, Регистрация в приложении 
:(
    Опции темы
Belirafor
Дата 8.1.2011, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 15.8.2009

Репутация: нет
Всего: нет



Здравствуйте Уважаемые программисты. Пишу курсовую на QT с использованием PostgreSQL. 

Задача:
Реализовать на каком-либо языке программирования прототип командного процессора, снабженного механизмом защиты на уровне пользователя с применением метода паролей или его модификаций. 

Я пишу на QT с использованием PostgreSQL. Проблема возникла в пункте: "Регистрация и аутентификация в системе". Тут проблема состоит в том, что нужно реализовать такую схему:

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

Сперва хотелось бы разобраться с тем, каким образом мне сравнивать введенные данные с хранимыми в БД. Например, для начала, с логином. А уже потом с паролями. Ниже привожу код окна авторизации:
Код

#include "auth_window.h"
#include "ui_auth_window.h"
#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QTextCodec>
#include <QMessageBox>

#include <QtSql>
#include <QSqlQuery>
#include <QSqlQueryModel>

auth_window::auth_window(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::auth_window)
{
    QTextCodec::setCodecForTr(QTextCodec::codecForName("cp1251"));
    ui->setupUi(this);

//= Подключаемся к базе данных ==================================
    QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
    db.setHostName("localhost");
    db.setDatabaseName("tarova_db");
    db.setUserName("belirafor");
    db.setPassword("Rdfpfh1983");
//===============================================================

    if(!db.open())
    {
        QMessageBox::critical(parent, QObject::tr("Ошибка"), db.lastError().text());
        exit(0);
    }
}

auth_window::~auth_window()
{
    delete ui;
}

void auth_window::on_pushButton_login_clicked()
{
    if(ui->lineEdit_login->text() == "" || ui->lineEdit_password->text() == "")
    {
        QMessageBox::information(this, tr("Информация"), tr("Заполните поля \"Логин\" и \"Пароль\" "));
    }

    else
    {
        QSqlQuery query;
        query.exec("SELECT * FROM users_tbl");
        while (query.next())
        {
//            query.value(0).toInt();
            query.value(1).toString();
//            query.value(2).toString();
//            query.value(3).toString();
        }

        auth_window::hide();
        MainWindow *mainwin = new MainWindow;
        mainwin->show();
    }

}

void auth_window::on_pushButton_exit_clicked()
{
    exit(0);
}



Тут код SQL:
Код

CREATE TABLE users_tbl ( 
uid SERIAL,
gid varchar(1),
login VARCHAR(24), 
info_user VARCHAR(255), 
PRIMARY KEY(uid)); 
 
INSERT INTO users_tbl(gid, login, info_user) VALUES ('A', 'root', 'Это админ');
INSERT INTO users_tbl(gid, login, info_user) VALUES ('U', 'user1', 'Простой пользователь');
INSERT INTO users_tbl(gid, login, info_user) VALUES ('U', 'user2', 'Обычный пользователь');



Заранее спасибо!
PM MAIL   Вверх
borisbn
Дата 8.1.2011, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



1) В чём вопрос то ?
2) SELECT * - не камильфо. При изменении таблицы будет трабл.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Belirafor
Дата 8.1.2011, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 15.8.2009

Репутация: нет
Всего: нет



Хотелось бы увидеть всю конструкцию с запросом, который позволит для начала авторизоваться по логину.
PM MAIL   Вверх
arial
Дата 8.1.2011, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 772
Регистрация: 11.3.2003
Где: Архангельская обл .

Репутация: нет
Всего: 7



Цитата
Например, для начала, с логином.

Цитата
const QString queryText = QLatin1String("SELECT 1 FROM users_tbl WHERE login = ?");
if (!query.prepare(queryText)) {
    qDebug() << trUtf8("query prepare error: %1").arg(database.lastError().text());
    return false;
}
query.addBindValue(QLatin1String("user1"));
if (!query.exec()) {
    qDebug() << trUtf8("query execution error: %1").arg(query.lastError().text());
    return false;
}
if (!query.first()) {
    qDebug() << trUtf8("Login not found");
    return false;
}
return true;



--------------------
Есть люди, в которых живет Бог. Есть люди, в которых живет дьявол. А есть люди, в которых живут только глисты. (Ф. Раневская)
PM ICQ   Вверх
Belirafor
Дата 14.1.2011, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 15.8.2009

Репутация: нет
Всего: нет



Решил так:

Код

QSqlQuery query;
        QString myQuery = "select users_tbl.uid,password_tbl.uid from users_tbl,password_tbl where login = '";
        myQuery += ui->lineEdit_login->text();
        myQuery += "' and password = '";
        myQuery += ui->lineEdit_password->text();
        myQuery += "' and users_tbl.uid = password_tbl.uid";
        qDebug() << myQuery;
        query.exec(myQuery);
        query.next();

        if (query.size())
        {
        //= Выводим окно MainWindow на экран ======================
            auth_window::hide();
            MainWindow *mainwin = new MainWindow;
            mainwin->show();
        //=========================================================


Всем спасибо за помощь.
PM MAIL   Вверх
arial
  Дата 15.1.2011, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 772
Регистрация: 11.3.2003
Где: Архангельская обл .

Репутация: нет
Всего: 7



Лучше байндить параметры запроса, как в моём примере выше. Это правильней.


--------------------
Есть люди, в которых живет Бог. Есть люди, в которых живет дьявол. А есть люди, в которых живут только глисты. (Ф. Раневская)
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0673 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.