2016-10-09 8 views
0
void admin::on_login_a_clicked() 
{ 
    QString usr,pass; 
    usr = ui->Au->text(); 
    pass = ui->Ap->text(); 
    // usr.toStdString() ; 
    // pass.toStdString() ; 
    qDebug() << usr; 
    QSqlQuery sq; 
    if(sq.exec("select username,password from admin as a where a.username ='"+ usr +"'")) 
    { 

     ui->con->setText("Logged in successfully"); 
    } 
    else 
    { 
     ui->con->setText("Login Failure"); 
    } 
} 

私はデシベルLITEデータSQを接続し、それが文法的間違いか教えてくださいの他の種類があるので、私はQtののいずれかの機能については考えているインターネットからのこのクエリを書いています。このコードの問題は、 'usr'がデータベースに存在しなくてもログインを継続することです。Qtのログインコードは正しく

+0

変更

if(sq.exec("select username,password from admin as a where a.username ='"+ usr +"'")){ //user exists } 

あなたは手の込んだていただけます。 –

+0

はい私はそれをやっていたが、ユーザ名はその文字列の一部は、ユーザの入力である場合にも特にない、SQLクエリを形成するために、文字列の連結を使用してはならない –

+1

一意であるので、それは問題ではありません。 代わりに 'QSqlQuery :: prepare()'と値バインディングを使用してください。 –

答えて

1

sq.exec()の実行は常に成功するので、それはあなたのケースでは常に真です(クエリが成功したか実行された場合、むしろそれを示すためにfalseを/ trueを返す、返されたレコードがあるか否かを示すものではありません)。

クエリの結果をナビゲートするために、あなたは)(sq.nextを使用する必要があります。あなたの場合、sq.next()はユーザ名が存在しなければfalseを返します。それ以外の場合はtrueを返します。

sq.exec("select username,password from admin as a where a.username ='"+ usr +"'")); 
if (sq.next()) { //user exists } 
+0

ありがとうございました。 –

+0

これを説明していただけますか? –

+0

@SaqibKhan明確ではないものはありますか? – HazemGomaa

関連する問題