Detta har säkert tagits upp innan fast kunde inte hitta något om det när jag sökte. Alltså hur gör man för att undvika dubbel postning på enklast sätt? Här kommer den aktuella koden jag använder. Jag har två förslag. Byt din Access Db (jag utgåt ifrån att du använder Access) till MSDE. Då kan du skapa en enkel Stored Procedure som t.ex. kollar på förekomsten av en e-post adress:Undvika Dubbelpostning?
<code>
void ForumPost_Click(Object sender, ImageClickEventArgs e)
{
if (Page.IsValid)
{
OleDbConnection conn = new OleDbConnection (ConfigurationSettings.AppSettings["ConnectionString"]);
string strTopic = Request.Form["Topic"];
string strEntryText = Request.Form["EntryText"];
string strLocation = Request.Form["Location"];
string strEmail = Request.Form["Email"];
string strName = Request.Form["Name"];
string strSQL = "INSERT INTO tbl_forum (topic,entry_text,location,email,name) VALUES (''" + strTopic + "'',''" + strEntryText + "'',''" + strLocation + "'',''" + strEmail + "'',''" + strName + "'')";
//Response.Write(strSQL);
conn.Open();
OleDbCommand objCommand = new OleDbCommand(strSQL, conn);
objCommand.ExecuteNonQuery();
Topic.Text="";
EntryText.Text="";
Location.Text="";
Email.Text="";
Name.Text="";
divMessage.InnerHtml = "<font class=red> Thank you! Your message has been inserted. </font>";
}
}
</code>Sv: Undvika Dubbelpostning?
<code>
CREATE PROCEDURE AddUniqueUser
{
@Name nvarchar(100),
@Email nvarchar(150)
}
IF EXISTS
(
SELECT Email FROM CustomerTable WHERE Email = @Email
)
RETURN 1
ELSE
INSERT INTO CustomerTable (Name, Email) VALUES (@Name, @Email)
</code>
Du bör också använda Parametrar (@Location, @Email etc.) för att undvika injektion problem, fnuttar o.dyl. oavsett om du väljer att behålla din Access DB.
Du kan självklart utföra det jag beskriver ovan utan en SPROC, genom att ta två runder till DB. Du kan t.ex. göra en ExecuteScalar såhär först:
SqlCommand cmd = new SqlCommand("SELECT COUNT(Email) FROM tbl_forum WHERE Email = @Email", con)
con.Open();
int checkEmail = cmd.ExecuteScalar();
con.Close();
if (checkEmail > 0)
{
//INSERT i Databasen
}