1. Tải bản cài đặt AutoIT mới nhất

    Chào Khách. Nếu bạn mới tham gia và chưa cài đặt AutoIT.
    Vui lòng vào topic trên để tải bản AutoIT mới nhất nhé
    Dismiss Notice
  2. Quy định và nội quy

    Chào Khách. Vui lòng đọc kỹ nội quy và quy định của diễn đàn
    Để tránh bị ban một cách đáng tiếc nhé!
    Dismiss Notice
  3. Hướng dẫn chèn mã AutoIT trong diễn đàn

    Chào Khách. Vui lòng xem qua bài viết này
    Để biết cách chèn mã AutoIT trong diễn đàn bạn nhé :)
    Dismiss Notice

Hỏi đáp Lỗi nhỏ khi tạo GUI login với file ini

Thảo luận trong 'Thảo luận chung - Hỏi đáp' bắt đầu bởi Hoàng Tuân, 1/10/17.

  1. Hoàng Tuân

    Hoàng Tuân Thành viên
    • 8/11

    Tham gia ngày:
    9/1/16
    Bài viết:
    82
    Đã được thích:
    11
    Như tittle, e có file acc.ini
    [admin]
    matkhau=admin
    [vovanhoangtuan]
    matkhau=test

    Trong đó: SectionName (admin, vovanhoangtuan) là tài khoản, còn matkhau là mật khẩu

    Em muốn code gui login nếu đúng thì xuất ra msg đúng còn lỗi thì xuất ra 1 lỗi
    Mã (AutoIt):

    If GUICtrlRead($taikhoan) = '' Or GUICtrlRead($matkhau) = '' Then
        MsgBox(16, 'Thông báo', 'Vui lòng nhập tài khoản hoặc mật khẩu')
    Else
        Global $username = IniReadSectionNames(@ScriptDir & '\Data\database.ini')
        For $i = 1 To $username[0]
            If GUICtrlRead($taikhoan) = $username[$i] And GUICtrlRead($matkhau) = IniRead(@ScriptDir & '\Data\database.ini', $username[$i], 'matkhau', '') Then
                MsgBox(64, 'Thông báo', 'Đã đăng nhập thành công')
            Else
                MsgBox(64, 'Thông báo', 'Lỗi')
            EndIf
        Next
    EndIf
     
    e chỉ muốn nó xuất ra msgbox 1 lần thôi
     
  2. Huân Hoàng

    Huân Hoàng Administrator Thành viên BQT Administrator Super Moderator
    • 93/113

    Tham gia ngày:
    29/9/15
    Bài viết:
    642
    Đã được thích:
    1,181
    Giải thuật thiếu một chút nữa thôi là hoàn chỉnh:

    - Nếu khớp Account điền vào thì hiện Msgbox đăng nhập thành công và thoát lặp (dò đúng Acc rồi thì dừng lặp thôi tìm chi nữa)
    MsgBox(64,'Thông báo','Đã đăng nhập thành công') sẽ viết thành:
    Exitloop MsgBox(64,'Thông báo','Đã đăng nhập thành công')

    - Bỏ đoạn:
    Else
    MsgBox(64,'Thông báo','Lỗi')​
    EndIf
    đi vì không lẽ mỗi vòng lặp mới cứ không khớp thì lại hiện lỗi, ở đây iêm nói thêm về For là thým hiểu ngay (Không biết thým biết chưa). Ví dụ:
    For $i = 0 to 2
    Next
    MsgBox(4096, '$i là bao nhiêu', $i)​
    → Đáp án $i là 3, có nghĩa là nếu $i chạy suôn sẻ (không bị exitloop) thì sau khi thoát For $i sẽ bằng $i cuối + 1. Còn nếu có Exitloop thì $i sẽ bằng giá trị tại thời điểm bị dừng lặp.
    → Sau khi thoát For...Next mình dùng If kiểm tra nếu $i > $username[0] hoặc nói cách khác $i = $username[0] + 1 thì có nghĩa không tài khoản nào trùng với mình điền (chứ nếu trùng thì bị exitloop rồi và $i sẽ < hoặc = $username[0])

    Mã (AutoIt):
    If GUICtrlRead($taikhoan) = '' Or GUICtrlRead($matkhau) = '' Then
        MsgBox(16, 'Thông báo', 'Vui lòng nhập tài khoản hoặc mật khẩu')
    Else
        Global $username = IniReadSectionNames(@ScriptDir & '\Data\database.ini')
        For $i = 1 To $username[0]
            If GUICtrlRead($taikhoan) = $username[$i] And GUICtrlRead($matkhau) = IniRead(@ScriptDir & '\Data\database.ini', $username[$i], 'matkhau', '') Then ExitLoop MsgBox(64, 'Thông báo', 'Đã đăng nhập thành công')
        Next
        If $i > $username[0] Then MsgBox(64, 'Thông báo', 'Lỗi')
    EndIf

    P/S: Thým phức tạp hoá vấn đề quá nên code trở nên dài dòng (mặc dù không sai), thực tế thì chỉ cần như thế này là đủ:
    Mã (AutoIt):
    $username = GUICtrlRead($taikhoan)
    $pass = GUICtrlRead($matkhau)
    If $username = '' Or $pass = '' Then
        MsgBox(16, 'Thông báo', 'Vui lòng nhập tài khoản hoặc mật khẩu')
    Else
        If IniRead(@ScriptDir & '\Data\database.ini', $username, 'matkhau', '') = $pass Then
            MsgBox(64, 'Thông báo', 'Đã đăng nhập thành công')
        Else
            MsgBox(64, 'Thông báo', 'Đã đăng nhập thất bại')
        EndIf
    EndIf
    Vì:
    - Sai $username thì IniRead trả về rỗng → chắc chắn không khớp mật khẩu (vì $username và $pass không thể là rỗng với điều kiện bên trên) → MsgBox(Thất bại)
    - Đúng $username nhưng sai mật khẩu → IniRead <> $pass → Msgbox(Thất bại)
    - Đúng $username, đúng mật khẩu→ IniRead = $pass → Khớp → Msgbox(Thành công)
     
  3. Hoàng Tuân

    Hoàng Tuân Thành viên
    • 8/11

    Tham gia ngày:
    9/1/16
    Bài viết:
    82
    Đã được thích:
    11
    cảm ơn thím đã thông não giúp :))
     
  4. Hoàng Tuân

    Hoàng Tuân Thành viên
    • 8/11

    Tham gia ngày:
    9/1/16
    Bài viết:
    82
    Đã được thích:
    11
    sẵn đây hỏi thím luôn :)
    e có file dap_an.ini
    [Cauhoi1]
    Dapandung=3
    1=Write(<tên tệp>,<danh sách biến>);
    2=Write(<tên biến tệp>,<danh sách biến>);
    3=Read(<tên biến tệp>,<danh sách biến>);
    4=Read(<tên tệp>,<danh sách biến>);
    Cauhoi=Để đọc dữ liệu từ tệp văn bản ta có thể sử dụng thủ tục:

    e tạo radio 4 đáp án
    nếu đúng thì điểm cộng thêm 5
    sai thì điểm = 0
    bác giúp e vs ạ
     
  5. Huân Hoàng

    Huân Hoàng Administrator Thành viên BQT Administrator Super Moderator
    • 93/113

    Tham gia ngày:
    29/9/15
    Bài viết:
    642
    Đã được thích:
    1,181
    Thým vẫn chưa nói rõ là có random câu hỏi không, random câu trả lời không nên cơ bản code sẽ như ví dụ đính kèm :v
     

    Các file đính kèm:

    • Quiz.zip
      Kích thước:
      3.1 KB
      Đọc:
      9
  6. Hoàng Tuân

    Hoàng Tuân Thành viên
    • 8/11

    Tham gia ngày:
    9/1/16
    Bài viết:
    82
    Đã được thích:
    11
    ramdom cả câu hỏi vs câu trả lời luôn ạ
     
  7. Hoàng Tuân

    Hoàng Tuân Thành viên
    • 8/11

    Tham gia ngày:
    9/1/16
    Bài viết:
    82
    Đã được thích:
    11
    anh giúp e với ạ,
    e muốn lấy cái giá trị mà có 4 radio
    A
    B
    C
    D
    vd chọn radio A xong ấn button Start nó xuất msg là A
     

Chia sẻ trang này

Đang tải...