无法阻止重复的电子邮件
我正在使用asp.net c#并在用户输入重复的电子邮件时尝试显示消息(电子邮件已存在)。但它没有用。
这是我的代码:
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
SqlConnection cnn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
con.Open();
string checkUser = "select count(*) from table where email='" + emailField.Text + "'";
SqlCommand com = new SqlCommand(checkUser, con);
int temp = Convert.ToInt32(com.ExecuteScalar().ToString());
if (temp == 1)
{
Response.Write("email already exist");
}
con.Close();
}
}
答案 0 :(得分:1)
等于=
用于SQL中的完全匹配,这意味着如果您的字段是具有额外空格的varchar或文本框中的值具有它们,则字符串将不匹配。
考虑使用:
"select count(*) from table where LTRIM(RTRIM(email))='" + emailField.Text.Trim() + "'";
答案 1 :(得分:1)
我打算将此作为评论,但这太长了......
你检查过你的HTML吗?我不认为Response.Write
会替换页面,因此您可能会在html标记之前找到它而无法看到它。有什么可以结束回应吗?
您是否应该设置变量或标签以在页面上显示消息而不是使用response.write?
插入数据库的位置在哪里?在buttonAdd_Click()
这样的事件中是否会发生这种情况?同样,Page_Load中的这段代码在该处理程序之前执行,但处理程序仍然被执行。
您应该使用命令参数来防止注入。如果有人输入此电子邮件地址会发生什么?
'; drop table [table];--
参数很简单,只需更改查询并添加参数:
string checkUser = "select count(*) from table where email=@email";
SqlCommand com = new SqlCommand(checkUser, con);
com.Parameters.AddWithValue("@email", emailField.Text);
答案 2 :(得分:1)
string checkUser = "select count(*) from table where email=@email";
SqlCommand command = new SqlCommand(checkUser, conn);
command.Parameters.AddWithValue("@email", emailField.Text);
答案 3 :(得分:0)
我注意到你的代码很多:
string
(即:null
)你可以做的一些事情是:
protected void Button1_Click(object sender, EventArgs e) { }
选择按钮后,将在Postback
上调用该事件。哪个应该调用应该在Page Load
而不是实际功能的方法。
该方法应如下所示:
private void DuplicateEmail()
{
if(string.IsNullOrEmpty(txtEmail))
return;
int row = 0;
string query = @"SELECT * FROM [SomeTable] WHERE ([Email] = @Email);";
using(SqlConnection connection = new SqlConnection(ConfigurationManager...))
using(SqlCommand command = new SqlCommand(query, connection))
{
connection.Open();
command.Parameters.AddWithValue("@Email", txtEmail.Text);
row = (Int32)command.ExecuteScalar();
if(row == 1)
{
// Call alert.
}
}
}
您可以拨打Response
,也可以使用Page.RegisterClientScript
来调用Javascript警报;这可能比Response
更有益。
希望这能指明你的方向。