| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 866 人关注过本帖
标题:求助 设计用户登录 密码没错 老是显示密码错误
只看楼主 加入收藏
ruoyufan
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2015-4-14
结帖率:0
收藏
已结贴  问题点数:20 回复次数:4 
求助 设计用户登录 密码没错 老是显示密码错误
Private Sub cmdOK_Click()

txtUserName.Text = Trim(txtUserName.Text)
If txtUserName.Text = "" Then
   MsgBox " 请输入用户名!"
   Exit Sub
End If

txtPassword.Text = Trim(txtPassword.Text)
If txtPassword.Text = "" Then
   MsgBox " 请输入密码!"
   Exit Sub
End If

Dim msg, style, title, response

Dim Conn As New ADODB.Connection     '声明并实例化连接数据库对象 -- 用来连接数据库文件,并对数据库以及数据表的操作
Dim Rst As New ADODB.Recordset       '声明并实例化数据记录集对象 -- 用来返回数据记录集,并对记录的操作

'执行 ADODB.Connection对象的Open方法,完成数据库的连接
Conn.Open SQLConnecTionString1

'执行 ADODB.Recordset对象的Open方法,获得记录集
Rst.Open "Select * From 用户 Where 用户名='" & txtUserName.Text & "'", Conn, adOpenKeyset, adLockPessimistic
If Not (Rst.RecordCount >= 1) Then
   MsgBox "数据表记录为0!"
   End
End If

If Not (Rst.EOF And Rst.BOF) Then
   '检查正确的密码
   If Rst.Fields("密码") = txtPassword.Text Then
      Unload Me
      Form1.Show
   Else
      msg = "错误的登录密码!" & Chr(13) & Chr(10) & Chr(13) & Chr(10)
      style = vbRetryCancel + vbExclamation + vbDefaultButton1
      title = "提示"
      response = MsgBox(msg, style, title)
      If response = vbRetry Then
         Exit Sub
      ElseIf response = vbCancel Then
         End
      End If
   End If
Else
   msg = "错误的用户名!" & Chr(13) & Chr(10) & Chr(13) & Chr(10)
      style = vbRetryCancel + vbExclamation + vbDefaultButton1
      title = "提示"
      response = MsgBox(msg, style, title)
      If response = vbRetry Then
         Exit Sub
      ElseIf response = vbCancel Then
         End
      End If
End If

End Sub
搜索更多相关主题的帖子: 连接数据库 用户登录 输入密码 用户名 数据表 
2015-04-14 19:00
ruoyufan
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2015-4-14
收藏
得分:0 
新人求帮助
2015-04-14 19:08
梦千殇
Rank: 2
等 级:论坛游民
帖 子:49
专家分:19
注 册:2015-1-6
收藏
得分:10 
回复 楼主 ruoyufan
看看数据库连接是不是有问题啊,主要检查数据库和vb里的内容对应是否一致。
2015-04-15 09:00
梦千殇
Rank: 2
等 级:论坛游民
帖 子:49
专家分:19
注 册:2015-1-6
收藏
得分:0 
回复 楼主 ruoyufan
Private Sub Command1_Click()
Dim tempDb As clsDB
    Dim i As Integer
    Dim Bok As Boolean
    Set tempDb = New clsDB
  If Text2.Text <> "" Then
        tempDb.GetClientData "SELECT * FROM 试验用户表"
      For i = 1 To tempDb.DBcnt
        If tempDb.Db("用户姓名") = Text2.Text And tempDb.Db("用户密码") = Text3.Text Then
        CurTester = Text1.Text
        CurWordQl = tempDb.Db("用户权限")
            Bok = True
        End If
        tempDb.Db.MoveNext
      Next
  End If
  If Bok = True Then
  Dim f As Form
  Dim FF As Boolean
  For Each f In Forms
  If f.Name = "frmApp" Then
   ' MsgBox frmMsg窗体已经加载!
    FF = True
  End If
  Next
   If FF = False Then
      Unload dl1form
      
    Load phjm
   phjm.Visible = True
   Else
     Unload frmLogin
    frmApp.UserLongin
   End If
    Else
  Label1.Caption = "用户名和密码不正确,请重新输入"
  End If

End Sub

这是我写的一个登陆界面,你可以参考下啊
2015-04-15 09:02
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:10 
静态分析代码基本上没有问题。现在就是与数据库配合问题。

另外,你的代码优化方面有问题。
1、数据库连接应该只有一个。
connn 应该定义在 模块文件中 全局对象,并且在 程序初始化过程中连接好来。然后在整个程序运行过程中,都是直接调用,而不再去连接和断开的。
而 Recordset 就是在每次使用时重新生成一个。这个没错。

2、为了防止SQL注入,
Rst.Open "Select * From 用户 Where 用户名='" & txtUserName.Text & "'", Conn, adOpenKeyset, adLockPessimistic
而你这句中,如果猜得出第一个用户的密码,那么可以使用 SQL 注入的方式而不需要知道第一个用户的用户名即可以进入系统。
在输入txtUserName中输入 a' or '1'='1,就得到了:
Select * From 用户 Where 用户名='a' or '1'='1'

解决办法,要么防注入,要么二次核对。

二次核对,
   If Rst.Fields("用户名") = txtUserName.Text and Rst.Fields("密码") = txtPassword.Text Then
      Unload Me
      Form1.Show
这样就使用注入方式的无法通过二次核对。

3、提示
If Not (Rst.RecordCount >= 1) Then
   MsgBox "数据表记录为0!"
   End
End If
这里应该提示 用户名错误,而不是数据表记录为0

4、你下面有判断,也有提示,
msg = "错误的用户名!" & Chr(13) & Chr(10) & Chr(13) & Chr(10)
所以,第3点属于重复判断。
另外,我没去详细看你的 记录表打开时的参数,所以不知道你的记录表是不是支持 RecordCount 属性。

----------------------
4楼的代码,很好。

授人于鱼,不如授人于渔
早已停用QQ了
2015-04-15 10:15
快速回复:求助 设计用户登录 密码没错 老是显示密码错误
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.053600 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved