これには本当に困惑しています。
ユーザーがアプリを使用する前に自分のアカウントを作成する必要があるアプリを構築するための仕様を提供していました。
仕様によると、ユーザーの電子メールは、データベースにある電子メールに対して検証する必要があります。
そのメールが既に存在する場合は、ユーザーに通知し、別のメールを選択するように依頼します。
以下は、そのすべてを行うコードです。
//マークアップ:
<tr>
<td height="27" width="129"><font face="Tahoma" size="2">
<label for="txtEmail">Your Email address:</label></font></td>
<td height="27" width="244">
<asp:TextBox ID="txtEmail" CssClass="Treb10Blue" Runat="server" style="font-family: Trebuchet MS; font-size: 10pt; font-weight: bold; font-style: italic; color: #000080;"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator4" Runat="server" ErrorMessage="*" Display="Dynamic" ControlToValidate="txtEmail"></asp:RequiredFieldValidator>
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" ControlToValidate="txtEmail" ValidationExpression=".*@.*\..*" ErrorMessage="Email not in correct format" Display="Dynamic" Runat="server"></asp:RegularExpressionValidator>
</td>
</tr>
//その後、コードビハインド
Function Fixquotes(ByVal thesqlenemy As String) As String
Fixquotes = Replace(thesqlenemy, "'", "''")
End Function
Sub btnRegister_Onclick(ByVal Src As Object, ByVal e As System.Web.UI.ImageClickEventArgs)
If Page.IsValid Then
Dim objConn As IDbConnection = New SqlConnection(ConfigurationManager.ConnectionStrings("DBConnectionString").ConnectionString)
Dim chkUsername As IDbCommand
Dim addUser As IDbCommand
Dim strSQL1 As String
Dim strSQL2 As String
Dim strUserCount As Integer
'first, check if user already exists
Try
strSQL1 = "SELECT COUNT(*) FROM [tblLogin] WHERE [Email]='" & Fixquotes(txtEmail.Text) & "'"
strSQL2 = "INSERT INTO [tblLogin] ([Fullname], [Email], [Username], [Password],[Rights],[ModifiedDate],Precinct,PositionId,ProcessedFlag)"
strSQL2 = strSQL2 & " VALUES "
strSQL2 = strSQL2 & "('" & Fixquotes(txtFullname.Text) & "', '" & Fixquotes(txtEmail.Text) & "', '" & Fixquotes(txtUsername.Text) & "', '" & Fixquotes(txtPassword.Text) & "',2,getdate(), '" & precinctList.SelectedValue & "'," & PosisitionList.SelectedValue & ",'No')"
'Response.Write(strSQL2)
'Response.End()
objConn.Open()
chkUsername = New SqlCommand(strSQL1, objConn)
strUserCount = chkUsername.ExecuteScalar()
If strUserCount = 0 Then
addUser = New SqlCommand(strSQL2, objConn)
addUser.ExecuteNonQuery()
objConn.Close()
'Display some feedback to the user to let them know it was sent
lblMsg.ForeColor = System.Drawing.Color.Green
lblMsg.Text = "Your account has been successfully created.<br><br>Please click the Close button below to close this window and log in with your newly created username and password."
'Clear the form
txtFullname.Text = ""
txtEmail.Text = ""
Else
lblMsg.Text = "That email address already exists. Please choose another..."
lblMsg.ForeColor = Drawing.Color.Red
End If
Catch
objConn.Close()
End Try
End If
End Sub
これまでに、サインアップした合計 1,035 人のユーザーのうち、9 人が同じメール アドレスを使用して重複したアカウントを作成できました。
それらのユーザーの 1 人はそれを 5 回実行しました。
これはどのように可能であり、それ以上の発生を防ぐにはどうすればよいですか?
事前にどうもありがとう