Qt błąd przy pracy z sqlite

0

Witam,
Pisze program z obsługą sqlite gdy przychodzi moment pobrania(sprawdzenia) danych z bazy, if w którym mam instrukcje nie wykonuje instrukcji, nigdy się nie bawiłem sqlite i zabradzo nie wiem co dalej robić

Login::Login(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::Login)
{
    ui->setupUi(this);

    mydb = QSqlDatabase::addDatabase("QSQLITE");
    mydb.setDatabaseName("C:\Users\Bartek\Documents\db\users.sqlite");

    if(mydb.open())
    {
        ui->status_label->setText("[+]Połączono");
    }
    else
    {
        ui->status_label->setText("[+]Błąd połączenia");
    }
}

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

void Login::on_pushButton_clicked()
{

    QString username, password;
    username = ui->lineEdit_username->text();
    password = ui->lineEdit_Password->text();
    ui->status_label->setText("2");
    if(!mydb.isOpen())
    {

        qDebug()<< "Błąd bazy danych";

    }
    ui->status_label->setText("2a");
    QSqlQuery qry;
    ui->status_label->setText("2b");
    if(qry.exec("SELECT username, password FROM uzytkownicy WHERE username=\'" + username + "\' AND password=\'" + password + "\'"))
    {

        ui->status_label->setText("[+]Zalogowano pomyślnie");
        QMessageBox::warning(this, ":D", ":D");

    }else
    {

        ui->status_label->setText("[-]Zła nazwa użytkownika lub hasło");

    }


}

1
mydb.setDatabaseName("C:\Users\Bartek\Documents\db\users.sqlite");

To Ci w ogóle ładuje bazę?! \ to znak kontrolny, jeśli chcesz umieścić \ jako znak, albo musisz użyć \\, albo nowości w C++11 - Raw String Literals.

qry.exec("SELECT username, password FROM uzytkownicy WHERE username=\'" + username + "\' AND password=\'" + password + "\'")

To najprostsza droga do SQL Injection. Polecam QSqlQuery i QSQLQuery::bindValue ( http://qt-project.org/doc/qt-5/qsqlquery.html#approaches-to-binding-values )

0

A jeszcze jedno pytanie czy da się zrobić żeby qt odszyfrowało sobie hasło zabezpieczone podwójnym hashowaniem hasła
sha1(md5($pass));

0

Sorry za doubla ale jeszcze jedno pytanie jak zrobić żeby program działał pod MYSQL bo gdy zmieniam

 
mydb = QSqlDatabase::addDatabase("QSQLITE");

na

mydb = QSqlDatabase::addDatabase("QMYSQL");

nie działa.

I jak zmienić żeby zamiast odczytywać z pliku łączył się z serwerem sql bo ten kod mi nie działa

  mydb.setHostName("localhost");
   mydb.setDatabaseName("feniks");
   mydb.setUserName("root");
   mydb.setPassword(""); // hasło nie ustawione ponieważ na localhoscie nie mam

Próbowałem na serwerza na cba.pl i też nie działało :(

1

Do mysql musisz mieć plugin, którego domyślnie na windowsie nie masz. Musiałbyś sobie go skompilować. http://qt-project.org/doc/qt-4.8/sql-driver.html#how-to-build-the-qmysql-plugin-on-windows

0

Dobra mam w libmysql.dll w C;\Windows i C:\Windows\System32

Ale znalazłem takie coś czy to może być przeszkodą ? bo właśnie mam windos 7 -64-bit
http://qt-project.org/forums/viewthread/27579

1 użytkowników online, w tym zalogowanych: 0, gości: 1