SVG5/dialogloginuseradd.cpp
2025-10-12 13:55:56 +09:00

79 lines
2.4 KiB
C++

#include "dialogloginuseradd.h"
#include "ui_dialogloginuseradd.h"
#include <QMessageBox>
#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<quintptr>(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);
}