#include "dialogloginuseradd.h" #include "ui_dialogloginuseradd.h" #include #include "mainwindow.h" DialogLoginUserAdd::DialogLoginUserAdd(QWidget *parent) : QDialog(parent), ui(new Ui::DialogLoginUserAdd) { setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog | Qt::Popup); ui->setupUi(this); ui->lineEdit_Password->setEchoMode(QLineEdit::Password); ui->lineEdit_Password_Confirm->setEchoMode(QLineEdit::Password); ui->label_Password_Check->setVisible(false); ui->lineEdit_ID->setFocus(); } DialogLoginUserAdd::~DialogLoginUserAdd() { delete ui; } void DialogLoginUserAdd::on_pushButton_OK_clicked() { QString strID = ui->lineEdit_ID->text(); QString strPassword = ui->lineEdit_Password->text(); QString strPasswordConfirm = ui->lineEdit_Password_Confirm->text(); if(strPassword!=strPasswordConfirm) { ui->label_Password_Check->setVisible(true); } else { ui->label_Password_Check->setVisible(false); bool bSuccess = false; // 1. 이 작업을 위한 지역 DB 인스턴스를 생성합니다. SUTIL::SDatabase db(QString("AddUser_%1").arg(reinterpret_cast(this))); if (db.OpenDatabase("/home/birdhead/test.db") == 0) // 0이 성공 { // 2. 파라미터 바인딩을 사용하여 SQL Injection을 완벽하게 방어합니다. QString query = "INSERT INTO LoginUser (LoginID, LoginPassword) VALUES (?, ?);"; QVariantList params; params << strID << strPassword; // 3. ExecuteNonQuery의 반환 값(bool)을 확인하여 작업 성공 여부를 판단합니다. if (db.ExecuteNonQuery(query, params)) { bSuccess = true; } else { // INSERT 실패 시 (예: 동일한 ID가 이미 존재할 경우) 사용자에게 오류를 알립니다. QMessageBox::warning(this, "Creation Failed", "Failed to add new user.\nThe ID might already exist."); } } else { QMessageBox::critical(this, "Database Error", "Could not connect to the database."); } // 4. 데이터베이스 작업이 성공했을 때만 다이얼로그를 닫습니다. if (bSuccess) { done(QDialog::Accepted); } } } void DialogLoginUserAdd::on_pushButton_Cancel_clicked() { done(QDialog::Rejected); }