Bom pessoal, meu nome é Maurício Júnior, sou MCP Microsoft WebApplication, possuo três livros publicados pela editora Ciência Moderna, trabalho na empresa Stefanini IT Solution e faço parte da comunidade ASPNETI.COM.

Irei mostrar como criar um sistema de login usando componente COM + (COM PLUS) com banco de dados. O primeiro de tudo a primeira página HTML foi criada no artigo anterior.

 

Anteriormente a página Login.asp foi criada mandando uma requisição para a página frmLoginPersistir.asp do método post, ou seja, os valores passados não serão mostrados URL da página do cliente do usuário. (2.1 – Sistema de Login em ASP – Parte II)

 

 

<script language="javascript">

                   function sFoco(){

                            if (document.frmLogin.txtUsuario){

                                      document.frmLogin.txtUsuario.focus();

                            }

                   }

                  

                   function sValidarLogin(){

                            if (f_eVazio(document.frmLogin.txtUsuario.value)){

                                      alert(f_Mensagem(1));

                                      document.frmLogin.txtUsuario.focus();

                                      return;

                            }

                           

                            if (f_eVazio(document.frmLogin.txtSenha.value)){

                                      alert(f_Mensagem(1));

                                      document.frmLogin.txtSenha.focus();

                                      return;

                            }

                            document.frmLogin.method = 'post';

                            document.frmLogin.action = 'frmLoginPersistir.asp';

                            document.frmLogin.submit();                    

                   }

                  

                   function sSair(){

                            window.close();            

                   }

                  

                   function s_AlterarSenha(){

                            document.frmLogin.method = 'post';

                            document.frmLogin.action = 'frmAlterarSenha.asp';

                            document.frmLogin.submit();

                   }

                  

                   function enter(codigo){

                            if (codigo == 13){

                                      sValidarLogin();

                            }

                   }

         </script>

        

         <body topmargin="0" leftmargin="0" onload="sFoco();">

                   <form name="frmLogin">

                   <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%">

                            <!--#include file="../includes/barra_titulo.asp"-->                           

                            <tr align="left">

                                      <td align="center"><!-- Inicio da Página -->

                                               <table CELLSPACING="1" cellpadding="0" class="formulario" width="230px">

                                                        <tr>

                                                                  <th colspan="4">Login</th>

                                                        </tr>

                                                        <tr>

                                                                  <th width="18">01</th>

                                                                  <td>

                                                                           <b>  Usuário:</b> <br>

                                                                           <input name="txtUsuario" onkeypress="enter(event.keyCode);" value="<%=Request("txtUsuario")%>" size="25" style="HEIGHT: 17px">

                                                                  </td>

                                                                  <td rowspan="2" width="40px" valign="middle">

                                                                           <br>&nbsp;<img style="background:none" SRC="../images/login.gif" WIDTH="35" HEIGHT="33">

                                                                  </td>  

                                                        </tr>

                                                        <tr>

                                                                  <th width="18">02</th>

                                                                  <td>

                                                                           <b>Senha:</b> <br>

                                                                           <input type="password" onkeypress="enter(event.keyCode);" name="txtSenha" value="<%=Request("txtSenha")%>" size="25" style="HEIGHT: 17px">

                                                                  </td>                                                                            

                                                        </tr>

                                               </table>

                                               <table class="formulario" cellSpacing="1" cellPadding="0" width="230px">

                                                        <tr>

                                                                  <th align="middle">

                                                                           <input type="button" value="Entrar" name="btnEntrar" onclick="sValidarLogin();"> &nbsp;

                                                                           <input type="button" value="Alterar" name="btnAlterar" onclick="s_AlterarSenha();"> &nbsp;

                                                                           <input type="button" value="Sair" name="btnSair" onclick="sSair()">

                                                                  </th>

                                                        </tr>

                                               </table>

                                      </td>

                            </tr>

                            <!--#include file="../includes/barra_rodape.asp"-->

                   </table>                       

                   </form>

         </body>

 

Referência: 2.1 – Sistema de Login em ASP

 

Explicação:

 

Note que o código em vermelho é Java script cujo valida os dados da tela de login passados pelo usuário. Atribui os parâmetros com as variáveis e no final envia para a página frmLoginPersistir.asp. (2.2 – Sistema de Login em ASP)

 

 

document.frmLogin.method = 'post';

document.frmLogin.action = 'frmLoginPersistir.asp';

document.frmLogin.submit();

 

Referência: 2.2 – Sistema de Login em ASP

 

Bom, nessa página que irei fazer a validação junto ao banco de dados usando o componente COM + (COM PLUS) com stored procedure e tudo mais. Resolvi fazer em páginas separadas para ficar mais cômodo, de fácil entendimento e fácil manutenção dos componentes mantendo as camadas separadas.

 

Dentro da página frmLoginPersistir.asp, tenho que receber os parâmetros e enviá-los ao componente criado com a ferramenta Visual Basic 6.0, que faz suas devidas validações como: pegar os parâmetros, passar para a stored procured que verifica junto ao banco de dados, que por si só retorna uma resposta ao componente que também retorna a página asp. Esse é um caminho resumido de como funciona um sistema usando três camadas com o componente dll registrado no COM PLUS.

 

 

Tabela do Banco de dados

 

Para começar e passar por todo o caminho, geralmente prefiro começar com o banco de dados criando stored procedures e depois ir subindo as camadas.

Para criar o banco de dados corretamente, é necessário analisar detalhadamente todos os campos necessários e depois criá-los.

No caso desse sistema, existirá um código do usuário como chave, ou seja, não poderá se repetir, no valor de no máximo 50 caracteres. Em seguida o nome do usuário com um valor de 100. Uma senha onde será necessário para se logar junto ao sistema. Finalizando um campo para identificar o tipo do usuário, como por exemplo: administrador, usuário normal, inativo e etc, isso em si depende mais do cliente ou da solicitação do cliente. (2.3 – Sistema de Login em ASP).

 

Referência: 2.3 – Sistema de Login em ASP

 

Script da tabela do banco de dados

 

 

 

CREATE TABLE [dbo].[TB023_USUARIO] (

         [USU_CO_USUARIO] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,

         [USU_NO_USUARIO] [varchar] (100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,

         [USU_CO_SENHA] [varchar] (30) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,

         [USU_TP_USUARIO] [char] (1) COLLATE SQL_Latin1_General_CP1_CI_AS NULL

) ON [PRIMARY]

GO

 

Referência: 2.4 – Sistema de Login em ASP

 

Explicação:

Note que o primeiro campo USU_CO_USUARIO significa que será o código do usuário, uma chave primária da tabela, ou seja, não poderá se repetir. O valor máximo de caracter será de 50. Existe um padrão onde até nas tabelas do banco de dados procuro colocar um número seqüencial cujo fica mais fácil identificar todas as tabelas do banco.

 

 

Stored Procedure

 

 

 

CREATE PROCEDURE dbo.ASPSP001_VALIDARUSUARIO(@USU_CO_USUARIO VarChar(50), @USU_CO_SENHA VarChar(30)) As

 

Begin

SELECT

USU_NO_USUARIO,

USU_NO_FUNCAO

FROM

CPETB023_USUARIO

WHERE

USU_CO_USUARIO = @USU_CO_USUARIO And

USU_CO_SENHA   = @USU_CO_SENHA and

USU_TP_USUARIO = 'A'

End

 

GO

 

Referência: 2.5 – Sistema de Login em ASP

 

Explicação:

 

Primeiro de tudo criei a STORED PROCEDURE conforme referência 2.5. Coloquei o nome de ASPSP001_VALIDARUSUARIO para ficar melhor a identificação, costumo colocar sempre números, nunca se sabe se um sistema terá mais de 200 stored procedures, com isso fica difícil identificar junto ao SQL SERVER Enterprise Manager.

O cabeçalho do da SP, darei o nome de assinatura, apenas para ficar mais fácil. (2.6 – Sistema de Login em ASP).

 

 

 

 

 

CREATE PROCEDURE dbo.ASPSP001_VALIDARUSUARIO(@USU_CO_USUARIO VarChar(100), @USU_CO_SENHA VarChar(30))

 

Referência: 2.6 – Sistema de Login em ASP

 

Passo parâmetros de entrada para SP, a assinatura da procedure perceba que possui os parâmetros (@USU_CO_USUARIO (varchar(100) e @USU_CO_SENHA varchar(30)). Isso significa que receberá esses tipos de parâmetros para fazer um select dentro do banco de dados verificando se existe ou não um usuário. Esses tipos de dados com os valores, por exemplo: varchar(100), mostra que será do tipo string o valor e que no máximo o nome do usuário cadastrado terá o tamanho de 100 caracteres.

 

A parte em vermelho do script, mostra exatamente como criar um select que verifica se o usuário e senha são válidos. No sistema, já que criei o campo para verificar o tipo do usuário, nesse select tenho que buscar apenas os usuários ativos, dessa forma, tenho que prever no select da SP. (2.7 – Sistema de Login em ASP)

 

 

SELECT

USU_NO_USUARIO,

USU_NO_FUNCAO

FROM

TB023_USUARIO

WHERE

USU_CO_USUARIO = @USU_CO_USUARIO And

USU_CO_SENHA   = @USU_CO_SENHA and

USU_TP_USUARIO = 'A'

 

Referência: 2.7 – Sistema de Login em ASP

 

Explicação:

 

O interessante é que nesse select da referência 2.7, a condição, ou seja, o comando WHERE recebe como parâmetro os valores que recebeu anteriormente com o @ antes. Isso porque todos os parâmetros usados na SP, mesmo sendo como entrada ou apenas dentro, é necessário colocar o @ (arroba) anteriormente. Um padrão que costumo usar é a questão nomenclatura, os valores de entrada geralmente possuem os mesmos nomes da tabela onde será comparado; dessa forma fica difícil de confundir e mesmo de se enganar. O ser humano é cheio de falhas e até para software’s podemos falhar, dependendo da falha pode ser muito prejudicial como segurança de valores, ou seja que envolve muito dinheiro ou apenas um problema de invasão de dados. (2.8 – Sistema de Login em ASP)

 

 

WHERE

USU_CO_USUARIO = @USU_CO_USUARIO And

USU_CO_SENHA   = @USU_CO_SENHA and

USU_TP_USUARIO = 'A'

 

Referência: 2.8 – Sistema de Login em ASP

 

Explicação:

 

É interessante notar que, para essa tal verificação de usuário e senha, deve se usar o AND na condição para que o nome do usuário e senha seja verdadeiro simultaneamente. O que quero dizer com isso? Imagina que em vez de AND colocar um OR, se uma pessoa estiver mal intencionada e apenas digitar o código do usuário do banco de dados e digitar uma senha inválida, essa condição OR passará tranquilamente, porque a SP perguntará ao banco de dados se o USU_CO_USUARIO é igual o que foi passado ou a senha USU_CO_SENHA foi igual, ao que foi passado, se um dos dois estiverem corretos, o banco de dados retornará os valores ao sistema que chamou, ou seja, ao componente. A condição USU_TP_USUARIO = 'A' significa que só devem buscar os usuários do tipo Ativo. Classifiquei a tabela do meu banco de dados do tipo char(1) para ficar apenas os valores (2.9 – Sistema de Login em ASP).

 

 

A = ativo

U = usuário

I = inativo

 

Referência: 2.9 – Sistema de Login em ASP)

 

 

Referência: 3.0

 

Segue alguns livros que já publiquei.

 

 

 

 

 

Site pessoal:

www.mauriciojunior.org

 

No próximo passo, estarei abordando diretamente o componente COM PLUS. Espero que tenha gostado.

 

Até a próxima.

 

Fico por aqui, meu nome é Maurício Júnior.

Se tiver alguma dúvida, pode entrar em contato pelos e-mails:

 

mauricio@ascompras.com

mauricio@aspneti.com