注册 登录
编程论坛 ASP.NET技术论坛

怎么验证输入的密码和数据库里的一样啊 .呜呜

晋加答 发布于 2008-04-03 10:38, 2419 次点击
[bo]怎么验证输入的密码和数据库里的一样啊 .呜呜.
还是sql数据库的
不会做,唉.
我怎么那么差劲啊

[/bo]
26 回复
#2
srym2008-04-03 10:40
按用户名称读取数据库查询密码,在用查询出来的密码和页面上密码框里的值去比较,如果一致就可以登录,如果不一致就是密码错了,如果查询数据库的时候没有查到密码,说明没有这个用户。!
#3
晋加答2008-04-03 10:54
我也知道这么做啊
可是不知道怎么编程啊,呵呵
具体是,不知道怎么把密码读出来?
#4
sldtk12008-04-03 11:03
只是针对楼主的查密码,所以省略了用户名的验证
[CODE]
using System.Data.SqlClient;  //引入命名空间
//创建数据库连接,database为数据库名称,uid为用户名,pwd为密码server=.代表连接的服务器是本机
SqlConnection con = new SqlConnection("server=.;database=;uid=;pwd=");
con.Open();    //打开数据库连接
SqlCommand cmd = new SqlCommand("select count(*) from User where  userpwd=" + this.TextBoxPassword.Text, con);//User是自己创建的一个表
int count = Convert.ToInt32(cmd.ExecuteScalar());  //将返回的对象类型转化为数据类型
if (count > 0)  //判断是否有数据返回
{
    Response.Write("<script>alert('密码正确!')</script>");
}
else
{
    Response.Write("<script>alert('密码错误!')</script>");
}
con.Close();  //关闭连接
[/CODE]

[[it] 本帖最后由 sldtk1 于 2008-4-3 11:04 编辑 [/it]]
#5
晋加答2008-04-03 11:09
谢谢,我试一下
#6
srym2008-04-03 11:14
楼上的那么写会有明显的sql注入的问题,建议改一下!(或者使用预编译SQL语句也可以解决注入问题)
using System.Data.SqlClient;  //引入命名空间
//创建数据库连接,database为数据库名称,uid为用户名,pwd为密码server=.代表连接的服务器是本机
SqlConnection con = new SqlConnection("server=.;database=;uid=;pwd=");
con.Open();    //打开数据库连接
SqlCommand cmd = new SqlCommand("select userpwd from User where  username=" + this.txtUserName.Text, con);//User是自己创建的一个表
try
{
string Pwd = cmd.ExecuteScalar().ToString();  //如果没有查到密码,转换会有异常
if (Pwd!=this.txtUserPwd.Text)  //判断密码是否正确
{
    Response.Write("<script>alert('密码不正确!')</script>");
}
else
{
    //密码正确,页面转向
    Response.Redirect("youpage.aspx");
}
catch
{
    Response.Write("<script>alert('查无此人!')</script>");
}
finally
{
con.Close();  //关闭连接
}
#7
晋加答2008-04-03 11:21
SqlConnection meteor = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["meteor"]);
        meteor.Open();//连数据库

        SqlCommand comm = new SqlCommand("select * from studentlogin Where  username=('" + TextBox1.Text.ToString().Trim() + "')", meteor);

        SqlDataReader dr = comm.ExecuteReader();

        if (dr.Read())
        {

            SqlCommand cmd = new SqlCommand("select count(*) from studentlogin where  password=" + this.TextBox2.Text, meteor);
            SqlDataReader dr2 = cmd.ExecuteReader();

        if (dr2.Read())
              {
                  Response.Write("<script language=javascript>alert('登陆成功!')</script>");
                  Response.Redirect("毕业生.aspx");
               }
          else
              {
                  Response.Write("<script>alert('密码错误!')</script>");
              }  


        }
        else
            Response.Write("<script language=javascript>alert('无此用户!')</script>");
        dr.Close();
        meteor.Close();



怎么改啊?
系统说已经开了DataReader,要先关闭.可关闭了,用户名怎么检查啊 ?
#8
sldtk12008-04-03 11:24
ExecuteScalar返回的是一个对象集,而不是string类型的,6楼的忽略了转化,所以肯定是返回错误的。
#9
sldtk12008-04-03 11:27
SqlCommand cmd = new SqlCommand("select count(*) from User where username='" + this.txtusername.Text + "' and userpwd='" + this.txtuserpwd.Text + "'",con);
#10
sldtk12008-04-03 11:29
完全可以把dr2去掉的,而且如果用DataReader的话,查询的时候就不用count(*)了,直接用*
#11
晋加答2008-04-03 11:44
不明白啊 ,呜呜.难呐
#12
sldtk12008-04-03 11:54
就按我刚才给你的那个就可以了
P.S:你也和我住同一个地方?
#13
晋加答2008-04-03 11:59
你也是南宁的啊
#14
晋加答2008-04-03 12:00
你给的那个啊

貌似不行
有错哦,
#15
sldtk12008-04-03 12:02
里面的控件名称你对上了吗?数据库密码改了吗?表名改了吗?
#16
晋加答2008-04-03 12:03
判断用户名存不存在,再判断密码是否一样.怎么统一起来啊 .
#17
sldtk12008-04-03 12:10
SqlCommand comm = new SqlCommand("select * from studentlogin where username='" + this.txtusername.Text + "' and userpwd='" + this.txtuserpwd.Text + "'", meteor);
这个应该没问题了
#18
晋加答2008-04-03 12:17
那后面的呢?
不改吗?
#19
hebingbing2008-04-03 12:19
程序代码:
SqlConnection meteor = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["meteor"]);
        meteor.Open();//连数据库

        SqlCommand comm = new SqlCommand("select * from studentlogin Where  username=('" + TextBox1.Text.ToString().Trim() + "')", meteor);

        SqlDataReader dr = comm.ExecuteReader();

        if (dr.Read())
        {
        
        if (dr["password"]==this.TextBox2.Text.Tostring().Trim())
              {
                  Response.Write("<script language=javascript>alert('登陆成功!')</script>");
                  Response.Redirect("毕业生.aspx");
               }
          else
              {
                  Response.Write("<script>alert('密码错误!')</script>");
              }  


        }
        else
            Response.Write("<script language=javascript>alert('无此用户!')</script>");
        dr.Close();
        meteor.Close();

改成这样的就可以了……
#20
hebingbing2008-04-03 12:21
我只是顺这你的意思写的啊……
我是从来没有这样写过代码……
哈哈……
#21
sldtk12008-04-03 12:22
SqlDataReader dr = comm.ExecuteReader();
if (dr.Read())
{
    Response.Redirect("毕业生.aspx");
}
else
{
    Response.Write("<script>alert('用户名或密码错误!')</script>");
}
最好不要用毕业生.aspx这种中文命名
#22
晋加答2008-04-03 12:29
呵呵   呵呵.  谢谢你啊 .

行了哦.

不过,我想把那个  用户名或密码错误   分准确一点.

要么没有此用户,要么密码不对.

又要怎么做呢??
#23
srym2008-04-03 12:40
8楼的,我tostring()了
#24
hebingbing2008-04-03 12:46
我给你修改的代码不是能完成你要的功能吗……
不过就是代码啰嗦了点……
呵呵……
建议使用21楼的方法,当然要是你想防止sql注入的话也可以使用Sqlparameter……
#25
sldtk12008-04-03 13:01
参考19楼的代码就OK了
#26
晋加答2008-04-03 14:10
呵呵


刚开始有些错的
不知道为什么.
我现在再瞧瞧.

不过,不分开也行吧,,哈哈

[[it] 本帖最后由 晋加答 于 2008-4-3 14:13 编辑 [/it]]
#27
晋加答2008-04-03 14:14
就这样吧,能实现功能就行了,总之,谢谢各位啊
1