我正在尝试创建一个登录/注册系统。
这是注册用户表单。
Private Sub regReg_Click()
Dim TextFile As Integer
Dim FilePath As String
If regAParole.Text = "aparole" Then
FilePath = ThisWorkbook.Path & "accounts.txt"
TextFile = FreeFile
Open FilePath For Append As #1
Print #TextFile, regID; regAmats; regParole
Close TextFile
MsgBox ("Registracija veiksmiga.")
Unload Registracija
Else
MsgBox ("Nepareiza administratora parole.")
End If
End Sub
"aparole"基本上只是在字段中输入一个关键字,因此只有管理员才能创建新帐户。
accounts.txt内容看起来像:
1董事密码(ID+职位+密码)
这就是身份验证:
Private Sub logAuth_Click()
Dim TextFile As Integer
Dim FilePath As String
Dim FileContent As String
Dim find As String
Dim result As Integer
find = logID & logAmats & logParole
FilePath = ThisWorkbook.Path & "accounts.txt"
TextFile = FreeFile
Open FilePath For Input As TextFile
FileContent = Input(LOF(TextFile), TextFile)
result = InStr(FileContent, find)
If result >= 1 Then
MsgBox ("Autorizacija veiksmiga!") ' Success
Unload Autorizacija
End If
基本上,当登录时,我会在accounts.txt中搜索注册时使用的字符串组合(ID+jobposition+密码)。因此,总的来说,这种方法是有效的,但是:
如果我输入的所有东西都完全匹配=效果很好
如果我输入了一半的密码,就像1DirectorPass的格式一样,它仍然有效,那么基本上我怎么能知道只搜索整个字符串而不搜索它的部分呢?
我认为问题在于InStr…
您可以测试文件内容中的换行标记,如下所示:
result = InStr(vbCrLf & FileContent, vbCrLf & find & vbCrLf)
这将只匹配完整的行。在文件内容之前添加一个额外的换行符,这样第一行也可以匹配。在文件内容的末尾,您已经有了一个vbCrLf
字符,因为Print
应该添加这个字符。