一、所需知识要点
q ASP.NET的网页代码模型。
q Web窗体基本控件。
q 数据库基础。
q ADO.NET常用对象。
q Web窗体数据控件。
基本了解了以上章节的知识点后,就能够熟练学习和开发此模块。
二、首先用户需要访问网站,访问网站后就会选择是否进行注册,如果需要注册则网站提供一个注册模块给用户,用户就能够进行注册。在用户完成注册后,用户信息还应该被管理员管理,管理员能够通过用户管理页面进行页面管理。
q 注册页面:提供用用户注册操作。
q 管理页面:提供管理员管理页面。
在基本规划了Web应用中需要制作的模块,可以为这些模块进行模块的流程分析。
三、数据库设计
表为用户的基本信息创建了字段,这些字段的意义分别为:
q id:用于标识用户的ID号,并为自动增长的主键。
q username:用于标识用户名。
q password:用于标识用户密码。
q sex:用于标识用户性别。
q picture:用于标识用户头像。
q IM:用于标识用户的IM信息,包括QQ/MSN等。
q information:用于标识用户的个性签名。
q others:用于标识用户的备注信息。
q ifisuser:用于标识用户是否为合法用户。
四、根据数据库字段,创建好页面,
<form id="form1" runat="server" method="post">
<div class="top">
</div>
<div class="register" style="text-align: center">
<div>
<asp:Label ID="Label1" runat="server" Text="用户名">
</asp:Label><asp:TextBox ID="TextBox1" Width="200px" runat="server"></asp:TextBox></div>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" ValidationGroup="validgroup" ControlToValidate="TextBox1" runat="server" ErrorMessage="用户名不能为空"></asp:RequiredFieldValidator>
<div>
<asp:Label ID="Label2" runat="server" Text="密码"></asp:Label>
<asp:TextBox ID="TextBox2" Width="200px" runat="server" ></asp:TextBox></div>
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" ValidationGroup="validgroup" ControlToValidate="TextBox2" runat="server" ErrorMessage="密码不能为空"></asp:RequiredFieldValidator>
<div>
<asp:Label ID="Label3" runat="server" Text="性别"></asp:Label>
<asp:DropDownList ID="DropDownList1" runat="server" Width="130px">
<asp:ListItem>0</asp:ListItem>
<asp:ListItem>1</asp:ListItem>
</asp:DropDownList>
<asp:RequiredFieldValidator ID="RequiredFieldValidator3" ValidationGroup="validgroup" ControlToValidate="DropDownList1" runat="server" ErrorMessage="性别必须选择"></asp:RequiredFieldValidator>
</div>
<div>
<asp:Label ID="Label4" runat="server" Text="头像"></asp:Label>
<asp:TextBox ID="TextBox3" runat="server" Width="200px"></asp:TextBox></div>
<div>
<asp:Label ID="Label5" runat="server" Text="IM"></asp:Label>
<asp:TextBox ID="TextBox4" runat="server" Width="200px"></asp:TextBox></div>
<div>
<asp:Label ID="Label6" runat="server" Text="个性签名"></asp:Label>
<asp:TextBox ID="TextBox5" runat="server" Width="180px"></asp:TextBox></div>
<div>
<asp:Label ID="Label7" runat="server" Text="备注"></asp:Label>
<asp:TextBox ID="TextBox6" runat="server" Width="200px"></asp:TextBox></div>
<asp:Label ID="Label8" runat="server" Text="Label" Visible="False"></asp:Label>
<div> <asp:Button ID="Button1" runat="server" Text="注册" onclick="Button1_Click" /></div>
</div>
<div class="end">
<p>
版权信息
</p>
<p>
本网站不会将用户信息泄露给任何机构</p>
</div>
</form>
五、代码实现数据的插入和判断
在用户单击按钮控件时会执行数据插入操作,在数据插入之前就需要对信息进行过滤,示例代码如下所示。
protected void Button1_Click(object sender, EventArgs e)
{
if (Check(TextBox1.Text) || Check(TextBox2.Text) || Check(TextBox4.Text) ||
Check(TextBox5.Text) || Check(TextBox6.Text) || Check(TextBox7.Text)) //判断
{
Label8.Text = "用户信息中不能够包含特殊字符如<,>,',//,\\等,请审核"; //输出信息
}
else
{
//注册代码
}
}
上述代码使用了Check函数对文本框控件进行了用户资料的判断,Check函数的实现如下所示。
protected bool Check(string text) //判断实现
{
if (text.Contains("<") || text.Contains(">") || text.Contains("'") ||
text.Contains("//") || text.Contains("\\")) //检查字串
{
return true; //返回真
}
else
{
return false; //返回假
}
}
Check函数定义了基本的判断方式,如果文本框信息中包含“<”,“>”,“’”,“/”,“\”等字符串时,该方法将会返回true,否则会返回false。这也就是说,如果字符串中包含了这些字符,则会返回true。在Button1_Click函数中就会判断包含非法字符,并进行提示,否则会执行注册代码。对关键字的过滤是非常必要的,这样能够保证应用程序的完整性并提高应用程序健壮性,同时也对数据库中的完整性进行了保护。
当用户单击按钮控件时,如果对用户进行了非空验证和关键字过滤后,就能够进行数据的插入,用户可以使用ADO.NET进行数据操作,示例代码如下所示。
protected void Button1_Click(object sender, EventArgs e)
{
if (Check(TextBox1.Text) || Check(TextBox2.Text) || Check(TextBox3.Text) ||
Check(TextBox4.Text) || Check(TextBox5.Text) || Check(TextBox6.Text)) //检查字串
{
Label8.Text = "用户信息中不能够包含特殊字符如<,>,',//,\\等,请审核"; //输出信息
}
else
{
try
{
SqlConnection con =
new SqlConnection("server='(local)';database='Register';uid='sa';pwd='sa'");//建立连接
con.Open(); //打开连接
string strsql =
"insert into register (username,password,sex,picture,im,information,others,ifisuser) values
('" + TextBox1.Text + "','" + TextBox2.Text + "','" + DropDownList1.Text + "','" +
TextBox3.Text + "','" + TextBox4.Text + "','" + TextBox5.Text + "','" + TextBox6.Text + "',0)";
SqlCommand cmd = new SqlCommand(strsql,con); //创建执行
cmd.ExecuteNonQuery(); //执行SQL
Label8.Text = "注册成功,请牢记您的信息"; //提示成功
}
catch
{
Label8.Text = "出现错误信息,请返回给管理员"; //抛出异常
}
}
}
上述代码通过ADO.NET实现了数据的插入,但是上述代码有一个缺点,如果用户注册了一个用户并且名称为abc,当这个用户注销并再注册一个用户名称为abc时,如果依旧将数据插入到数据库则会出现错误。值得注意的是,这个错误并不是逻辑错误,但是这个错误会造成不同的用户可能登录了同一个用户信息并产生信息错误。为了避免这种情况的发生,在用户注册前首先需要执行判断,示例代码如下所示。
string check = "select * from register where username='" + TextBox1.Text + "'";
SqlDataAdapter da = new SqlDataAdapter(check,con); //创建适配器
DataSet ds = new DataSet(); //创建数据集
da.Fill(ds, "table"); //填充数据集
if (da.Fill(ds, "table") > 0) //判断同名
{
Label8.Text = "注册失败,有相同用户名"; //输出信息
}
else
{
SqlCommand cmd = new SqlCommand(strsql, con); //创建执行对象
cmd.ExecuteNonQuery(); //执行SQL
Label8.Text = "注册成功,请牢记您的信息"; //输出成功
}
在用户注册时,首先从数据库查询出是否已经包含这个用户名的信息,如果包含则不允许用户注册,如果没有,则说明用户是一个新用户,可以进行注册。
本人也是菜鸟一个~~一起努力!请各位老大指教!!谢谢!!
附带一下代码:default.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data;
namespace 登录注册
{
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
Label8.Visible = true;
}
}
protected bool Check(string text) //判断实现
{
if (text.Contains("<") || text.Contains(">") || text.Contains("'") ||
text.Contains("//") || text.Contains("\\")) //检查字串
{
return true; //返回真
}
else
{
return false; //返回假
}
}
protected void Button1_Click(object sender, EventArgs e)
{
if (Check(TextBox1.Text) || Check(TextBox2.Text) || Check(TextBox3.Text) ||
Check(TextBox4.Text) || Check(TextBox5.Text) || Check(TextBox6.Text)) //判断
{
Label8.Visible = true;
Label8.Text = "用户信息中不能够包含特殊字符如<,>,',//,\\等,请审核"; //输出信息
}
else
{
try
{
SqlConnection con =
new SqlConnection("Data Source=.;Initial Catalog=Register;Integrated Security=True");//建立连接
con.Open();
string check = "select * from register where username='" + TextBox1.Text + "'";
SqlDataAdapter da = new SqlDataAdapter(check, con); //创建适配器
DataSet ds = new DataSet(); //创建数据集
da.Fill(ds, "table"); //填充数据集
if (da.Fill(ds, "table") > 0) //判断同名
{
Label8.Text = "注册失败,有相同用户名"; //输出信息
}
else
{
string strsql =
@"insert into register (username,password,sex,picture,im,information,others,ifisuser) values
('" + TextBox1.Text + "','" + TextBox2.Text + "','" + DropDownList1.Text + "','" +
TextBox3.Text + "','" + TextBox4.Text + "','" + TextBox5.Text + "','" + TextBox6.Text + "',0)";
SqlCommand cmd = new SqlCommand(strsql, con); //创建执行
cmd.ExecuteNonQuery(); //执行SQL
Label8.Text = "注册成功,请牢记您的信息"; //提示成功
}
}
catch
{
Label8.Text = "出现错误信息,请返回给管理员"; //抛出异常
}
}
}
}
}