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

Consulta a varios campos en la BD

Estas en el tema de Consulta a varios campos en la BD en el foro de ASP Clásico en Foros del Web. Hola a todos!! Mi problema está referido a una consulta sobre la BD de un usuario que ya está registrado. Mi codigo funciona bien en ...
  #1 (permalink)  
Antiguo 31/08/2006, 12:36
 
Fecha de Ingreso: febrero-2005
Mensajes: 86
Antigüedad: 19 años, 4 meses
Puntos: 1
Consulta a varios campos en la BD

Hola a todos!!
Mi problema está referido a una consulta sobre la BD de un usuario que ya está registrado. Mi codigo funciona bien en cuanto a verificar ambos campos pero necesito que lo haga sobre un tercero (y que no está en el form de login) y que debe contener un SI para darle el acceso, caso contrario iria un response.write.
Copio el codigo que tengo hasta ahora (que funciona) y donde debería realizar esa otra consulta. Este campo se llama ACTIVO y puede estar vacío o con un SI.
<%
Dim usuario, passw, oConn, RS
If Request.Form("usuario") = "" OR Request.Form("passw") = "" then
Response.Write("<BR>")
Response.Write("<BR>")

Response.write "<a href=login.asp><B><center>Todos los campos son requeridos <br><center> Click Aqui para Volver</B></a>"

Else
usuario = Trim(Request.Form("usuario"))
passw = Trim(Request.Form("passw"))
usuario = Replace(usuario,"'","''")
passw = Replace(passw,"'","''")

'Conectamos a nuestra BD.
Set oConn = Server.CreateObject ("ADODB.Connection")
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\webspace\resadmin\misitio\misitio.com\db \datos.mdb;"



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

'Si el valor EOF (fin de la tabla elegida) es verdadero, no existe el usuario.
If (RS.EOF = true) then
session("autorizacion")=-1
Response.Write("<BR>")
Response.Write("<BR>")
Response.Write("<BR>")
Response.Write "<B><center>Click Este Usuario no existe</B>"
Response.Write("<BR>")
Response.write "<a href=login.asp><B><center>Click Aqui para Volver</B></a>"
ElseIf RS.Fields("contrasena") = passw then 'Si el campo de la tabla es igual a nuestra variable, estas logueado.

session("Nombre")=request("usuario")
session("autoriz")=1
Response.Write("<BR>")
Response.Write("<BR>")
Response.Write("<BR>")
Response.Write "<B><center>Gracias por su visita "& RS.Fields("Usuario") &"</B>"
Response.Write("<BR>")
Response.Write("<BR>")
Response.write "<a href=clicks.asp?url=descargas.asp><B><center>Click Aqui para Continuar</B></a>"

Else 'Otra cosa, seria cuando el password no es la que seleccionamos.
session("autoriz")=-1
Response.Write("<BR>")
Response.Write("<BR>")
Response.Write("<BR>")
Response.Write "<B><center>El password ingresado es incorrecto</B>"
Response.Write("<BR>")
Response.write "<a href=login.asp><B><center>Click Aqui para Volver</B></a>"
End If

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


%>

Como siempre, agradezco anticipadamente todas las sugerencias que siempre me resultan de m ucha utilidad...

Edysierra
  #2 (permalink)  
Antiguo 31/08/2006, 15:52
 
Fecha de Ingreso: junio-2006
Mensajes: 61
Antigüedad: 18 años
Puntos: 2
hola edy,

a ver si te entendi de que se trata, si se trata de sacar solo los usuarios que tengan un "SI", te recomendaria que lo hicieras por ejemplo creando un campo en la tabla de los usuarios que se llame activo o algo asi, y en en cuál automaticamente el valor por default sea 1 que significa que esta activo. y en el query le dices esto:

sql = "SELECT * FROM usuarios WHERE Usuario = '"& usuario &"' and activo='1'"

y si lo que quieres es desactivarlo haces un update del usuario donde solamente modifiques el campo activo, por un dos o cualquier otro menos 1 que es el activo.

bueno si te entendi la idea comentame como te fue o sino sé un poco mas específico.

Saludos

Camilo Ospina
Bogotá - Colombia
  #3 (permalink)  
Antiguo 31/08/2006, 15:58
 
Fecha de Ingreso: junio-2006
Mensajes: 61
Antigüedad: 18 años
Puntos: 2
hola de nuevo edy,

se me olvidaba para los que dices del response.write sino tiene un SI, puedes hacer lo siguiente:

sql = "SELECT * FROM usuarios WHERE Usuario = '"& usuario &"' and activo='1'"

'creas una variable que contiene solo el registro nececitado
existe=""
recorres la tabla
do while not rs.eof
existe=rs("consecutivo_tabla")
rs.movenext
loop
'si la variable existe no contiene nada, es decir el usuario esta inactivo o no existe
if existe="" then
response.write("usuario no activo")
end if
if existe<>"" then
'aqui validas la clave

Salu2

Camilo Ospina
Bogotá - Colombia
  #4 (permalink)  
Antiguo 31/08/2006, 16:16
 
Fecha de Ingreso: febrero-2005
Mensajes: 86
Antigüedad: 19 años, 4 meses
Puntos: 1
Si, es lo que funcionaria...

Gracias Camilo por tu respuesta.
Te comento que esa era la idea de lo que necesitaba. Estuve avanzando un poco con esto y con lo que me sugeris creo que lo termino. Ahora me queda probar todo el codigo.
Te agradezco nuevamente.

Edysierra
  #5 (permalink)  
Antiguo 31/08/2006, 18:16
 
Fecha de Ingreso: febrero-2005
Mensajes: 86
Antigüedad: 19 años, 4 meses
Puntos: 1
Abuso de tu ayuda Camilo...

Mira, estuve probando pero tengo fallos. He ido probando linea a linea con un response para ver donde tenia el error y aun asi no lo puedo resolver.
Amplio un poco más la idea: vengo de una pagina previa que chequeó el usuario y el password y, una vez hecho, le dió un Continuar para entrar a esta pagina (lo tuve que hacer asi pues el código que estaba empleando para hacer el update me tiraba erores. En esta pagina creo una variable Session("Usuario").
En la siguiente pagina la recojo: user=Session("Usuario")
Y sigue lo siguiente:

Set oConn = Server.CreateObject ("ADODB.Connection")
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\webspace\resadmin\misitio\misitio.com\db \datos.mdb;"



SQL="SELECT * FROM usuarios WHERE " & _
"Usuario='"&user&"'; and activo='SI'"

f rs.eof then 'AQUI DA UN ERROR
'no esta activo
Response.write ("<B><center>CUENTA INACTIVA</B></a>")
else


rs.Open SQL, oConn, 1, 2

'Añado un nuevo registro

rs.Fields("activo")="SI"

rs.Update


session("usu")=rs.Fields("usuario")

rs.Close


Set RS = Nothing
Set oConn = Nothing
End If

'Response.Write("<B>Gracias por Suscribirse "& nombre ) &"</B>"
' Response.Write("<BR>")
' Response.Write("<BR>")
' Response.Write("<B>Le damos la bienvenida "& user ) &"</B>"
' Response.write ("<B><center>Su cuenta ya ha sido dada de alta</B></a>")
' Response.write ("<a href=../index.html><B><center>Click aqui para ingresar</B></a>")

%>

Estoy empantanado en esta parte y de verdad que ya tengo todo confuso. Se que no deberia ser complicado pero no se bien como terminarlo. Lo que nececsito es que si la cuenta ya esta con el SI, de un Response.wrte CUANTA YA ACTIVA y en caso conbtrario proceda a activarla y otro Response.write que confirma el alta (como esta al final).

Bueno, si tenes alguna sugerencia para darme, te lo agradeceré mucho.

Edysierra
  #6 (permalink)  
Antiguo 31/08/2006, 19:48
 
Fecha de Ingreso: junio-2006
Mensajes: 61
Antigüedad: 18 años
Puntos: 2
De acuerdo Fresco MEN!!!

Veo varias cosas:

1- no es necesario que pongas un link para volver a la página anterior hazlo al final de la siguiente manera:

response.redirect("tupagina.asp")

2- claro, el error es que es IF...o no se si fue al copiar


/* esta seria una pagina de verificacion
Set oConn = Server.CreateObject ("ADODB.Connection")
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\webspace\resadmin\misitio\misitio.com\db \datos.mdb;"


'y va sin la coma depues de user, y no debería estar aún el activo

SQL="SELECT * FROM usuarios WHERE " & _
"Usuario='"&user&"' "

rs.Open SQL, oConn, 1, 2


'es simple para saber si es no esta activo haz esto:
if rs("activo")='SI' then
response.redirect("tupagina.asp?error=true")
end if

if rs("activo")<>'SI' then
'Añado un nuevo registro
rs("activo")="SI"
rs.Update
session("usu")=rs("usuario")
rs.close
response.redirect("tupagina.asp?activo=true")
end if

hasta aca iria la pagina de verificacion*/

'y en tupagina pones por ejemplo:

<%if request.querystring("error")="true" then
response.write("Error, usuario ya activo")
end%>
<%if request.querystring("activo")="true" then
response.write("Su cuenta ha sido activada")
end%>

Salu2 y me sigues comentando como te va please

Camilo Ospina
  #7 (permalink)  
Antiguo 01/09/2006, 13:02
 
Fecha de Ingreso: febrero-2005
Mensajes: 86
Antigüedad: 19 años, 4 meses
Puntos: 1
Un error

Camilo, el codigo que me pasaste es justo lo que necesitaba, en especial por la simpleza, yo me estaba complicando inutilmente.
Ahora bien, el problema es que me tira un error en la linea que pido la consulta sobre la BD, y sería una "
Al menos eso es lo que aparece en pantalla. El punto es que he probado de varias maneras pero la lectura del codigo queda aqui. Yo iba insertando un Response.Write cada tanto como para ver donde se producia el error.
Copio lo que llevo hasta aqui con el comentario sobre la linea del error:

<%
Response.Buffer = True

Dim user, rs

user=Session("Usuario")

'Response.Write("El nombre es: " & user )

Set oConn = Server.CreateObject ("ADODB.Connection")
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\webspace\resadmin\electronicapopular\ele ctronicapopular.com.ar\db\datos.mdb;"



SQL="SELECT * FROM usuarios WHERE " & _
"Usuario='"&user&"'" /*AQUI ES DONDE SE PLANTA LA LECTURA, Y LA COMILLA NO SE DONDE LE FALTARIA

rs.Open SQL, oConn, 1, 2

'es simple para saber si es no esta activo haz esto:
if rs("activo")="SI" then
response.redirect("error.asp?error=true")
end if

if rs("activo")<> "SI" then
'Añado un nuevo registro
rs("activo")="SI"
rs.Update
session("usu")=rs("usuario")
rs.close
response.redirect("error.asp?activo=true")
end if
%>

Gracias de nuevo por la ayuda que me estas dando...

Edysierra
  #8 (permalink)  
Antiguo 01/09/2006, 13:15
 
Fecha de Ingreso: junio-2006
Mensajes: 61
Antigüedad: 18 años
Puntos: 2
es el Query

la verdad no se porque haces el query de esa forma, prueba haciendolo así:


SQL="SELECT * FROM usuarios WHERE usuario='"&user&"'"

copialo para que no te confundas con las comillas y me cuentas...


Saludos

Camilo Ospina
  #9 (permalink)  
Antiguo 01/09/2006, 13:19
 
Fecha de Ingreso: junio-2006
Mensajes: 61
Antigüedad: 18 años
Puntos: 2
no dimensiones el rs ni user no tienes nececidad, el &user& del query me imagino que debe ser el valor ingresado en el formulario.

osea, lo debes tener así:

user=request.form("nombre del input del usuario de pagina que tiene login")
'y aca iria el query

suponiendo que no estas parado en la página de login sino que ya enviaste el formulario a un verificar.asp por ejemplo que es en la que estamos.
  #10 (permalink)  
Antiguo 01/09/2006, 13:57
 
Fecha de Ingreso: febrero-2005
Mensajes: 86
Antigüedad: 19 años, 4 meses
Puntos: 1
El query es el que me pasaste antes...

Camilo, fijate que el query era de la forma que me habias dicho anteriormente, yo copié eso pero no funcionaba...
Mira, ahora mismo estaba probando esa otra línea que me acaba de llegar pero sigo con el problema

Microsoft VBScript runtime error '800a01a8'

Object required: ''

/usuarios/con_act_2.asp, line 16


Si no te lo tomas como un abuso de mi parte, te copiaría todo el codigo, desde la primer pagina, para que lo veas, aunque en estas no habia problemas... como me decias en el ultimo post que no estabas seguro de como lo estaria haciendo en las anteriores...

Gracias, y enseguida mando otro post con el codigo

Edysierra
  #11 (permalink)  
Antiguo 01/09/2006, 14:50
 
Fecha de Ingreso: febrero-2005
Mensajes: 86
Antigüedad: 19 años, 4 meses
Puntos: 1
Esto es todo el codigo..

Camilo
Te explico como es el funcionamiento: el usuario ya registrado recibió por mail su Nombre de Usuario y el Password. Se le indica una ruta para que acceda Activar la cuenta… de allí entrará en activar.asp
En esta pagina se le pide esos dos datos y lo recoge la pagina conf_act.asp la que contiene el siguiente codigo:

Conf_act.asp

<%

Response.Buffer = True
Dim usuario, user, passw, act, oConn, RS

If Request.Form("usuario") = "" OR Request.Form("passw") = "" then
Response.Write("<BR>")
Response.Write("<BR>")

Response.write "<a href=activar.asp><B><center>Todos los campos son requeridos <br><center> Click Aqui para Volver</B></a>"

Else
usuario = Trim(Request.Form("usuario"))
passw = Trim(Request.Form("passw"))
usuario = Replace(usuario,"'","''")
passw = Replace(passw,"'","''")


'Conectamos a nuestra BD.
Set oConn = Server.CreateObject ("ADODB.Connection")
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\..\db\datos.mdb;"



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

'Si el valor EOF (fin de la tabla elegida) es verdadero, no existe el usuario.
If (RS.EOF = true) then

Response.write "<a href=activar.asp><B><center>El usuario ingresado no existe <br><center> Click Aqui para Volver</B></a>"

Response.Write("<BR>")
Response.Write("<BR>")
'Response.write "<a href=login.asp><B><center>Click Aqui para Ingresar</B></a>"
ElseIf RS.Fields("contrasena") = passw then
Response.Write("<BR>")
Response.Write("<BR>")
Response.Write "Bienvenido <B>"& RS.Fields("usuario") &"</B>"
Response.Write("<BR>")
Response.write "<a href=con_act_2.asp><B><center><center> Click aquí para continuar</B></a>"


user=rs.Fields("Usuario")
session("Usuario") = user


Else 'Otra cosa, seria cuando el password no es la que seleccionamos.
Response.Write("<BR>")
Response.Write("<BR>")
Response.write "<a href=activar.asp><B><center>El password ingresado es inválido <br><center> Click Aqui para Volver</B></a>"

End If

RS.Close
oConn.Close
Set RS = Nothing
Set oConn = Nothing
End If

%>

Al hace clic en Continuar lo llevará a la siguiente pagina:

Con_act_2.asp

Response.Buffer = True

Dim user, rs

user=Session("Usuario")

Set oConn = Server.CreateObject ("ADODB.Connection")
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\webspace\resadmin\mistio\misitio.com\db\ datos.mdb;"

‘Esta parte es la que me pasaste..


SQL="SELECT * FROM usuarios WHERE usuario='"&user&"'"
rs.Open SQL, oConn, 1, 2
'es simple para saber si es no esta activo haz esto:
if rs("activo")="SI" then
response.redirect("error.asp?error=true")
end if

if rs("activo")<> "SI" then
‘Añado un nuevo registro
rs("activo")="SI"
rs.Update
session("usu")=rs("usuario")
rs.close
response.redirect("error.asp?activo=true")
end if
%>


…Y los mensajes de error se transcriben en la siguiente pagina:

error.asp

<%if request.querystring("error")="true" then
response.write("Error, usuario ya activo")
end%>
<%if request.querystring("activo")="true" then
response.write("Su cuenta ha sido activada")
end%>


Bueno, como veras, no es complejo, aun para mis limitados conocimientos, pero tal vez por ello es que cuando se me presenta alguna dificultad como esta, me trabo.
Y desde ya que la gente del Foro es siempre la que me saca adelante.. Gracias Camilo por tu ayuda y espero tus comentarios.

Última edición por edysierra; 28/12/2006 a las 07:49
  #12 (permalink)  
Antiguo 01/09/2006, 15:55
 
Fecha de Ingreso: junio-2006
Mensajes: 61
Antigüedad: 18 años
Puntos: 2
hagamos algo mas fácil para ayudarte, si tienes msn agregame: [email protected] y con mucho gusto te ayudo, o me puedes enviar la BD con los archivos relacionados así podre saber con exactitud el error y ayudarte mas facilmente, o me envias un correo con los archivos comprimidos.


Salu2
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 21:29.