Ao navegar pela web , com certeza você já entrou em sites que para conceder acesso solicitam o preenchimento de um formulário de registro. Muitos sites mantêm esta funcionalidade (alguns com extensos e irritantes forms..). Em alguns sites após você preencher o form um email é enviado para você, e, para que o registro esteja ativo você deverá responder ao email enviado.
Este procedimento tem como objetivo identificar o usuário e sua procedência e assim impedir que usuários mal intencionados participem das atividades oferecidas pelo site (geralmente fóruns , listas de discussão , etc...).
Neste artigo eu vou mostrar como você pode implementar um formulário de registro de usuário com ativação via email em páginas ASP.NET.
Para poder criar e executar os scripts deste artigo você vai precisar dos seguintes recursos:
Nota: o campo chave é uma chave primária e portanto não permite duplicação de valor.
Vou usar um banco de dados chamado Senhas.mdb com uma tabela chamada Membros com a estrutura acima.
Nosso projeto irá conter dois formulários que estão detalhados a seguir:
Agora vamos criar no registro.aspx o formulário com os dados que o usuário deverá preencher. O código do formulário é o seguinte:
Obs: Eu procurei deixar o código o mais limpo possível para você visualizar e entender a utilização dos componentes ASP.NET. Nada impede que você elabore um formulário mais sofisticado e com uma formatação mais 'caprichada'.
<<form
Name="registro" runat="server"> <td
><asp:button ID="limpar" runat="server" Text="Limpar" OnClick="doLimpa"
/> <tr>
|
Nota: No formulário estamos usando os componentes: TextBox , Label e button.
Perceba que temos duas rotinas vinculadas ao evento Click dos botões de comando , elas estão descritas abaixo:
A seguir vamos mostrar a rotina doInserir :
Sub
doInserir(Source as Object, E as EventArgs) dim
erro as boolean Dim
strConn as String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:/dados/senhas.mdb"
Dim
MyConn as New OleDbConnection(strConn)
With Cmd.Parameters
MyConn.Open()
try
MyConn.Close |
Obs: Para trabalhar com banco de dados Access devemos importar os namespces:
<%@ Import Namespace="System.Data"
%>
<%@ Import Namespace="System.Data.OleDB" %>
O código recebe os dados que o usuário informou e grava no banco de dados via instrução SQL :
"Insert into MembrosForum (chave, senha, email) Values (@chave, @senha, @email)"
Se o nome para o usuário já existir na base de dados ocorrerá um erro. O erro é capturado e exibimos uma mensagem ao usuário no componente Label inserido no formulário.
Se a gravação dos dados for realizada com sucesso invocamos a rotina doEmail que envia um email para o usuário informando do registro e solicitando a resposta para ativação do registro.
O código da rotina doLimpa é dado abaixo: Ele apenas atribui um valor vazio as caixa de texto.
Sub doLimpa(Source
as Object, E as EventArgs) chave.text="" senha.text="" email.text="" End Sub |
O código da rotina doEMail é dado logo a seguir: Ela monta a mensagem de email para enviar o usuário. Para poder usar este recurso em páginas ASP.NET teremos que importar o namespace : System.Web.Mail.(<%@ Import Namespace="System.Web.Mail" %>)
Sub doEmail()
|
Executando o arquivo registro.aspx no seu navegador teremos o formulário exibido conforme abaixo.
Veja o demo em : http://www.visualbasic.mat.br/forum/registro.aspx
Criando o formulário de ativação de registro
Após o usuário preencher o formulário de registro e clicar em enviar , um email lhe será enviado para (por isto não adianta informar um email que não existe) . Neste Email teremos um link para o arquivo ativaregistro.aspx . Este é o formulário de ativação. O que ele faz ???
O formulário de ativação de registro simplesmente atualiza o campo - ativado - da tabela Membros do banco de dados senhas.mdb. Veja o seu código (arquivo ativaregistro.aspx) abaixo:
<%@
Import Namespace="System.Data.OleDB" %> <%@ Import Namespace="System.Web.Mail" %> <%@ Page Language="VB" Debug="true" %> <!--#include file="header.asp" --> <html> <script language="VB" runat="server"> Dim schave as String Dim retorno as Integer Sub Page_Load(Source as Object, E as EventArgs) schave = request.QueryString ("chave") retorno = 0 Dim strConn as String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\inetpub\wwwroot\dados\senhas.mdb;" Dim MySQL as string = "Update Membros Set ativado=True where chave='" & schave & "'" Dim MyConn as New OleDbConnection(strConn) Dim Cmd as New OleDbCommand(MySQL, MyConn) MyConn.Open() retorno = cmd.ExecuteNonQuery() if retorno > 0 then lblaviso.text ="Obrigado !. Seu registro foi concluído com sucesso !." lblaviso2.text="Agora você pode usar sua Chave e Senha para ter acesso ao - Fórum Visual Basic - JcmSoft." lblaviso3.text="<a href='http://www.visualbasic.mat.br/forum/login.aspx'>Login</a>" else lblaviso.text=" Opa !! . Não foi possível ativar o seu registro. Verifique se sua chave esta correta !" lblaviso2.text= "<a href='http://www.visualbasic.mat.br/forum/'>Retorna</a>" end if MyConn.Close End Sub </script> <body> <table width="100%" border="0" cellpadding="1" bgcolor="#FFFFFF"> <tr> <td> </td> </tr> <tr> <td> </td> </tr> <tr> <td><center> <asp:label ID="lblaviso" runat="server" Width="800"> </asp:label> </center></td> </tr> <tr> <td><center> <asp:label ID="lblaviso2" runat="server" Width="800"> </asp:label> </center></td> <font color="#000000" size="3" face="Arial, Helvetica, sans-serif"></td></font></tr> <tr> <td> </td> </tr> <tr> <td width="100%"><center> <font face="Arial, Helvetica, sans-serif"> <asp:label ID="lblaviso3" runat="server" Width="800"> </asp:label> </font></center></td> </tr> <tr> <td> </td> </tr> <tr> <td> </td> </tr> <tr> <td> </td> </tr> </table> <!--#include file="footer.asp" --> </body> </html> |
Nota : No código acima eu estou usando os controles Label (3 controles) para exibir as mensagens ao usuário.
A linha de código: retorno = cmd.ExecuteNonQuery() vai executar a atualização do campo conforme definido na instrução SQL : "Update Membros Set ativado=True where chave='" & schave & "'"
O comando ExecuteNonQuery() não retorna registros apenas o número de linhas afetadas pela instrução UPDATE , logo se o retorno for maior que zero exibimos a mensagem pertinente e exibimos o link para fazer o login. Cujo resultado exibimos a seguir:
Não sei se você percebeu , mas eu estou usando uma inclusão de arquivo para o cabeçalho e para o rodapé. Nestes includes eu estou usando os arquivos ASP : header.asp e footer.asp. Como podemos ver não há problema algum usarmos arquivos ASPX e ASP na mesma aplicação.
Nota: Para saber mais sobre arquivos com inclusão do lado do servidor (includes) - leia o artigo : ASP - Usando Server-Side Includes
Boa noite ! e , aguarde mais artigos sobre ASP.NET ...
José Carlos Macoratti