1stPK Posted 3 hours ago Share Posted 3 hours ago in my program, at the Register interface, when I fill in all the information, press confirm and it exits the program expandcollapse popup#include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <WinAPIFiles.au3> #include <WindowsConstants.au3> #include <Array.au3> #include <GUIConstants.au3> #include <GDIPlus.au3> #include <WinAPIGdi.au3> #include <String.au3> ; File lưu thông tin người dùng Global $sFilePath = @ScriptDir & "\users.ini" GUICreate("Đăng nhập", 300, 150) ; Tên đăng nhập $lblUsernameText = GUICtrlCreateLabel("Tên đăng nhập:", 10, 10, 100, 20) $inputUsername = GUICtrlCreateInput("", 120, 10, 125, 20, $ES_LEFT) ; Mật khẩu $lblPasswordText = GUICtrlCreateLabel("Mật khẩu:", 10, 40, 100, 20) ; Ô nhập mật khẩu với viền $inputPassword = GUICtrlCreateInput("", 120, 40, 125, 20, BitOR($ES_PASSWORD, $WS_BORDER)) ; Biểu tượng mắt ẩn hiện mật khẩu Local $idEye = GUICtrlCreatePic("Hide.bmp", 250, 40, 20, 20), $bHide = True Local $iDefault = GUICtrlSendMsg($inputPassword, $EM_GETPASSWORDCHAR, 0, 0) $btnLogin = GUICtrlCreateButton("Login", 10, 80, 130, 30) $btnRegister = GUICtrlCreateButton("Register", 150, 80, 130, 30) $lblStatus = GUICtrlCreateLabel("", 10, 120, 270, 20) ; Label ID đăng nhập và nút đăng xuất $lblUserID = GUICtrlCreateLabel("", 50, 50, 270, 20) $btnLogout = GUICtrlCreateButton("Đăng xuất", 100, 100, 100, 30) GUICtrlSetState($btnLogout, $GUI_HIDE) ; Ẩn nút đăng xuất GUICtrlSetState($lblUserID, $GUI_HIDE) ; Ẩn label "ID đăng nhập" ; Gán phím Enter cho nút đăng nhập HotKeySet("{ENTER}", "Login") GUISetState() While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $btnRegister ShowRegisterGUI() Case $btnLogin Login() Case $btnLogout Logout() Case $idEye ; Chuyển đổi trạng thái hiển thị mật khẩu If $bHide Then GUICtrlSendMsg($inputPassword, $EM_SETPASSWORDCHAR, 0, 0) GUICtrlSetImage($idEye, "Show.bmp") Else GUICtrlSendMsg($inputPassword, $EM_SETPASSWORDCHAR, $iDefault, 0) GUICtrlSetImage($idEye, "Hide.bmp") EndIf $bHide = Not $bHide GUICtrlSetState($inputPassword, $GUI_FOCUS) ; Giữ tiêu điểm ở ô nhập EndSwitch WEnd ; Hàm Đăng ký tài khoản Func ShowRegisterGUI() ; Tạo giao diện đăng ký Local $hRegisterGUI = GUICreate("Đăng ký tài khoản", 350, 300) GUICtrlCreateLabel("ID:", 10, 10, 100, 20) Local $inputID = GUICtrlCreateInput("", 120, 10, 200, 20) GUICtrlCreateLabel("Mật khẩu:", 10, 40, 100, 20) Local $inputPass = GUICtrlCreateInput("", 120, 40, 200, 20, $ES_PASSWORD) GUICtrlCreateLabel("Email:", 10, 70, 100, 20) Local $inputEmail = GUICtrlCreateInput("", 120, 70, 200, 20) GUICtrlCreateLabel("Số điện thoại:", 10, 100, 100, 20) Local $inputPhone = GUICtrlCreateInput("", 120, 100, 200, 20) GUICtrlCreateLabel("Quốc gia:", 10, 130, 100, 20) Local $inputCountry = GUICtrlCreateInput("", 120, 130, 200, 20) Local $btnSubmit = GUICtrlCreateButton("Confirm", 50, 200, 100, 30) Local $btnCancel = GUICtrlCreateButton("Cancel", 200, 200, 100, 30) GUISetState(@SW_SHOW, $hRegisterGUI) ; Biến kiểm tra trạng thái Local $bFormValid = True Local $sFilePath = @ScriptDir & "\users.ini" ; Đường dẫn đến file .ini While 1 Local $nRegisterMsg = GUIGetMsg() Switch $nRegisterMsg Case $GUI_EVENT_CLOSE GUIDelete($hRegisterGUI) Return Case $btnCancel GUIDelete($hRegisterGUI) Return Case $btnSubmit ; Lấy dữ liệu từ các ô nhập Local $sID = GUICtrlRead($inputID) Local $sPass = GUICtrlRead($inputPass) Local $sEmail = GUICtrlRead($inputEmail) Local $sPhone = GUICtrlRead($inputPhone) Local $sCountry = GUICtrlRead($inputCountry) ; Reset lại biến kiểm tra tính hợp lệ $bFormValid = True ; Kiểm tra ID hợp lệ If Not IsValidID($sID) Then MsgBox(16, "Lỗi", "ID không hợp lệ! ID phải có ít nhất 6 ký tự và chỉ chứa chữ và số, không có dấu, khoảng trắng và ký tự đặc biệt.") $bFormValid = False EndIf ; Kiểm tra mật khẩu hợp lệ If Not IsValidPassword($sPass) Then MsgBox(16, "Lỗi", "Mật khẩu không hợp lệ! Mật khẩu không được chứa khoảng trắng hoặc dấu.") $bFormValid = False EndIf ; Kiểm tra email hợp lệ If Not IsValidEmail($sEmail) Then MsgBox(16, "Lỗi", "Email không hợp lệ! Vui lòng nhập email đúng định dạng.") $bFormValid = False EndIf ; Kiểm tra số điện thoại hợp lệ If Not IsValidPhone($sPhone) Then MsgBox(16, "Lỗi", "Số điện thoại không hợp lệ! Vui lòng nhập số điện thoại hợp lệ.") $bFormValid = False EndIf ; Kiểm tra quốc gia hợp lệ If Not IsValidCountry($sCountry) Then MsgBox(16, "Lỗi", "Quốc gia không hợp lệ! Quốc gia chỉ được chứa chữ và khoảng trắng.") $bFormValid = False EndIf ; Kiểm tra nếu có trường thông tin nào còn trống If $sID = "" Or $sPass = "" Or $sEmail = "" Or $sPhone = "" Or $sCountry = "" Then MsgBox(16, "Lỗi", "Vui lòng điền đầy đủ thông tin!") $bFormValid = False EndIf ; Kiểm tra nếu ID, email hoặc số điện thoại đã tồn tại trong file .ini If FileExists($sFilePath) Then ; Kiểm tra ID đã tồn tại chưa Local $sUserData = IniRead($sFilePath, "Users", $sID, "") If $sUserData <> "" Then MsgBox(16, "Lỗi", "ID đã tồn tại! Vui lòng chọn ID khác.") $bFormValid = False EndIf ; Kiểm tra email đã tồn tại chưa Local $sEmailCheck = IniRead($sFilePath, "Emails", $sEmail, "") If $sEmailCheck <> "" Then MsgBox(16, "Lỗi", "Email đã tồn tại! Vui lòng sử dụng email khác.") $bFormValid = False EndIf ; Kiểm tra số điện thoại đã tồn tại chưa Local $sPhoneCheck = IniRead($sFilePath, "PhoneNumbers", $sPhone, "") If $sPhoneCheck <> "" Then MsgBox(16, "Lỗi", "Số điện thoại đã được sử dụng! Vui lòng nhập số khác.") $bFormValid = False EndIf Else ; Nếu file không tồn tại, tạo mới file INI IniWrite($sFilePath, "Users", "", "") IniWrite($sFilePath, "Emails", "", "") IniWrite($sFilePath, "PhoneNumbers", "", "") EndIf ; Kiểm tra nếu thông tin hợp lệ mới tiến hành lưu If $bFormValid Then ; Mã hóa mật khẩu Local $sHashedPass = HashPassword($sPass) ; Lưu thông tin vào file .ini IniWrite($sFilePath, "Users", $sID, $sHashedPass & "|" & $sEmail & "|" & $sPhone & "|" & $sCountry) IniWrite($sFilePath, "Emails", $sEmail, $sID) ; Lưu email và ID tương ứng IniWrite($sFilePath, "PhoneNumbers", $sPhone, $sID) ; Lưu số điện thoại và ID tương ứng MsgBox(64, "Thành công", "Đăng ký thành công!") GUIDelete($hRegisterGUI) ; Đóng GUI khi tất cả hợp lệ Return EndIf EndSwitch WEnd EndFunc ; Hàm mã hóa mật khẩu bằng SHA256 Func HashPassword($sPass) Return _Crypto_Hash($sPass, $CALG_SHA_256) EndFunc ; Hàm kiểm tra ID hợp lệ (Ít nhất 6 ký tự, không có dấu, khoảng trắng và ký tự đặc biệt) Func IsValidID($sID) Local $sPattern = "^[a-zA-Z0-9]{6,}$" ; ID phải có ít nhất 6 ký tự và chỉ chứa chữ và số Return StringRegExp($sID, $sPattern) EndFunc ; Hàm kiểm tra mật khẩu hợp lệ (Không chứa khoảng trắng và dấu) Func IsValidPassword($sPass) Local $sPattern = "^[^\x20\x21\x23-\x2B\x2D\x2E\x2F\x3A-\x3B\x3C\x3D\x3F\x5C\x5E\x5F\x60\x7B\x7C\x7D\x7E\x22\x27]+$" Return StringRegExp($sPass, $sPattern) EndFunc ; Hàm kiểm tra email hợp lệ Func IsValidEmail($sEmail) Local $sPattern = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$" Return StringRegExp($sEmail, $sPattern) EndFunc ; Hàm kiểm tra số điện thoại hợp lệ Func IsValidPhone($sPhone) Local $sPattern = "^\+?\d{10,15}$" Return StringRegExp($sPhone, $sPattern) EndFunc ; Hàm kiểm tra quốc gia hợp lệ Func IsValidCountry($sCountry) Local $sPattern = "^[a-zA-Z\s]+$" Return StringRegExp($sCountry, $sPattern) EndFunc ; Hàm Đăng nhập Func Login() Local $sUsername = GUICtrlRead($inputUsername) Local $sPassword = GUICtrlRead($inputPassword) ; Kiểm tra thông tin đăng nhập If FileExists($sFilePath) Then Local $sUserData = IniRead($sFilePath, "Users", $sUsername, "") If $sUserData <> "" Then Local $aUserInfo = StringSplit($sUserData, "|") If $aUserInfo[1] = $sPassword Then MsgBox(64, "Đăng nhập thành công", "Chào mừng, " & $sUsername) ; Hiển thị ID người dùng đã đăng nhập GUICtrlSetState($lblUserID, $GUI_SHOW) GUICtrlSetData($lblUserID, "ID: " & $sUsername) ; Ẩn các trường nhập liệu và nút đăng nhập, đăng ký GUICtrlSetState($inputUsername, $GUI_HIDE) GUICtrlSetState($inputPassword, $GUI_HIDE) GUICtrlSetState($btnLogin, $GUI_HIDE) GUICtrlSetState($btnRegister, $GUI_HIDE) GUICtrlSetState($idEye, $GUI_HIDE) ; Ẩn các label "Tên đăng nhập" và "Mật khẩu" GUICtrlSetState($lblUsernameText, $GUI_HIDE) GUICtrlSetState($lblPasswordText, $GUI_HIDE) ; Hiển thị nút đăng xuất GUICtrlSetState($btnLogout, $GUI_SHOW) Else MsgBox(16, "Đăng nhập thất bại", "Mật khẩu sai.") EndIf Else MsgBox(16, "Đăng nhập thất bại", "Tên đăng nhập không tồn tại.") EndIf EndIf EndFunc ; Hàm Đăng xuất Func Logout() GUICtrlSetState($inputUsername, $GUI_SHOW) GUICtrlSetState($inputPassword, $GUI_SHOW) GUICtrlSetState($btnLogin, $GUI_SHOW) GUICtrlSetState($btnRegister, $GUI_SHOW) GUICtrlSetState($idEye, $GUI_SHOW) GUICtrlSetState($lblUsernameText, $GUI_SHOW) GUICtrlSetState($lblPasswordText, $GUI_SHOW) GUICtrlSetState($lblUserID, $GUI_HIDE) GUICtrlSetState($btnLogout, $GUI_HIDE) EndFunc Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now