28/09/07, 23:30:02
|
#1 (permalink)
|
|
Moderatroll
Registrado: nov 2002
Mensajes: 6.955
|
Un módulo de usuarios
Hola a todos, desde hace tiempo he querido ir desarrollando un pequeño módulo que pueda servir a la comunidad, después de indagar un poco y aunque hay muchas y muy buenas cosas hechas, y asp 3.0 es obsoleto y bla bla bla, no me quise quedar con las ganas, así que pensé en desarrollar un pequeño módulo de usuarios donde además daré una breve explicacón de las técnicas empleadas y su por qué, espero que lo disfruten y nos acompañemos, estaré muy contento de escuchar/leer sus dudas y sobre todo sus sugerencias, tomen en cuenta que todo lo expresado a lo largo de este tópico es meramente mi opinión, lo importante es obtener cada quien sus conclusiones.
- Sobre la estructura de directorios:
Esto es algo que regularmente todos pasamos por alto a la hora de construír nuestras aplicaciones, y no debería ser; una buena estructura de directorios, nos permite tener organizado nuestros archivos, y contenidos, por ende, el mantenimiento al website siempre será mejor y más organizado, entre más organizado y simple se encuentre nuestra estructura de directorios, así pues que para este proyecto, emplearemos la siguiente estructura:
Código:
Directorio raíz
|
|--admin (la famosa carpeta, ya sabes que es ¿no?)
|
|--componentes (utilizaremos esta carpeta para alojar nuestra/s clase/s)
|
|
|--global.asa
|--conexion.asp
Bueno, hasta aquí vamos bien, pretendo que podamos hacer nuestra aplicación configurable con Access y SQL, hace mucho que no trabajo con Access, pero en teoría debe funcionar igual si nos apegamos a los estándares MS
* Pasos preliminares
Nombre de la base de datos: curso
Estructura:
Código:
tbl_usuario
--------------------
usuario_id | autoincremental, llave primaria
usuario_uname | texto/varchar(50)
usuario_pwd | texto/varchar(50)
* Código del global.asa
Es siempre una buena costumbre utilizar nuestro global.asa de manera eficiente, hay que recordar que el alcance de las variables declaradas en el global.asa, es de aplicación, esto quiere decir que estarán disponibles para toda la vida de nuestra aplicación desde la primera petición que se haga a nuestro sitio web y en adelante; su valor será siempre el mismo a menos que se modifique directamente el global.asa
Código:
<script language="vbscript" runat="server">
sub Application_OnStart
Application("baseDatos") = "sql" 'cambia valor a access si es esta bd con la que trabajarás
Application("baseDatosNombre") = "cursito" 'nombre de tu base de datos, la mia se llama cursito
Application("baseDatosRutaoServidor") = "(local)" 'direccion de tu servidor SQL, o ruta de fisica a tu base de datos si ocupas access, asegurate de ponerle un \ al final de la ruta.
end sub
</script>
* Código del archivo conexion.asp
Esto es algo que personalmente me parece una buena práctica, me gusta guardar el string de conexión en un archivo.asp que llamo conexion.asp, ahí podemos poner ciertas condiciones que se cumplan de acuerdo a nuestra variable de aplicación para hacerle saber qué base de datos utilizará.
Código:
<%
Dim strConnect
Select case lcase(Application("baseDatos"))
case "access"
strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Application("baseDatosRutaoServidor")&";"
case "sql"
strConnect = "Provider=SQLNCLI;Server="&Application("baseDatosRutaoServidor")&";Database="&Application("baseDatosNombre")&";Trusted_Connection=yes;"
End Select
%>
<!-- METADATA type="typelib" file="D:\program Files\Common Files\System\ado\msado15.dll" -->
Básicamente es un SELECT CASE, el cual se encarga de elegir el string de conexion. Nota el include que hago del archivo msado15.dll, esta es una muy buena práctica para incluir las constantes de ado sin tener que incluir el archivo ese maligno llamado adovb.inc o algo por el estilo, que siempre me cayó mal y lo bueno de tener este archivo de conexion es que lo incluiremos en todos lados donde nos conectemos a la base de datos, por lo tanto, también tendremos nuestras constantes de ADO disponibles cada vez que queramos abrir una conexión.
Eso es todo por hoy, mañana incluiremos nuestro formulario de login y revisaremos lo básico de la clase usuario.
Salud
__________________
¡datos...datos...DAATOOOSSS!
|
|
|
|
29/09/07, 03:16:30
|
#2 (permalink)
|
Registrado: ene 2006
Ubicación: Torroles (Costa der Só)
Mensajes: 917
|
Re: Un módulo de usuarios
Bravo, U_G !!! Me gusta mucho tu iniciativa. Igual me hago yo un cursillo de XML
Yo haria otra tabla para controlar los accesos de los usuarios:
Código:
tbl_accesos
--------------
session_id -------------------- String(128)
usuario_id -------------------- Long(12)
usuario_ip -------------------- String(15)
datetime_entrada ---------- DateTime
datetime_salida ------------- DateTime
Y añadiria un campo más a la tabla de usuarios:
bloqueado -------------------- Boolean
Nos permitiria banear temporalmente a determinados usuarios
Un saludo
__________________
"Tus pecados son el estiércol sobre el que florecerán las flores de tus virtudes" - Gerald Messadié -
|
|
|
|
29/09/07, 08:22:55
|
#3 (permalink)
|
|
Moderatroll
Registrado: nov 2002
Mensajes: 6.955
|
Re: Un módulo de usuarios
Cita:
Originalmente publicado por tammander
Bravo, U_G !!! Me gusta mucho tu iniciativa. Igual me hago yo un cursillo de XML
Yo haria otra tabla para controlar los accesos de los usuarios:
Código:
tbl_accesos
--------------
session_id -------------------- String(128)
usuario_id -------------------- Long(12)
usuario_ip -------------------- String(15)
datetime_entrada ---------- DateTime
datetime_salida ------------- DateTime
Y añadiria un campo más a la tabla de usuarios:
bloqueado -------------------- Boolean
Nos permitiria banear temporalmente a determinados usuarios
Un saludo
Gracias tamm, si, te adelantaste un poquito  , la idea es mas o menos hacer bien básico un ABM pero ir incorporando funcionalidades, para demostrar que a veces si puedes hacer "future proof" de un sistema, en un rato más detallaremos el formulario y sí, estaría genial si nos regalas un curso de XML
Saludos my friend
__________________
¡datos...datos...DAATOOOSSS!
|
|
|
|
29/09/07, 09:39:01
|
#4 (permalink)
|
|
Moderatroll
Registrado: nov 2002
Mensajes: 6.955
|
Re: Un módulo de usuarios
Antes que nada les comento que trataré castellanizar en la medidad de lo posible la aplicación salvo en casos que son tan comunes que se hagan en inglés que hasta suena raro hacer algún tipo de traducción, lo cuál también es una práctica muy difícil para mí ya que entiendo el spanglish fluídamente y lo escribo exclusivamente  bueno, vamos a trabajar, lo que haremos hoy será:
- Crear la estructura inicial de archivos dentro de nuestro folder "admin"
- Trazar el HTML del formulario de login
- Hablar un poco acerca de la clase usuario
Vamos a colocarnos en: Raiz del Sitio\Admin\
* Crea los siguientes archivos, dejalos todos en blanco:
- footer.asp
- header.asp
- login.asp
- estilos.css
- libreria.js
Más o menos así debe haber quedado tu folder:
admin1.gif
* Acerca de los archivos header.asp y footer.asp
Por cuestiones de reutilización de código siempre es recomendable hacer un archivo header(encabezado, ya lo sabías ¿cierto?) y footer, los cuales estarán en la parte de arriba y abajo de tu aplicación, en esta ocasión estamos trabajando en el "backend" por lo cuál estos archivos residen dentro de la carpeta admin.
Regularmente la estructura básica del HTML debería estar en otro archivo y llamar a nivel de include a aquellos archivos que dan contenido, esto se hace más que nada en el front end, pues es dónde regularmente requires un poco de más dinamismo, en tanto que el backend puede llegar a ser un poco más constante en cuanto a su conducta se refiere, la idea es la siguiente:
Código:
<html>
<!--#include file = "header.asp"-->
<%
'Serie de condiciones que pone al archivo en vistas distintas por medio de llamadas include a diferentes archivos.
%>
<!--#include file = "footer.asp"-->
</html>
Obviamente en el header tendríamos nuestra definicón del tag head y todo lo que conlleva y el inicio del tag body, en el footer pues tendremos la parte de abajo del website, el footer de FDW podría comenzar donde se lee: "Todas las horas son GMT -7. La hora es 07:36:15."
No estoy aquí para enseñarte HTML, ya que estoy seguro que para este momento serás un experto, sin embargo, nunca está de más hacer un repaso rápido, así que brevemente detallaremos el HTML de nuestro formulario de login:
Abre tu archivo header.asp, y pega por favor el siguiente código:
Código:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<link rel="stylesheet" href="estilos.css" type="text/css" media="all" />
<meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1">
<script type="text/javascript" src="libreria.js"></script>
</head>
<body>
Por favor, no nos acostumbremos a hacernos alérgicos al tipo de documento, siempre es una buena costumbre incluírlo, mas info aquí.
Dentro de la etiqueta header estoy poniendo nuestra hoja de estilos, un archivo javascript y el charset, este último es bien importante, y espero me perdones por no incluír titulo, descripción y demás, pero tú si lo puedes hacer bien en tu aplicación
Continuaremos en nuestro archivo footer.asp, por favor, abre copia y pega el siguiente HTML:
Bueno, ya tenemos nuestro esqueleto HTML, ahora si, podemos ponernos a trabajar con nuestro formulario de login:
Código:
<form action="login.asp" method="post" id="formaAsp">
<input type="hidden" name="formaEnviada" value="1" />
<input type="hidden" name="accion" value="ingresar" />
<fieldset class="forma">
<legend>Introduzca sus datos de acceso</legend>
<div class="formaEtiqueta">
<label for="uname">Usuario: </label>
</div>
<div class="formaCampo">
<input type="text" id="uname" name="uname" value="" maxlength="50" />
</div>
<br />
<div class="formaEtiqueta">
<label for="pwd">Password: </label>
</div>
<div class="formaCampo">
<input type="password" id="pwd" name="pwd" maxlength="8" vcalue="" />
</div>
<br />
<input type="submit" value="Ingresar" class="formaBoton" />
</fieldset>
</form>
Como te dije anteriormente, no pretendo re-enseñarte HTML, pero revisaremos rápidamente la estructura de nuestro formulario.
<form action="login.asp" method="post" id="formaAsp">
Esta forma viaja al archivo login.asp, es decir que se llamará a si misma.
Viaja por post, es decir que entre otras cosas los valores no se muestran en la URL
El identiicador único de esta forma es formaAsp, todo elemento HTML debería en teoría tener un identificador único mediante el cuál poder hacer referencia.
Por lo demás, desde hace ya algunos años la tendencia es no maquetar con tablas, sino hacerlo con css, para los que venimos de la vieja escuela de tablas fué todo un reto pensar en contendores en lugar de celdas y posicionamientos en lugar de spacing y padding, pero una vez que lo conseguimos, no nos queda otra que presumirlo
Basicamente utilizamos un "wrapper" para los elementos label e input que haremos flotantes y utilizamos el <br /> para hacer un "clearing" entre lineas de elementos, pero nos dedicaremos mas adelante a dejarlo bonito.
Por lo demás por costumbre del lugar donde actualmente trabajo, tenemos que hacer aplicaciones que en la medida de lo posible cumplan con la famosa sección 508 la cual se refiere a crear aplicaciones en las cuales las personas con ciertas discapacidades puedan acceder a la información, aquí en nuestro foro hay mucha info al respecto , la parte destacable entonces, es esta:
Código:
<label for="uname">Usuario: </label>
<input type="text" id="uname" name="uname" value="" maxlength="50" />
Básicamente lo que se hace es asociar mediante el atributo "for" del elemento label, a la etiqueta del formulario con su campo correspondiente, de esta manera si una persona es invidente y está utilizando un lector de HTML, podrá llenar el formulario al saber que lo que contenga la etiqueta label es el texto para el campo que tiene un id uname, en este caso, el nombre de usuario.
Por último, abre el archivo login.asp y coloca todo el código:
Código:
<!--#include file = "../admin/header.asp"-->
<form action="login.asp" method="post" id="formaAsp">
<input type="hidden" name="formaEnviada" value="1" />
<input type="hidden" name="accion" value="ingresar" />
<fieldset class="forma">
<legend>Introduzca sus datos de acceso</legend>
<div class="formaEtiqueta">
<label for="uname">Usuario: </label>
</div>
<div class="formaCampo">
<input type="text" id="uname" name="uname" value="" maxlength="50" />
</div>
<br />
<div class="formaEtiqueta">
<label for="pwd">Password: </label>
</div>
<div class="formaCampo">
<input type="password" id="pwd" name="pwd" maxlength="8" vcalue="" />
</div>
<br />
<input type="submit" value="Ingresar" class="formaBoton" />
</fieldset>
</form>
<!--#include file = "../admin/footer.asp"-->
¿Qué crees? que ya me extendí demasiado por hoy, y tengo que cortar aquí, revisaremos la clase usuario en la próxima ocasión.
Saludos!
__________________
¡datos...datos...DAATOOOSSS!
Última edición por Myakire fecha: 30/09/07 a las 09:20:15.
Razón: Cambiar unas etiquetas dado el copy-paste estaban incorrectas
|
|
|
|
29/09/07, 10:30:45
|
#5 (permalink)
|
|
Colaborador
Registrado: feb 2007
Ubicación: Localhost/Pruebas....
Mensajes: 1.919
|
Re: Un módulo de usuarios
 muy buena clase "Master of Darkness" U_G(  ), refrescar un poco la memoria y compartilo con nosotros
mas de 1 te lo agradecera
solo por remembranza de un post anterior
"evitar que los campos contenga palabras reservadas de ACCESS, SQL y los simbolos (_, -, *, /, y similares )" para evitar errores de consulta, en el caso que nuestro gran "Ticher" propuso se escriben entre corchetes [usuario_id].

__________________
"Eres parte del problema, parte de la solucion o parte del paisaje"
Un Saludo desde Desierto de Altar, Sonora, MX.
Shiryu_libra
Última edición por Shiryu_Libra fecha: 29/09/07 a las 10:50:24.
|
|
|
|
30/09/07, 09:50:25
|
#6 (permalink)
|
|
Moderatroll
Registrado: nov 2002
Mensajes: 6.955
|
Re: Un módulo de usuarios
Cita:
para evitar errores de consulta, en el caso que nuestro gran "Ticher" propuso se escriben entre corchetes [usuario_id].
Hola, intentaré en este post diario antes de entrar en materia contestar a sus comentarios, sugerencias y dudas si hubiera alguna, gracias al caballero del zodiaco por su observación, sin embargo el guion bajo es muy usado en el ambiente de bases de datos, realmente me sorprenderia si tuvieras que ocupar los corchetes, realmente nunca me ha sucedido aunque no diga que no puede ser posible, si creo que la posibilidad es remota.
Ahora si, a trabajar.
__________________
¡datos...datos...DAATOOOSSS!
|
|
|
|
30/09/07, 10:03:40
|
#7 (permalink)
|
|
Moderatroll
Registrado: nov 2002
Mensajes: 6.955
|
Re: Un módulo de usuarios
Para comenzar, se me olvidó el día de ayer revisar un par de campos hidden que se encuentran en nuestro formulario, con frecuencia en el desarrollo web, cuando trabajamos con formularios tenemos que envíar datos que no siempre queremos que el usuario a simple vista detecte, pero que por alguna razón nuestro sistema necesita conocer, para este propósito nos valemos de los campos de tipo "hidden" u escondidos/ocultos, para los que comienzan o planean comenzar con .NET, los campso hidden son representados por el objeto ViewState, -solo queria destacar esto porque a mi me costo mucho trabajo averiguarlo  - si observamos nuestro formulario de login, tenemos 2:
Código:
<input type="hidden" name="formaEnviada" value="1" />
<input type="hidden" name="accion" value="ingresar" />
Como mencioné el día de ayer, esta forma hará que el archivo login.asp se llame a si mismo, de manera tal que tenemos que tener algo que le diga a nuestro archivo que hacer en qué momento, para esto ocuparemos el primer hidden, que básicamente le dirá a nuestro archivo que la forma de login ha sido envíada, de ahí su nombre "formaEnviada".
Con respecto al 2do campo, estaba pensando que sería bueno en caso de querer reutilizar este formulario, pero ahora no se que tan buena idea, sea, así que no le demos importancia y dejémoslo ahí mientras, aunque si eres perfeccionista ya se que me vas a gritar que ese campo lo único que hace es utilizar ancho de banda necesariamente, pero qué diablos, yo nunca he pagado por ancho de banda
Ahora que hemos terminado de revisar el detalle del HTML, pasemos al parte lógica, para eso me gustaría continuar en otro post...
__________________
¡datos...datos...DAATOOOSSS!
|
|
|
|
30/09/07, 11:41:35
|
#8 (permalink)
|
|
Moderatroll
Registrado: nov 2002
Mensajes: 6.955
|
Re: Un módulo de usuarios
* Un vistazo breve al interior de una clase
Hay muchísimo de que hablar sobre este tema, no pretendo ni con mucho adentrarme y en realidad no se hasta que punto podría hacerlo eficientemente, así que solo repasaremos rápida y condensadamente los puntos básicos que debemos saber antes de aventurarnos a escribir nuestra clase usuario.
Técnicamente hablando, una clase es un conjunto de propiedaes, métodos y eventos* que interactúan entre sí que da como resultado un plano o blueprint de algún objeto, es decir, nosotros diseñamos las clases para que al instanciarlas se conviertan en objetos. Un objeto es una instancia de alguna clase, un objeto entonces tiene propiedades, métodos y eventos.
- Propiedad: La definición rápida y contundente es: Una cualidad de los objetos, una propiedad del objeto automóvil podría ser su color.
- Método: Acción que realiza el objeto, un automóvil, acelera.
- Eventos: Es algo que ocurre que dispara un método, pisar el acelerador ocasiona que el automóvil acelere.
Nuestra clase usuario tendrá para comenzar 3 propiedades, las cuales podemos encontrar en nuestra tabla tbl_usuario, aunque no siempre una propiedad refleja un campo en la base de datos.
A las propiedades se les puede asignar un valor, pero también podemos rescatar su valor, no siempre una propiedad puede ser establecida y rescatada, pero para efectos de nuestro ejercicio así será.
La sintáxis para referirnos a las propiedades de nuestros objetos en VBS es la siguiente:
Código:
'Asignar valor
Objeto.propiedad = valor
'Rescatar valor
valor = Objeto.propiedad
Ahora para efectos de nuestra clase, necesitamos dos miembros por cada propiedad, un miembro público y otro privado, un miembro público es aquél que es visto desde afuera del objeto, los dos ejemplos anteriores se refieren a un miembro público de nuestro objeto, por ende, necesitamos valernos de dos métodos, uno para asignar el valor, otro para devolverlo.
Código:
'Miembro privado que se llama id
private m_id
'Asigna el valor
public property let id(p_data)
m_id = p_data
end property
'Devuelve el valor
public property get id()
id = m_id
end property
La sintaxis para comenzar a diseñar una clase es la siguiente:
Código:
Class usuario
.
.
.
End Class
La sintaxis para instanciar una clase o crear un objeto es la siguiente:
Código:
'Dimensionamos nuestra variable que se convertira en el objeto
Dim Objusuario
'Instanciamos nuestro objeto
Set Objusuario = new usuario
'ejecutamos las operaciones deseadas con nuestro objeto
'Es una buena costumbre destruir nuestros objetos
Set ObjUsuario = Nothing
Ok, ya estamos listos para comenzar a codificar nuestra clase
En el folder componentes, crea el archivo: usuario.asp y codifiquemos el siguiente código que nos permitirá poder acceder a los propiedades básicas de nuestra clase usuario -ya iremos agregando mas cosas-
Código:
<%
Class usuario
private m_id
private m_uname
private m_pwd
public property get id()
id = m_id
end property
public property let id(p_data)
m_id = p_data
end property
public property get uname()
uname = m_uname
end property
public property let uname(p_data)
m_uname = p_data
end property
public property get pwd
pwd = m_pwd
end property
public property let pwd(p_data)
m_pwd = p_data
end property
End Class
%>
'Ok, ya podemos probar nuestra clase
<!--#include file = "componentes/usuario.asp"-->
<%
Dim ObjUsuario
Set ObjUsuario = new usuario
'Asignamos un valor
ObjUsuario.uname = "Este es mi nombre"
'Lo recuperamos
Response.Write(ObjUsuario.uname)
Set ObjUsuario = Nothing
%>
En la próxima ocasión comenzaremos a agregar un poco de lógica a nuestro formulario.
Saludos
__________________
¡datos...datos...DAATOOOSSS!
|
|
|
|
30/09/07, 21:54:13
|
#9 (permalink)
|
Registrado: nov 2005
Mensajes: 178
|
Re: Un módulo de usuarios
nada que decir exelente :)

|
|
|
|
01/10/07, 10:09:06
|
#10 (permalink)
|
Registrado: oct 2003
Mensajes: 1.453
|
Re: Un módulo de usuarios
excelente.
gracias de mi parte pot este post
__________________
Juan Ramón Pérez
San Salvador, El Salvador
|
|
|
|
01/10/07, 10:44:15
|
#11 (permalink)
|
|
Moderador
Registrado: nov 2002
Ubicación: 34.517 S, 58.500 O
Mensajes: 11.966
|
Re: Un módulo de usuarios
Ansioso espero el capítulo del lunes!
:aplausos:
__________________
···---···
|
|
|
|
01/10/07, 13:31:48
|
#12 (permalink)
|
|
Moderador
Registrado: nov 2002
Mensajes: 6.260
|
Re: Un módulo de usuarios
Oiga maestro, ¿que pasaría si yo no asigno un valor a la propiedad uname y de todas formas la despliego? ¿no debería tener un valor por default?
El alumno que se adelanta para llamar la atención nunca falta 
|
|
|
|
01/10/07, 13:51:03
|
#13 (permalink)
|
|
Moderatroll
Registrado: nov 2002
Mensajes: 6.955
|
Re: Un módulo de usuarios
Cita:
Originalmente publicado por Myakire
Oiga maestro, ¿que pasaría si yo no asigno un valor a la propiedad uname y de todas formas la despliego? ¿no debería tener un valor por default?
El alumno que se adelanta para llamar la atención nunca falta 
Te voy a dar este citatorio para tus padres, traelo firmado por ellos mañana por la mañana o te regreso a tu casa
En un rato más nos ponemos a agregar lógica a nuestro form.
Saludos
__________________
¡datos...datos...DAATOOOSSS!
|
|
|
|
01/10/07, 15:11:52
|
#14 (permalink)
|
Registrado: nov 2004
Mensajes: 93
|
Re: Un módulo de usuarios
nunca habia leido un manual realmente bueno no te puedo decir mas uqe felicitaciones
|
|
|
|
01/10/07, 18:19:30
|
#15 (permalink)
|
|
Moderatroll
Registrado: nov 2002
Mensajes: 6.955
|
Re: Un módulo de usuarios
Primero que nada ¡Gracias por sus comentarios!
Ahora que comencé a probar un poco la aplicación me encontré con un par de errores que solo me muestra que nadie ha seguido el código
Fé de erratas:
* Global.asa, línea 5, por favor renombrar la variable a:
Código:
Application("baseDatosRutaServidor")
'tenia una 'o' entre Ruta y Servidor
* Conexion.asp, línea 5, cambiar la variable anterior y agregar la variable que contiene el nombre de la base de datos:
Código:
strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Application("baseDatosRutaServidor")&Application("baseDatosNombre")&";"
Ahora si, a trabajar...
__________________
¡datos...datos...DAATOOOSSS!
|
|
|
|
01/10/07, 19:38:11
|
#16 (permalink)
|
|
Moderatroll
Registrado: nov 2002
Mensajes: 6.955
|
Re: Un módulo de usuarios
En Programación Orientada a Objetos (OOP ó POO), generalmente tenemos dos métodos que se llaman "Constructor y Destructor" para cada clase, éstos son ejecutados cada vez que la clase se instancia o se destruye respectivamente, VBS al no ser un lenguaje OOP, no tiene tales métodos, sin embargo, implementa dos subrutinas similares llamadas
Class_Initialize y Class_Terminate respectivamente, sendas subrutinas se ejecutan al iniciar y destruir nuestro objeto, como son privadas, solo se ven en el interior de nuestra clase, es decir, no podremos hacer que nuestro objeto llame a estos métodos a voluntad, el sabe que los ejecutará al iniciar y terminar, si no se definen estos métodos, no pasa nada, en caso que te estuvieras preguntando  .
Ahora, Myakire se adelantó hace rato por eso le dí un citatorio para sus papás (no tanto) realmente no tenía planeado incluír este método pero ya que metió su cuchara tendremos que hacerlo (gracias  )
Vamos a trabajar y hagamos que al instanciar nuestra clase, sus propiedades tomen valores por defecto, abrimos nuestro archivo usuario.asp y escribimos nuestra subrutina Class_Initialize:
Código:
Private sub Class_Initialize
m_id = -1
m_uname = ""
m_pwd = ""
End sub
Esto hará el truco
* Lógica del formulario
Es siempre la mejor idea sentarse un rato a pensar antes de comenzar a tirar líneas de código, te sugiero siempre crear un algoritmo básico para todo proceso, y siempre tratar de hacerlo de manera ordenada y estandarizada, programar una aplicación ordenadamente te ahorrará muchos dolores de cabeza a tí y a quien mantenga tu sistema -y dirán uy si que ordenado es u_g, para nada, pero trato de serlo aunque nunca lo logro- en fin, básicamente de lo que se trata la lógica de nuestro archivo es:
- Detectar si la forma ha sido envíada cuando la página carga
- Si ha sido envíada tratará de "loguear" al usuario
- Si el usuario es autentificado, ya ganamos 
- Si el usuario no es autentificado, redireccionaremos a nuestra misma forma, y le avisaremos que una de dos, o las dos (usuario y password) no son válidos.
¿Fácil no?
Abrimos nuestro archivo admin/login.asp, y comenzamos después de la serie de includes, vamos a tratar a lo largo de todo este módulo de declarar todas las variables que utilizaremos, no solo es una buena costumbre, sino ayudará para que ahora que migremos a otros lenguajes, no nos cueste trabajo deshacernos de la herencia maldita de VB:
Código:
<%
'una variable booleana que nos ayudará para saber si la forma se ha envíado
Dim formaHasidoEnviada
'Nuestro objeto usuario
Dim ObjUsuario
'Si existe un error lo imprimiremos con esta varibale
Dim strError
'Si el campo formaEnviada que es nuestro hidden tiene un valor, quiere decir que la forma se ha enviado
formaHasidoEnviada = len(Request.Form("formaEnviada")) > 0
'Inicializamos nuestro variable de error a nada por el momento
strError = ""
'Continua...
Ahora viene la parte divertida...vamos a ver que mostramos de acuerdo a nuestras variables:
Código:
'Si no se ha enviado la forma
if not formaHasidoEnviada then
'Si existe algun error guardado en sesion, entonces nuestra variable de error adquirira un valor
if Session("loginError") then
strError = "Usuario o contraseña incorrectos, por favor intente de nuevo"
'Si hubo error ya tenemos nuestro string, no tiene caso que sigamos cargando con una variable
'de sesion mas, asi que la quitamos.
Session.Contents.Remove("loginError")
end if
%>
<!--Agregamos un div que sirva como etiqueta para mostrar el error, esto va arriba del form--->
<div class="error"><%=strError%></div>
<!--Aqui va nuestro formulario--->
else
'Se ha enviado la forma, necesitamos comprobar al usuario
'Instanciamos nuestro clase usuario, aqui se llama automaticamente a la subrutina Initialize
Set ObjUsuario = new usuario
'Recuperamos nuestros valores asignandolos a su propiedad correspondiente...les quitamos los strings 'vacios al inicio y final de la cadena
ObjUsuario.uname = trim(Request.Form("uname"))
ObjUsuario.pwd = trim(Request.Form("pwd"))
'----------Esta parte la trabajaremos mañana------
'if ObjUsuario.Autentificar() then
' Response.Write("Ahora si ingresaste")
'else
' Set ObjUsuario = Nothing
' Session("usuarioID") = ""
' Session("loginError") = true
' Response.Redirect("login.asp")
'end if
'--------------------------------------------------
end if
__________________
¡datos...datos...DAATOOOSSS!
|
|
|
|
01/10/07, 19:42:33
|
#17 (permalink)
|
|
Moderatroll
Registrado: nov 2002
Mensajes: 6.955
|
Re: Un módulo de usuarios
Falta agregar en la parte superior de nuestro archivo, los includes correspondientes de la cadena de conexión y la clase usuario, sin estos includes los Dioses del ASP, se enojarán con nosotros:
Código:
<!--#include file = "../conexion.asp"-->
<!--#include file = "../componentes/usuario.asp"-->
Al final, nuestro código quedará más o menos así:
Código:
<!--#include file = "../conexion.asp"-->
<!--#include file = "../componentes/usuario.asp"-->
<!--#include file = "../admin/header.asp"-->
<%
Dim formaHasidoEnviada
Dim ObjUsuario
Dim strError
formaHasidoEnviada = len(Request.Form("formaEnviada")) > 0
strError = ""
if not formaHasidoEnviada then
if Session("loginError") then
strError = "Usuario o contraseña incorrectos, por favor intente de nuevo"
Session.Contents.Remove("loginError")
end if
%>
<div class="error"><%=strError%></div>
<form action="login.asp" method="post" id="formaAsp">
<input type="hidden" name="formaEnviada" value="1" ID="Hidden1"/>
<input type="hidden" name="accion" value="ingresar" ID="Hidden2"/>
<fieldset class="forma">
<legend>Introduzca sus datos de acceso</legend>
<div class="formaEtiqueta">
<label for="uname">Usuario: </label>
</div>
<div class="formaCampo">
<input type="text" id="uname" name="uname" value="" maxlength="50" />
</div>
<br />
<div class="formaEtiqueta">
<label for="pwd">Password: </label>
</div>
<div class="formaCampo">
<input type="password" id="pwd" name="pwd" maxlength="8" vcalue="" />
</div>
<br />
<input type="submit" value="Ingresar" class="formaBoton" />
</fieldset>
</form>
<%
else
Set ObjUsuario = new usuario
ObjUsuario.uname = trim(Request.Form("uname"))
ObjUsuario.pwd = trim(Request.Form("pwd"))
'----------Esta parte la trabajaremos mañana------
'if ObjUsuario.Autentificar() then
' Response.Write("Ahora si ingresaste")
'else
' Set ObjUsuario = Nothing
' Session("usuarioID") = ""
' Session("loginError") = true
' Response.Redirect("login.asp")
'end if
'--------------------------------------------------
end if
%>
<!--#include file = "../admin/footer.asp"-->
Mañana implementaremos el método de autentificar y hablaremos del objeto Command, al final del día tendremos nuestro form funcionando  .
Saludos
__________________
¡datos...datos...DAATOOOSSS!
|
|
|
|
02/10/07, 07:13:49
|
#18 (permalink)
|
|
Moderador
Registrado: nov 2002
Mensajes: 6.260
|
| |