Foros del Web » Programando para Internet » ASP Clásico »

Base de datos acces

Estas en el tema de Base de datos acces en el foro de ASP Clásico en Foros del Web. Hola amigos! Tengo un grabe problema que no sé solucionar con el tema de login y password. Tengo dos paginas: pagina1.asp y pagina2.asp. La primera ...
  #1 (permalink)  
Antiguo 12/08/2005, 04:42
Avatar de iutunoi  
Fecha de Ingreso: julio-2005
Mensajes: 56
Antigüedad: 18 años, 10 meses
Puntos: 0
Base de datos acces

Hola amigos!
Tengo un grabe problema que no sé solucionar con el tema de login y password. Tengo dos paginas: pagina1.asp y pagina2.asp. La primera es formulario donde se recoge lo siguiente:

<FORM ACTION="pagina2.asp" METHOD="post"><BR>
<B>Usuario:</B> <INPUT NAME="usuario" SIZE="12"><BR>
<B>Contraseña:</B> <INPUT NAME="password" type="password" SIZE="12">
<BR><BR>
<INPUT TYPE="Submit" VALUE="Enviar">


la siguiente es donde se hacen las comprovaciones:

<%
Dim usuario, password, oConn, RS
'Primero nos fijamos si ambos campos fueron completados.
'Si no se cumple, redireccionamos a pagina1.asp
If Request.Form("usuario") = "" OR Request.Form("password") = "" then
Response.Redirect "pagina1.asp"
Else
'Guardamos los datos del Form en variables y evitamos la comilla simple
usuario = Trim(Request.Form("usuario"))
password = Trim(Request.Form("password"))
usuario = Replace(usuario,"'","''")
password = Replace(password,"'","''")

'Conectamos a nuestra BD.
Set oConn = Server.CreateObject ("ADODB.Connection")
oConn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ="& Server.MapPath("ejemplo.mdb")

'Seleccionamos de la tabla solo los registros que concuerden con el usuario del Form.
sql = "SELECT * FROM ejemplo WHERE usuario = '"& usuario &"'"
Set RS = Server.CreateObject ("ADODB.RecordSet")
RS.Open "ejemplo", oConn

'Si el valor EOF (fin de la tabla elegida) es verdadero, no existe el usuario.
If (RS.EOF = true) then
Response.Write "Ese usuario no existe"
ElseIf RS.Fields("password") = password then 'Si el campo de la tabla es igual a nuestra variable, estas logueado.
Response.Write "Bienvenido <B>"& usuario &"</B>"
Else 'Otra cosa, seria cuando el password no es la que seleccionamos.
Response.Write "Esa contraseña no concuerda con el usuario ingresado"
End If

'Limpiamos y cerramos.
RS.Close
oConn.Close
Set RS = Nothing
Set oConn = Nothing
End If
%>

Pero la conexion a la base de datos sospecho que no esta bien ya que a veces me deja entrar y otras no. A veces con una contraseña me deja poner cualquier usuario y lo entra... El error que me da es:

Tipo de error:Provider (0x80004005) Error no especificado /jesus/ejemplo/pagina2.asp, línea 24

que hace referencia a :
Set oConn = Server.CreateObject ("ADODB.Connection")
oConn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ="& Server.MapPath("ejemplo.mdb")


¿¿¿Debo cambiarme a OLEDB???

Entonces el tema quedaría así??:

a la siguiente:
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& Server.MapPath("ejemplo");Jet OLEDB:System Database=system.mdw;"

Agradezco anticipadamente vuestra ayuda
__________________
:adios:Lo que no me mató, me hizo más fuerte (eso va por ti asp!)
  #2 (permalink)  
Antiguo 12/08/2005, 05:04
 
Fecha de Ingreso: septiembre-2003
Mensajes: 341
Antigüedad: 20 años, 8 meses
Puntos: 0
yo normalente utilizo la OLEDB y no tengo ningnun problema...
lo utilizo de la siguiente forma

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& Server.MapPath("ejemplo")
__________________
---Nuestra recompensa se encuentra en el esfuerzo y no en el resultado. Un esfuerzo total es una victoria completa.-- GHANDI
  #3 (permalink)  
Antiguo 12/08/2005, 05:09
Avatar de iutunoi  
Fecha de Ingreso: julio-2005
Mensajes: 56
Antigüedad: 18 años, 10 meses
Puntos: 0
Pregunta

Ok, muchas gracias, ahora me no me da error, pero sigo teniendo el problema que con una determinada contraseña me permite entrar cualquier usuario, incluso los que no estan en la base de datos y con el resto de contraseñas (con sus respectivos usuarios) me sale el mensaje de que no concuerda usuario/contraseña...

Gracias por la ayuda, pero me podrías también ayudar con esto??? Me harías tan feliz!

Gracias por todo!
__________________
:adios:Lo que no me mató, me hizo más fuerte (eso va por ti asp!)
  #4 (permalink)  
Antiguo 12/08/2005, 05:29
Avatar de meru-kun  
Fecha de Ingreso: noviembre-2002
Ubicación: Madrid
Mensajes: 854
Antigüedad: 21 años, 6 meses
Puntos: 0
No entiendo muy bien la lógica de tu codigo, te pongo por aquí la cláusula SQL que (yo creo) es la normal y "mejor":

strSQL = "SELECT * FROM TABLA_USUARIOS WHERE USUARIO='"&chkString(request.form("usuario"))&"' AND PASSWORD='"&chkString(request.form("password"))&"' "

Notese que la función chkString es una que tú habrás desarrollado para "comerte" los ', y demás caracteres que te puedan reventar la sentencia.

Un saludo, espero haber sido de ayuda.
__________________
Tu portal de manga y anime.
  #5 (permalink)  
Antiguo 12/08/2005, 05:39
Avatar de iutunoi  
Fecha de Ingreso: julio-2005
Mensajes: 56
Antigüedad: 18 años, 10 meses
Puntos: 0
Hola Meru-kun!
Gracias por contestar.
He probado lo que me has aconsejado y nada...
la decaracion de las variables la he dejado así:
usuario = Request.Form("usuario")
password = Request.Form("password")


y he puesto: strSQL = "SELECT * FROM TABLA_USUARIOS WHERE USUARIO='"& chkString(request.form("usuario"))&"' AND PASSWORD='"&chkString(request.form("password"))&"' "

pero nada, ahora no me deja entrar con nadie, me dice: Tipo de error:
Error de Microsoft VBScript en tiempo de ejecución (0x800A000D)
No coinciden los tipos: 'chkString'...

Si me podeis seguir ayudando os lo agradezco mucho!
__________________
:adios:Lo que no me mató, me hizo más fuerte (eso va por ti asp!)
  #6 (permalink)  
Antiguo 12/08/2005, 05:59
 
Fecha de Ingreso: septiembre-2003
Mensajes: 341
Antigüedad: 20 años, 8 meses
Puntos: 0
chkString es una funcion que previamente tienes que tener declarada...
__________________
---Nuestra recompensa se encuentra en el esfuerzo y no en el resultado. Un esfuerzo total es una victoria completa.-- GHANDI
  #7 (permalink)  
Antiguo 12/08/2005, 06:02
Avatar de El_Metallick  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago, Chile
Mensajes: 1.718
Antigüedad: 21 años, 7 meses
Puntos: 16
date una vuelta por connectionstrings.com ahi salen todas las formas de conectarce a una base de datos... saludos
__________________
Haz la guerra en la cama y el amor donde se te de la gana...
El tiempo es el mejor maestro, lo único malo es que te mata...¡¡Aprovecha tu tiempo!!
  #8 (permalink)  
Antiguo 12/08/2005, 06:49
Avatar de meru-kun  
Fecha de Ingreso: noviembre-2002
Ubicación: Madrid
Mensajes: 854
Antigüedad: 21 años, 6 meses
Puntos: 0
iutunoi, como bien te ha dicho Motki, chkString es una función que tienes que tener declarada previamente (lo había dejado claro antes :P), para limpiar de caracteres no deseados. De momento, y en lo esencial, podrías hacerla así:
sub chkString(string)
string = replace(string,"'", "''")
chkString = string
end sub

Con eso te funcionará el ej. Si no te quieres complicar, simplemente quita lo de chkString, ya verás como sí que te va ahora.

Saludos.
__________________
Tu portal de manga y anime.
  #9 (permalink)  
Antiguo 16/08/2005, 09:15
Avatar de iutunoi  
Fecha de Ingreso: julio-2005
Mensajes: 56
Antigüedad: 18 años, 10 meses
Puntos: 0
De acuerdo


Hola meru-kun y compañía!
Lo he intentado, pero no me funciona...
Solo me reconoce la primera contraseña y esta me la deja aplicar a todos los usuario de la tabla y los que no estan incluidos en esta tabla...
He mirado en www.connectionstrings.com sobre conexiones oledb a acces y creo que la mejor se me adapta es la de Standard Security
Respecto a la funcion, la he declarado e instanciado,pero cuando lo hago me dice que no coinciden los tipos...igual que antes: "No coinciden los tipos: 'chkString'..."

No sé, no logro descubrir el error, porque el tema está en que sí que se hace la conexion, ya que hay una contraseña que sí que me acepta, la primera (por cierto la he modificado, para ver que pasaba y me acepta, de nuevo, única y exclusivamente esa que ocupa el primer puesto, que se corresponde con ID_Usuario 1)

Creeis que se puede hacer algo más? o es mejor que me dedique a diseñar tableros de madera? Espero no caer en depresión! si me podeis seguir ayudando os lo agradeceré muchísimo
__________________
:adios:Lo que no me mató, me hizo más fuerte (eso va por ti asp!)
  #10 (permalink)  
Antiguo 18/08/2005, 05:39
Avatar de iutunoi  
Fecha de Ingreso: julio-2005
Mensajes: 56
Antigüedad: 18 años, 10 meses
Puntos: 0
Por favor mi tiempo en la tierra se consume...
no sé que es lo que falla en mi codigo lo he modificado como me dijo mer-kun y he seguido las indicaciones de Motki y el Metallick...

Yo lo veo bien y lógico alguien puede ayudarme a darme cuenta de mi error??

Desde ya estoy muy agradecido al foro!
__________________
:adios:Lo que no me mató, me hizo más fuerte (eso va por ti asp!)
  #11 (permalink)  
Antiguo 18/08/2005, 05:43
Avatar de trasgukabi  
Fecha de Ingreso: septiembre-2004
Mensajes: 2.749
Antigüedad: 19 años, 9 meses
Puntos: 18
function chkString(string)
string = replace(string,"'", "''")
chkString = string
end function
  #12 (permalink)  
Antiguo 18/08/2005, 05:53
Avatar de meru-kun  
Fecha de Ingreso: noviembre-2002
Ubicación: Madrid
Mensajes: 854
Antigüedad: 21 años, 6 meses
Puntos: 0
Sí, pequeño despiste :P

Aparte, asegurate de que una vez ejecutado la sentencia SQL, la interpretes bien:
if (mr.eof or mr.bof) then
'NO ha metido bien sus datos; haz lo que sea
else
'SÍ ha metido bien user&passw
end if
__________________
Tu portal de manga y anime.
  #13 (permalink)  
Antiguo 18/08/2005, 05:55
Avatar de iutunoi  
Fecha de Ingreso: julio-2005
Mensajes: 56
Antigüedad: 18 años, 10 meses
Puntos: 0
OK provaré de ponerlo como funcion en lugar de sub rutina , gracias!
Por cierto es mejor que lo ponga en el head, no?

Muchas gracias trasgukabi
__________________
:adios:Lo que no me mató, me hizo más fuerte (eso va por ti asp!)
  #14 (permalink)  
Antiguo 18/08/2005, 05:58
Avatar de iutunoi  
Fecha de Ingreso: julio-2005
Mensajes: 56
Antigüedad: 18 años, 10 meses
Puntos: 0
Ok meru-kun muchas gracias!
Lo pruebo y os comento
__________________
:adios:Lo que no me mató, me hizo más fuerte (eso va por ti asp!)
  #15 (permalink)  
Antiguo 18/08/2005, 09:01
Avatar de iutunoi  
Fecha de Ingreso: julio-2005
Mensajes: 56
Antigüedad: 18 años, 10 meses
Puntos: 0
Pregunta Matame Tú, Pero No Dejes Que Me Mate Esta Incertidumbre... Que Falla En Este Login?

Bueno la función va perfectamente, sin errores ni problemas. Todo ok.
El único y así se convierte en gran fallo es que sólo reconoce una contraseña de toda la tabla (la primera) y reconoce a todos los usuarios que le propongas, incluso si no están en la tabla... es muy raro, no?

A continuación adjunto estrutura de tabla y código.

TABLA: ejemplo
ID_Usuario---- autonumerico
usuario--------texto
password------texto

CODIGO que comprueba usario&password
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<html>
<head>

<%
function chkString(string)
string = replace(string,"'", "''")
chkString = string
end function
%>
</head>

<body>
<%
Dim usuario, password, oConn, RS

'Primero nos fijamos si ambos campos fueron completados.
'Si no se cumple, redireccionamos a pagina1.asp

If Request.Form("usuario") = "" OR Request.Form("password") = "" then
Response.Redirect "../usuaris/usuari.asp"
Else
'Guardamos los datos del Form en variables
usuario = Request.Form("usuario")
password = Request.Form("password")


'Conectamos a nuestra BD.
Set oConn = Server.CreateObject ("ADODB.Connection")
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& Server.MapPath("ejemplo.mdb")


'Seleccionamos de la tabla solo los registros que concuerden con el usuario del Form.
'ejemplo es como se llama la tabla de la base de datos a consultar
strSQL = "SELECT * FROM ejemplo WHERE usuario='"&chkString(Request.Form("usuario"))&"' AND password='"&chkString(Request.Form("password"))&"' "
Set rs = Server.CreateObject ("ADODB.RecordSet")
RS.Open "ejemplo", oConn

'Si el valor EOF (fin de la tabla elegida) es verdadero, no existe el usuario.
If (RS.EOF or = true) then
Response.Write "Ese usuario no existe"
ElseIf RS.Fields("password") = password then
'Si el campo de la tabla es igual a nuestra variable, estas logueado.

Response.Write "Bienvenido <B>"& usuario &"</B>"
Else
'Otra cosa, seria cuando el password no es la que seleccionamos.

Response.Write "Esa contraseña no concuerda con el usuario ingresado"
End If

'Limpiamos y cerramos.
RS.Close
oConn.Close
Set RS = Nothing
Set oConn = Nothing
End If
%>

</body>
</html>

Hay algo que esté mal? ue vosotros podais ver? Muchas gracias por vuestro tiempo y conocimientos
__________________
:adios:Lo que no me mató, me hizo más fuerte (eso va por ti asp!)

Última edición por iutunoi; 18/08/2005 a las 09:05 Razón: para que los colores sean más legibles
  #16 (permalink)  
Antiguo 18/08/2005, 10:26
Avatar de meru-kun  
Fecha de Ingreso: noviembre-2002
Ubicación: Madrid
Mensajes: 854
Antigüedad: 21 años, 6 meses
Puntos: 0
Aparte de "lo gordo", veo alguna serie de cosas menores que podrias tener en cuenta también.
Primero lo gordo. Tu sentencia condicional ... es algo de lo que se habló en otro post: no es en absoluto recomendable decir a alguien que sí que ha metido bien el usuario, pero la contraseña es otra. Además, haces esto: If (RS.EOF or = true) then , y que yo sepa eso no está bien (la negrita me da que sobra):
If (RS.EOF or RS.bof) then
Response.Write "¡Metiste mal los datos!"
else
Response.Write "Bienvenido <B>"& usuario &"</B>"
end if

Pruebalo así ;)
__________________
Tu portal de manga y anime.
  #17 (permalink)  
Antiguo 19/08/2005, 04:20
Avatar de iutunoi  
Fecha de Ingreso: julio-2005
Mensajes: 56
Antigüedad: 18 años, 10 meses
Puntos: 0
Olé,Olé, Olé!!! Muchísimas gracias Meru-kun!!!!!Qúe grande eres tío!lo de la negrita, lo había puesto bien, pero con la pedacho de cadena rara que tenía al pasarlo aquí quise poner la anterior y lo copie mal :p

Ostras tío qué bien!por cierto, ya puestos ;) las cosas menores a qué te referías?

Un saludo
__________________
:adios:Lo que no me mató, me hizo más fuerte (eso va por ti asp!)
  #18 (permalink)  
Antiguo 19/08/2005, 04:25
Avatar de iutunoi  
Fecha de Ingreso: julio-2005
Mensajes: 56
Antigüedad: 18 años, 10 meses
Puntos: 0
Oh, oh... demasiada alegría...
Ahora me pasa algo aún más terrorífico... Ahora en mi identificación todo vale... le metas lo que le metas te dice bienvenido... como si le pones "perico de los palotes", te inventes el usuario que te inventes o la contraseña que sea...
Jooo... por qué???
__________________
:adios:Lo que no me mató, me hizo más fuerte (eso va por ti asp!)
  #19 (permalink)  
Antiguo 19/08/2005, 07:12
Avatar de meru-kun  
Fecha de Ingreso: noviembre-2002
Ubicación: Madrid
Mensajes: 854
Antigüedad: 21 años, 6 meses
Puntos: 0
Pues por mucho que mire el código, yo lo veo perfecto. ¿Estás seguro de que tienes algún usuario metido en esa tabla y tal?
Es que esto ya escapa a todas las leyes de la física XD.

Buen, veo algo raro: ¿donde dices que estás abriendo la sentencia strSQL? Cambia esto:
RS.Open "ejemplo", oConn
por esto:
set RS = oConn.execute(strSQL)

Y me dices :P
__________________
Tu portal de manga y anime.
  #20 (permalink)  
Antiguo 22/08/2005, 07:58
Avatar de iutunoi  
Fecha de Ingreso: julio-2005
Mensajes: 56
Antigüedad: 18 años, 10 meses
Puntos: 0
Ohhhhhhhhh!!!!! Qué grande eres tío!!!!
Ahora sí que funciona genial!!!!

Muchas muchas muchas gracias por tu tiempo y tu conocmiento!!!!!
__________________
:adios:Lo que no me mató, me hizo más fuerte (eso va por ti asp!)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:56.