thầy giáo cho e hỏi về ví dụ nhập username và password trong bài giảng ạ:
- Bắt buộc phải liệt kê bảng danh sách account (username và pass) sẵn trên file ah? Như vậy thì người khác thấy được luôn sẽ không còn bảo mật
Về bản chất bạn cần có 1 danh sách Username, password để kiểm tra, đối chiếu xem người dùng nhập đúng hay không. Bạn có thể làm theo 2 cách:
- Cách 1: Đặt tại 1 vùng ô trong 1 Sheet => Ẩn sheet này bằng TeenSSheet.Visible = xlSheetVeryHidden (người dùng sẽ không tự mở ẩn được theo cách thông thường, phải mở ẩn trong VBA)
- Cách 2: bạn có thể đưa trực tiếp vào VBA dưới dạng hằng số (mã hóa username, password bằng 1 đoạn ký tự nào đó cố định) => kiểm tra username, password khi nhập có giống với các hằng số này không. Cách này phức tạp hơn nhưng không có liên quan gì tới Sheet (thuần VBA) và có tính bảo mật cao hơn (được mã hóa riêng) => Tuy nhiên cách lập trình phức tạp và rất dễ bị quên, sai sót.
Do đó mình hướng dẫn cách làm dễ hiểu (là show hết ra) để khi học chúng ta dễ theo dõi, dễ hiểu nguyên lý. Còn trong quá trình ứng dụng thực tế các bạn cần bảo vệ kỹ vùng UserName, password đó để tránh người khác tự ý truy cập vào file (nhưng chú ý là rất nhiều người giỏi phá mã, kể cả VBA nên chủ yếu cách này ngăn chặn những người dùng phổ thông thôi bạn nhé).
Chào bạn bạn có thể để account đó trong một file khác dạng như access hoặc mã hoá mật khẩu lại bằng function
- với cách 1 của G-Learning thì e cũng đã nghĩ đến, còn cách 2 thì phức tạp e sẽ tìm hiểu thêm sau
- còn với cách của thầy Tuấn BA, thầy có thể nói rõ hơn được không ah?
+ ví dụ như kết nối access với VBA như thế nào để code nó chạy
+ hoặc nếu mã hóa bằng function thì mình viết function nào được ah
Chào bạn với các sử dụng access làm dữ liệu bạn cần biết về sql còn cách sử dụng function mã hoá bạn có thể tham khảo mã hoá bằng md5 hoặc sha256 hoặc sha512
vâng, cho e hỏi về 2 vấn đề này nữa ah:
- vòng lặp Do While không giới hạn số lần lặp, vậy ở ví dụ trong bài giảng có cần thiết thêm điều kiện i < 110 không ah? Vì e đang thấy là mình đang giới hạn i = 108 to i < 110 thì nó lại giống vòng lặp For Next
- bình thường thì người ta sẽ chỉ để 1 username + password thôi, thì lúc này không dùng được vòng lặp Do While đúng không ah?
Chào bạn vòng lặp Do While thì bạn phải có biến để so sánh đúng sai ở đây nên bạn muốn lặp từ 101 đến 111 chẳng hạn thì bạn cần bắt đầu i=101 và điều kiện i<=111
bạn hoàn toàn có thể thêm nhiều use vào nhé nhưng đièu kiện bạn bắt ở đây là mỗi use là duy nhất sẽ có các pass khác nhau đầu tiên bạn load use vào trước (dùng combobox)nếu đúng thì bắt đầu lặp pass để so sánh
- ở câu 1 thì e vẫn thấy nó giống vòng lặp For :)) e có thử dùng vòng lặp For vào ví dụ trên thì code nó chỉ chạy đúng 1 trường hợp, thầy xem giúp e
Sub Login_confirm()
Dim i As Integer
For i = 108 To 109
If Sheets(1).Range("B3").Value = "" Or Sheets(1).Range("B6").Value = "" Then
MsgBox "Vui long nhap du thong tin UserName va Password"
ElseIf Sheets(1).Range("B3").Value = Sheets(1).Range("F" & i).Value And _
Sheets(1).Range("B6").Value = Sheets(1).Range("G" & i).Value Then
MsgBox "Dang nhap thanh cong"
Else
MsgBox "Dang nhap khong thanh cong"
Exit Sub
End If
Next i
End Sub
Chào bạn bạn cần thêm điều kiện and nữa để bắt thêm trường hợp mật khẩu nhé.
Chào bạn bạn có thể đẩy file lên được không?
Chào bạn bạn sửa lại code như sau
Option Explicit
Sub Login_confirm()
Dim i As Integer
For i = 3 To 4
If Sheets(1).Range("B3").Value = "" Or Sheets(1).Range("B6").Value = "" Then
MsgBox "Vui long nhap du thong tin UserName va Password"
Exit Sub
ElseIf Sheets(1).Range("B3").Value = Sheets(1).Range("F" & i).Value And _
Sheets(1).Range("B6").Value = Sheets(1).Range("G" & i).Value Then
MsgBox "Dang nhap thanh cong"
Exit Sub
End If
Next i
MsgBox "Dang nhap khong thanh cong"
End Sub
e cảm ơn ạ
Chúc bạn học tốt cùng gitiho