Ayuda a los que dominan de ASP

Hola a todos, tengo una duda en un código ASP que estoy probando, a ver si me podéis ayudar.

Se trata de una página de validación, la típica de Usuario y Password. Lo que busco, es que dependiendo del usuario, si la validación es correcta, sea redireccionado a una URL u otra.

Dispongo de esta tabla: ID_Usuario, Login, Password, URL.

La web tiene la siguiente estructura:

login.asp

<%
'Para los redireccionamientos
Response.Buffer=True

Dim oConn, rs, SQL, nombre, password

'Recogemos el formulario
nombre=Trim( Request.Form("Nombre") )
password=Trim ( Ruest.Form("Password") )

'Si no lo ha enviado, es decir no hay nada en estas variables
'le presentamos el formulario

if nombre="" then
MostrarFormulario
else

'Validamos su identidad
set oConn=Server.CreateObject("ADODB.Connection")
oConn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("ejemplo.mdb)
SQL="SELECT Id_USUARIO, Login, Password FROM " & _
"Usuarios WHERE (Login='"&nombre&"' AND Password='"&password&"');"

'Ejecutamos consulta
set rs=oConn.Execute(SQL)

if rs.EOF then

'No existe ese usuario con esa contraseña
'Así que le negamos el acceso
Response.Write("Lo siento, no existe ese usuario/contraseña.")
else

'Le mandamos a la pagina de bienvenida
Response.Redirect("default.asp")
end if

end if


Sub MostrarFormulario

Response.Write("
")
Response.Write("
")
Response.Write("
")
Response.Write("Entre su nombre de usuario y contraseña -")

End Sub 'MostrarFormulario


-----

Como veis, si la autentificación es correcta, se redirecciona siempre a default.asp. Bien, lo que yo busco es esto, supongamos que tenemos los siguientes registros en la tabla:

ID_Usuario Login Password URL
1 prueba prueba1 prueba.asp
2 otra otra1 otra1.asp

Lo que busco, es que si se autentifica el usuario prueba, en vez de ser redireccionado a default.asp, sea redireccionado a prueba.asp

¿Alguna idea?

Gracias.
Yo usaria codigo javascript entre medias para segun el valor del recordset pues que te escriba una pagina u otra en el response.redirect, con una varible la cual indica la pagina por ejemplo.
Smile escribió:Yo usaria codigo javascript entre medias para segun el valor del recordset pues que te escriba una pagina u otra en el response.redirect, con una varible la cual indica la pagina por ejemplo.


Me he perdido perdona, imagino que en el response.redirect debería indicarle que acudiera al campo URL para realizar la redirección. Pero con esto del javascript que me indicas me he perdido completamente.

Quieres decir, un código javascript que escriba el valor URL en el response.redirect ¿?
Nunca he usado ASP, ¿pero no podrías hacer algo así?

else
'Le mandamos a la pagina de bienvenida
pagina = &nombre&.".asp" #Le asignas a la variable página el nombre del usuario con la extensión
# el punto sería para concatenar
Response.Redirect("$pagina") # $pagina sería la variable antes asignada
end if


Yo lo veo demasiado sencillo como para que no se te haya ocurrido, por lo que supongo que en ASP no se hacen las cosas así. Debe ser algo parecido lo que sugiere Smile pero usando javascript.

Un saludo
Una vez validado un nombre:


if nombre="juanito" then
Response.Redirect("paginajuanito.asp")
else //otras posibilidades
end if



SI lo que quieres es tener varias páginas, una para cada usuario , lo que dice Nightmare, aunque ahora no recuerdo si la sintaxis es del todo correcta, pero básicamente concatenas el nombre del usuario al resto de la cadena creando en total la URL
Hola,

he seguido el ejemplo que ha puesto NiGhTmArE que creo que es perfectamente válido. El código es este:

else
'Le mandamos a la pagina de bienvenida
pagina=("&URL&")

Response.Redirect("$pagina")
end if

URL es el nombre del campo donde se guarda la pagina.
Previamente había puesto Dim oConn, rs, SQL, nombre, password, URL

Bueno, cuando hago login, lo hace correctamente pero intenta redireccionar a una página llamada $pagina y claro falla. Parece que no es capaz de cojer el valor de la variable.
Response.Redirect($pagina);


Si pones las comillas, estás pasando $pagina como un string, literalmente.

Si pones $pagina, estás pasando el contenido de la variable pagina, que para que funcione, será un string con la URL

EDITO: cuando le das valor a pagina, creo que lo correcto es esto:

pagina="URLdelapagina";

aunque ahora no recuerdo exactamente, pero que me sobran esos parentesis.
Hola jorcoval,

he seguido tus instrucciones:

else
'Le mandamos a la pagina de bienvenida
pagina=("&URL&")

Response.Redirect($pagina);
end if


pero me da este error:

Error de compilación de Microsoft VBScript error '800a0408'

Carácter no válido

/prueba/login1.asp, línea 38

Response.Redirect($pagina);

me sale tanto si cierror el response con ; como si no.

EDITO:

He probado con lo último que has puesto y sigue dando error.

Con de de pagina=("&URL&") lo que pretendo es que en el response escriba el contenido del campo URL que será donde se tendrá que redireccionar.
Ya digo que de la sintaxis no me acuerdo , lo siento


Response.Redirect(pagina);
Bueno, avanzamos algo. He probado esto:

else
'Le mandamos a la pagina de bienvenida
pagina = ("&nombre&")

Response.Redirect'"$pagina"';

end if

Y me da este error nuevo:

Error de Microsoft VBScript en tiempo de ejecución error '800a01c2'

Número de argumentos erróneo o asignación de propiedad no válida: 'Response.Redirect'

/prueba/login1.asp, línea 38

voy a seguir a ver.
¿Has probado

Response.Redirect(pagina)

?


Porque me suena que era eso
Hola,

si pongo esto:

else
'Le mandamos a la pagina de bienvenida
pagina = ("&nombre&")

Response.Redirect(pagina)

end if

me dice que no encuentra la pagina &nombre& cuando &nombre& es el usuario que ha escrito, en realidad, debería decirme que no encuentra la pagina test

EDITO:

He probado también esto:

else
'Le mandamos a la pagina de bienvenida
pagina = Login

Response.Redirect(pagina)

end if

Anteriormente en la SELECT para validar usuario, había especificado: Usuarios WHERE (Login='"&nombre&"' AND Password='"&password&"');"

Pues el error que me muestra es:

objeto Response error 'ASP 0158 : 80004005'

Falta dirección URL

/prueba/login1.asp, línea 38

Se requiere una dirección URL.
Entonces ya estás en el buen camino. La sintaxis de Redirect es esa ;)


Ahora el problema que imagino tendrás es que la url contenida en página tiene que ser correcta y corresponder a una página que hayas creado.

Para no liarte, te recomiendo utilizar

Response.Write(pagina);

que te imprimirá el contenido exacto de la variable pagina.

De esta forma podrás ir viendo si has concatenado todo correctamente y corresponde a una URL existente.
Con este código:

else
'Le mandamos a la pagina de bienvenida
pagina = ("&nombre&")

Response.write(pagina)

end if

el response.write me devuelve esto:

&nombre&

cuando creo que me debería devolver el valor del campo Login.
Sí, es que está mal.

SI la url que quieres es (por ejemplo) http://www.item1.asp

y tenemos que nombre contiene item1
en pagina deberas meter algo parecido a esto:

pagina="www."&nombre&".asp";

Recuerda esto:

Todo lo que vaya entre comillas " " se almacenará TAL CUAL, es un texto que se guarda en una variable. Es decir, que "nombre" no te devuelve un string con el contenido de nombre (item1 en el ejemplo superior), sino que te devuelve nombre.

pagina1=nombre;
pagina2="nombre";

Aqui pagina1 contiene "item1"
Aqui pagina2 contiene "nombre"

Con & concatenas 2 strings.

Espero que con todo esto te hayas aclarado.
Es un error un poco básico, a lo mejor te vendría bien hacerte con un manual de C y darle un repaso al tema de Cadenas (strings)
Lo mismo no me he enterado bien pero si tienes en tu base de datos un campo URL que es la página a la que debes ir, ¿por qué no pillas ese campo directamente de la base de datos y así te olvidas del nombre.asp y no se qué historias?

Asignas a variable pagina la URL de la base de datos
Response.Redirect(pagina);

Un saludo.
deathtor escribió:Lo mismo no me he enterado bien pero si tienes en tu base de datos un campo URL que es la página a la que debes ir, ¿por qué no pillas ese campo directamente de la base de datos y así te olvidas del nombre.asp y no se qué historias?

Asignas a variable pagina la URL de la base de datos
Response.Redirect(pagina);

Un saludo.


Hostias, pues no me había fijado que era uno de lso campos de la tabla XD

SI en la tabla almacenas la URL completamente construida lo que dice DeathThor es muy buena opción.

De todas formas, lo que te comento de las strings es básico y te puede hacer falta para otras cosas. Échale un vistazo
Ahora, perdona jorcoval, se me había olvidado decirte que había modificado el Login, ahora es test1.asp por eso no había escrito la concanetación.

Ya funciona:

else
'Le mandamos a la pagina de bienvenida
pagina = nombre

Response.Redirect(nombre)

end if

Mil gracias a todos.
17 respuestas