令人头疼的问题,注册进去的用户名密码登陆不进去,在数据库直接插入的数据登陆就可以!!为什么啊
数据库SQL SERVER 2000注册信息放在教师表,利用数据库的触发器完成了在用户表里的数据插入,
例如我注册ID“111”PWD“111”用户级别“teacher”,完成注册,打开teacher表和user表存在以上数据
返回登陆页面登陆,登陆不进去···页面不报错,就像刷新了一次页面
于是我打开企业管理器,直接ID“111”PWD“111”用户级别“teacher”,填到USER表里,竟然就登陆进去了!!
代码肯定有很多不可取之处,但是我比菜鸟还菜,只能做到这种程度了···
注册的代码
public partial class control_register : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
}
}
private void studentadd()
{
string conn = "server=PC-201005131654;database=Northwind;user id=sa;pwd=123";
using (SqlConnection cn = new SqlConnection(conn))
{
cn.Open();
string strsql ="insert into tea_table(tea_id,tea_name,tea_易做图,tea_level,tea_telephone,tea_speciality,tea_password,tea_memo) values('" + tbID.Text + "','" + tbNAME.Text + "','"+Sexid.SelectedItem.Text +"','" +ddlLEVEL.SelectedValue+ "','" + tbTELEPHONE.Text + "','" + tbSPECIALITY.Text+ "','" + tbPASSWORD.Text + "','" + tbMEMO.Text + "')";
SqlCommand cmd = new SqlCommand(strsql, cn);
SqlDataReader rd = cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
}
protected void btSUMBIT_Click(object sender, EventArgs e)
{
studentadd();
}
登陆代码:
protected void btLOGIN_Click(object sender, EventArgs e)
{
string conn = "server=PC-201005131654;database=Northwind;user id=sa;pwd=123";
//SqlConnection cn = new SqlConnection(conn);
using (SqlConnection cn = new SqlConnection(conn))
{
cn.Open();
string strsql = "select user_password,user_level from user_table where user_id='" + tbID.Text + "'";
SqlCommand cmd = new SqlCommand(strsql, cn);
SqlDataReader rd = cmd.ExecuteReader(); while (rd.Read())
{
if (rd.GetValue(0).ToString() == tbPASSWORD.Text)
{
string str = rd.GetValue(1).ToString();
string str1 = ddlLEVEL.SelectedValue;
if (str == str1)
{
switch (str)
{
case "ymanager":
Response.Redirect("~/web/YSTUDY_MANAGER.aspx");
break;
case "supermaster":
Response.Redirect("~/web/SUPER_MASTER.aspx");
break;
case "teacher":
Response.Redirect("~/web/TEACHER_PAGE.aspx");
break;
}
}
触发器:
CREATE TRIGGER [tea_tableinsert] ON dbo.tea_table
FOR INSERT
AS
insert user_table
select tea_id,tea_level,tea_password
from inserted
我用注册插入的用户信息登陆
在红字处设置了断点,if (rd.GetValue(0).ToString() == tbPASSWORD.Text),tbPASSWORD.Text的值为114,但是if里面的语句不执行!
用直接填入数据库的信息输入语句照常执行······
这都因为什么,
请高手指点一二!!最好具体点···如果换代码··能写具体些,我实在很菜的···
--------------------编程问答-------------------- rd.GetValue(0).ToString() 这个值是多少啊,也是114吗 --------------------编程问答-------------------- 关注中………… --------------------编程问答--------------------
string strsql = "select user_password,user_level from user_table where user_id='" + tbID.Text + "'";
你登陆前就知道用户ID了?
还有
注册处建议
将 SqlDataReader rd = cmd.ExecuteReader(CommandBehavior.CloseConnection);
换成 cmd.ExecuteNonQuery();
cn.close();
--------------------编程问答--------------------
rd.GetValue(0).ToString() 的值是NULL,登陆成功时他的值也是NULL··· --------------------编程问答--------------------
恩?登陆前不知道用户ID怎么登陆啊···你的意思是····? --------------------编程问答--------------------
下拉框的值用Text来取 --------------------编程问答--------------------
错误是在这里吗?用TEXT来取的话输入用户级别不规范等会出现很多麻烦···不如用下拉框选择直接! --------------------编程问答-------------------- 跟踪一下值。 --------------------编程问答--------------------
用下列框选择值,但是获取值用Text,不要用SelectedValue --------------------编程问答--------------------
我的意思是:
[Quote=引用 5 楼 guotingru 的回复:]
引用 3 楼 q107770540 的回复:
string strsql = "select * from user_table where user_name='" +登陆用户输入的用户名 + "'"; --------------------编程问答-------------------- rd.GetValue(0).ToString() 换成 reader["user_password"].ToString()看看能不能进行IF判断 --------------------编程问答-------------------- 是rd["user_password"].ToString()没看清楚你的reader命名 --------------------编程问答-------------------- 看清楚了 --------------------编程问答-------------------- 数据库的字段值改成VARCHAR。 --------------------编程问答-------------------- 看关键点。
1.你执行sql语句时,看下sql语句是否正确
2.执行完sql后,查看相应的表中是否有数据
3.登录的密码有加密机制吗 --------------------编程问答-------------------- 跟踪一下,执行sql语句 --------------------编程问答--------------------
不能判断···之前我已经给出了设置断点不能执行IF语句 --------------------编程问答--------------------
SQL语句正确,密码没有加密 --------------------编程问答-------------------- if语句是不能执行 还是 条件判断失败 ? --------------------编程问答--------------------
不能执行
补充:.NET技术 , C#