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

Alta y comprobación de usuarios, tablas y mas tablas...

Estas en el tema de Alta y comprobación de usuarios, tablas y mas tablas... en el foro de ASP Clásico en Foros del Web. Holas, Tengo un problema al dar de alta los usuarios en mi web, tengo una base de datos con dos tablas, una temporal en la ...
  #1 (permalink)  
Antiguo 21/12/2002, 06:49
Avatar de sanfermin  
Fecha de Ingreso: diciembre-2001
Mensajes: 601
Antigüedad: 23 años, 5 meses
Puntos: 2
Pregunta Alta y comprobación de usuarios, tablas y mas tablas...

Holas,

Tengo un problema al dar de alta los usuarios en mi web, tengo una base de datos con dos tablas, una temporal en la que se insertan los datos de los usuarios hasta el momento en el q se confirma (se envia un mail al correo que han especificado), en ese momento pasan a la segunda tabla los datos (tras la confirmación)


Mi problema es que con este sistema no logro validar q la dirección de correo este la segunda tabla (datos ya validados de usuarios) ya que al dar de alta la conexion la hago a la primera de las tablas

Me gustaria q una sola conexoin validase q esa dirección de correo no se encuentra en ninguna de las 2 tablas


Gracias por leer hasta el punto final -> ·
__________________
MainMind.com
La blasfemia es el único lenguaje que de verdad conocen todos los programadores
  #2 (permalink)  
Antiguo 25/12/2002, 04:24
Avatar de korev  
Fecha de Ingreso: diciembre-2002
Ubicación: Barcelona
Mensajes: 127
Antigüedad: 22 años, 4 meses
Puntos: 0
No tiene mucho sentido que compruebes en las dos tablas. La temporal deberías limpiarla cada cierto tiempo, aunque sea cada dos o tres meses. Piensa que si un usuario borra, olvida o simplemente pasa del mail que recibe en primera instancia, su registro temporal seguirá ahí y por tanto no podrá usar la misma cuenta de mail. Ya cuesta que la gente se registre, como para poner pegas evitables .

Te cuento cómo lo manejo yo, a grandes rasgos:

- tengo dos tablas, (además de otras para temas complementarios del registro), una con datos temporales (p.ej. tbtemp) y la otra definitiva (p.ej. tbdef).
- cuando el usuario se registra miro que el mail no está en tbdef.
- si está le recuerdo que es un despistado (con opción a enviarle la contraseña y tal) y sino, seguimos.
- se insertan sus datos en tbtemp y se generan ciertos identificadores para el usuario. Se le envía mail con url a pinchar que lleva esos datos únicos y no sensibles (evidentemente no le meto ahí cosas como login, pwd y demás)
- dicha url lleva a un asp que chequea en tbtemp la corrección de los datos recibidos por querystring, no sea el caso que algún gracioso se pusiera a intentar reventar el sistema de registro por ahí.
- si todo está ok se insertan sus datos en tbdef.

Como ves el método es sencillo. La tabla importante no es tbtemp sino tbdef en cuanto a validación de mail al intentar registrarse. A partir de ahí ya viene la parte de cookies, panel de control y resto.
__________________
on error... resume next
  #3 (permalink)  
Antiguo 25/12/2002, 06:27
Avatar de maestro  
Fecha de Ingreso: febrero-2002
Ubicación: España
Mensajes: 2.364
Antigüedad: 23 años, 3 meses
Puntos: 1
Y por que no creas una funcion que compruebe al logearse un usuario si esta en la primera tabla y tambien en la segunda que lo borre de la temporal, con eso se acabo tu problema.
__________________
Jose Maria Fernandez
[email protected]
Http://www.expansionweb.net
  #4 (permalink)  
Antiguo 25/12/2002, 07:41
Avatar de korev  
Fecha de Ingreso: diciembre-2002
Ubicación: Barcelona
Mensajes: 127
Antigüedad: 22 años, 4 meses
Puntos: 0
Es que se supone que si está en la definitiva, es que está o estuvo en la temporal por tanto no hace falta mirar en ésta. Borrar el registro de la temporal cuando se valida es una buena opción para mantener la bd ligerita de peso, pero ha de hacerlo cuando tenga el resto montado y después de insertar en la definitiva, no sea que ocurriera un error en este paso y perdiera el rastro del usuario.
__________________
on error... resume next
  #5 (permalink)  
Antiguo 26/12/2002, 07:03
Avatar de sanfermin  
Fecha de Ingreso: diciembre-2001
Mensajes: 601
Antigüedad: 23 años, 5 meses
Puntos: 2
Todo correcto

Lo dicho en los anteriores mensajes es correcto, pero la posibilidad que no queda recogida (y la q da problema) es comprobar si el usuario ya se ha dado de alta con ese correo-electronico y si es asi, no dejarle volver a darse de alta en ella

Gracias por las contestaciones
__________________
MainMind.com
La blasfemia es el único lenguaje que de verdad conocen todos los programadores
  #6 (permalink)  
Antiguo 26/12/2002, 23:46
Avatar de korev  
Fecha de Ingreso: diciembre-2002
Ubicación: Barcelona
Mensajes: 127
Antigüedad: 22 años, 4 meses
Puntos: 0
Sí se soluciona tu problema , usa el método que te describí y ya está. Con esa base podrás gestionar con seguridad usuarios, servicios, foro y lo que quieras.
De todas formas, si quieres seguir tal y como lo tienes y consultar en dos tablas si existe un mail, te basta con usar un join:
http://www.aspfacil.com/tutsql/joins.asp

Te aconsejo que revises el tutorial de sql de ese web.
__________________
on error... resume next
  #7 (permalink)  
Antiguo 27/12/2002, 07:52
Avatar de sanfermin  
Fecha de Ingreso: diciembre-2001
Mensajes: 601
Antigüedad: 23 años, 5 meses
Puntos: 2
Gracias

La información que estaba en esa página me ha servido de mucho, gracias

Con dos tablas: registros y temporales

SELECT temp.email FROM temporales temp INNER JOIN registros ON registros.email = temp.email WHERE temp.email = '[email protected]'

no he tenido tiempo de probarlo, todavia estoy empachado de la cena de nochebuena pero da x seguro q lo haré

Gracias y Feliz Navidad a to2

__________________
MainMind.com
La blasfemia es el único lenguaje que de verdad conocen todos los programadores
  #8 (permalink)  
Antiguo 04/01/2003, 07:56
Avatar de sanfermin  
Fecha de Ingreso: diciembre-2001
Mensajes: 601
Antigüedad: 23 años, 5 meses
Puntos: 2
Exclamación feliz año nuevo?

Recuperados mas o menos del empacho de nochebuena y la resaca de nochevieja, estuve probando INNER JOIN y seguía sin funcionar....

Error en la sentencia SQL como podeis imaginar, alguna idea o milagro??
__________________
MainMind.com
La blasfemia es el único lenguaje que de verdad conocen todos los programadores
  #9 (permalink)  
Antiguo 07/01/2003, 09:03
Avatar de sanfermin  
Fecha de Ingreso: diciembre-2001
Mensajes: 601
Antigüedad: 23 años, 5 meses
Puntos: 2
nada de nada

Después de probar y probar no hay manera

Como valido q una dirección o cualquier otro dato no se encuentra en 2 tablas????

SELECT temp.email FROM temporales temp INNER JOIN registros ON registros.email = temp.email WHERE temp.email = '[email protected]' ???????
__________________
MainMind.com
La blasfemia es el único lenguaje que de verdad conocen todos los programadores
  #10 (permalink)  
Antiguo 07/01/2003, 10:24
Avatar de korev  
Fecha de Ingreso: diciembre-2002
Ubicación: Barcelona
Mensajes: 127
Antigüedad: 22 años, 4 meses
Puntos: 0
SELECT temporales.email
FROM temporales
INNER JOIN registros
ON temporales.email = registros.email
WHERE temporales.email = '[email protected]'
__________________
on error... resume next
  #11 (permalink)  
Antiguo 07/01/2003, 11:45
Avatar de sanfermin  
Fecha de Ingreso: diciembre-2001
Mensajes: 601
Antigüedad: 23 años, 5 meses
Puntos: 2
Mensaje x fin

x fin, asi es

ahora la cuestión es como detecta cuando no se encuentra en ninguna de las 2 tablas:

ADODB.Recordset error '800a0cc1'

Item cannot be found in the collection corresponding to the requested name or ordinal.


y en ese caso procesar la información de alta del usuario


Gracias korev
__________________
MainMind.com
La blasfemia es el único lenguaje que de verdad conocen todos los programadores
  #12 (permalink)  
Antiguo 07/01/2003, 11:56
Avatar de bakanzipp  
Fecha de Ingreso: noviembre-2001
Ubicación: santiago de shilli
Mensajes: 2.554
Antigüedad: 23 años, 5 meses
Puntos: 0
pero ese error es cuando tratas de rescatar algo del recordset generado???...

o te sale el error cuando ejecutas el sql...???

if not recordsert.eof and not recordset.bof then

'rescatar los registros

else

'no existe

end if
  #13 (permalink)  
Antiguo 07/01/2003, 12:09
Avatar de korev  
Fecha de Ingreso: diciembre-2002
Ubicación: Barcelona
Mensajes: 127
Antigüedad: 22 años, 4 meses
Puntos: 0
De nada
Tal y como te ha dicho bakanzipp, el uso del inner join es para luego capturar el 'error' a tu favor. Si el recordset está vacío, es que no tienes el mail en las dos tablas.
Digamos que en este caso el inner join lo usas como validador.
__________________
on error... resume next
  #14 (permalink)  
Antiguo 07/01/2003, 14:36
Avatar de sanfermin  
Fecha de Ingreso: diciembre-2001
Mensajes: 601
Antigüedad: 23 años, 5 meses
Puntos: 2
Error

Un error tonto solo recuperaba el campo "email" en lugar de todos los correspondientes:

SELECT temporales.email

SELECT temporales.*


Parece q ya funciona todo, x ahora :D voy a testear un poco mas


GRACIAS!
__________________
MainMind.com
La blasfemia es el único lenguaje que de verdad conocen todos los programadores

Última edición por sanfermin; 07/01/2003 a las 14:47
  #15 (permalink)  
Antiguo 07/01/2003, 15:44
Avatar de sanfermin  
Fecha de Ingreso: diciembre-2001
Mensajes: 601
Antigüedad: 23 años, 5 meses
Puntos: 2
no hay manera

de ninguna de las 2 formas es capaz de detectar q en la segunda tabla ya existe un registro con ese valor

'SQL = "SELECT temporales.* FROM temporales INNER JOIN registrados ON temporales.email = registrados.email WHERE registrados.email = '"& sMail &"'"
SQL = "SELECT registrados.* FROM registrados INNER JOIN temporales ON registrados.email = temporales.email WHERE temporales.email = '"& sMail &"'"

if not rs.EOF then

password = rs("password")

'recupera su password y la guarda en una varibale q luego se
'envia x mail al usuario

else

'añado un nuevo registro a temporales

end if


__________________
MainMind.com
La blasfemia es el único lenguaje que de verdad conocen todos los programadores
  #16 (permalink)  
Antiguo 08/01/2003, 04:06
Avatar de korev  
Fecha de Ingreso: diciembre-2002
Ubicación: Barcelona
Mensajes: 127
Antigüedad: 22 años, 4 meses
Puntos: 0
Usa el procedimiento que te indiqué más arriba. Facilita mucho las tareas y es completamente seguro (siempre y cuando no hagas burradas con las cookies y demás).
__________________
on error... resume next
  #17 (permalink)  
Antiguo 13/01/2003, 16:11
Avatar de sanfermin  
Fecha de Ingreso: diciembre-2001
Mensajes: 601
Antigüedad: 23 años, 5 meses
Puntos: 2
AL FINAL!!!!!

todo solucionado, la verdad q no me ha kedado demasiado claro la sintaxys y función de INNER JOIN pero tras revisar un manual de SQL:

SQL = "SELECT * FROM temporales,registrados WHERE registrados.email = '"& sMail &"' OR temporales.email = '"& sMail &"'"




este si q funciona por lo menos x ahora, otra cosa es q sea lo más adecuado, seguro y optimizado <- si alguien sabe algo al respecto q los postee

__________________
MainMind.com
La blasfemia es el único lenguaje que de verdad conocen todos los programadores
  #18 (permalink)  
Antiguo 15/01/2003, 13:12
Avatar de sanfermin  
Fecha de Ingreso: diciembre-2001
Mensajes: 601
Antigüedad: 23 años, 5 meses
Puntos: 2
aprendiendo SQL

mirando x la red he encontrado un manual bastante completo de SQL http://www.aulaclic.org/sql/f_sql.htm

leyendolo me he econtrado con otra duda


podría sustituir esta consulta:

SQL = "SELECT * FROM temporales,registrados WHERE registrados.email = '"& sMail &"' OR temporales.email = '"& sMail &"'"


para implementarla con INNER JOIN logrando mejorar la eficacia de la consulta con tablas con gran cantidad de datos??

__________________
MainMind.com
La blasfemia es el único lenguaje que de verdad conocen todos los programadores
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 09:22.