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

Generar e insertar un password aleatorio

Estas en el tema de Generar e insertar un password aleatorio en el foro de ASP Clásico en Foros del Web. Hola a todos!!! Esta vez con un problemita que no puedo resolver adecuadamente. Un usuario se registra a traves de un formulario y esos datos ...
  #1 (permalink)  
Antiguo 26/08/2006, 10:50
 
Fecha de Ingreso: febrero-2005
Mensajes: 86
Antigüedad: 20 años, 2 meses
Puntos: 1
Generar e insertar un password aleatorio

Hola a todos!!!

Esta vez con un problemita que no puedo resolver adecuadamente.
Un usuario se registra a traves de un formulario y esos datos luego son recogidos en otra pagina e insertados en la BD. Luego se genera un mail de confirmacion para el usuario con los datos de su nombre de usuario y.. tendria que hacer lo mismo con el password aleatorio que se generó.
Hasta ahi todo bien, pero mi problema es que tengo un codigo para generar el password pero no puedo insertalo en la BD, junto con los demas datos.
Ese codigo lo copio seguidamente:

<%
' Función para generar passwords aleatorios
Function GenerarPassword(largo)
Dim Resultado, Caracter, Password

'Cargamos la matriz con números y letras
caracter = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z")

Randomize()
Do While Len(Resultado) < largo
Resultado = Resultado & Caracter(Int(36 * Rnd()))
Loop
GenerarPassword = Resultado
End Function

' Obtener un password de 8 caracteres
Password= GenerarPassword(8)

' Imprimir clave
Response.Write "<center><b>"& Password & "</b></center>"
%>

Asi como esta lo he probado y funciona, pero no se si debo crear una variable para insertarlo junto con los demas datos en el campo Password o de que otra manera.

Si alguno tiene una sugerencia será muy bienvenida!!!

Gracias!
  #2 (permalink)  
Antiguo 26/08/2006, 12:19
Avatar de El_Metallick  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago, Chile
Mensajes: 1.718
Antigüedad: 22 años, 6 meses
Puntos: 16
como estas haciendo la inserción??... se me ocurre que el problema es en la sentencia SQL de inserción mas que el código que pones... 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!!
  #3 (permalink)  
Antiguo 26/08/2006, 12:30
 
Fecha de Ingreso: febrero-2005
Mensajes: 86
Antigüedad: 20 años, 2 meses
Puntos: 1
Te paso el codigo de la insercion...

Hola Metallic!.
Mira, te copio la parte del codigo que hace el insert

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

SQL="SELECT * FROM usuarios WHERE (Email='"&email&"');"
'Ejecutamos la consulta
set rs=oConn.Execute(SQL)
'si no nos devuelve vacío es que el mail ya está en uso
if not rs.EOF then
Response.Write("<B>La dirección de E-mail ya está registrada. </B>")
Response.Write("<BR><B>Por favor, escoja otra.</B>")
else
' es vacio, así que le insertamos en la bd
SQL="INSERT INTO usuarios " & _
"(Nombre, Apellido, FechaNac, Direccion, Ciudad, CP, Provincia, Pais, Telefono, Email, Actividad, Usuario, Promociones, Fecha)"
SQL=SQL & " VALUES ('"&nombre&"','"&apellido&"','"&fecha_nac&"','"&di reccion&"','"&ciudad&"','"&cod_post&"','"&provinci a&"','"&pais&"','"&telefono&"','"&email&"','"&acti vidad&"','"&nom_usuario&"','"&promo&"', #" & Month(Date) & "/" & Day(Date) & "/" & Year(Date) & "#);"
oConn.Execute(SQL)


Bueno, esta parte es la que corresponde a los datos que recogio del formulario. Esto se ingresa correctamente, pero lo que no puedo o no se hacer, es levantar el password generado y ponerlo en el campo correspondiente (Password) en el mismo momento que hago el resto.
Espero haber sido un poco más explícito.

Espero tu comentario y gracias!
  #4 (permalink)  
Antiguo 26/08/2006, 15:29
Avatar de El_Metallick  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago, Chile
Mensajes: 1.718
Antigüedad: 22 años, 6 meses
Puntos: 16
Se me ocurre algo asi... no lo he podido probar pues estoy sin IIS en mi computador pero teoricamente deberia funcionar.

Código:
 ' Función para generar passwords aleatorios
    Function GenerarPassword(largo)
    Dim Resultado, Caracter, Password

    'Cargamos la matriz con números y letras
 caracter = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z")
    
    Randomize()
    Do While Len(Resultado) < largo
        Resultado = Resultado & Caracter(Int(36 * Rnd()))
    Loop
    GenerarPassword = Resultado
End Function

' Obtener un password de 8 caracteres
Password= GenerarPassword(8)

Set oConn = Server.CreateObject ("ADODB.Connection") oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\webspace\resadmin\elsitio\elsitio.com\db \datos.mdb;" SQL="SELECT * FROM usuarios WHERE (Email='"&email&"');" 'Ejecutamos la consulta set rs=oConn.Execute(SQL) 'si no nos devuelve vacío es que el mail ya está en uso if not rs.EOF then Response.Write("<B>La dirección de E-mail ya está registrada. </B>") Response.Write("<BR><B>Por favor, escoja otra.</B>") else ' es vacio, así que le insertamos en la bd SQL="INSERT INTO usuarios " & _ "(Nombre, Apellido, FechaNac, Direccion, Ciudad, CP, Provincia, Pais, Telefono, Email, Actividad, Usuario, Password, Promociones, Fecha)" SQL=SQL & " VALUES ('"&nombre&"','"&apellido&"','"&fecha_nac&"','"&di reccion&"','"&ciudad&"','"&cod_post&"','"&provinci a&"','"&pais&"','"&telefono&"','"&email&"','"&acti vidad&"','"&nom_usuario&"','"& Password & "','"&promo&"', #" & Month(Date) & "/" & Day(Date) & "/" & Year(Date) & "#);" oConn.Execute(SQL)


Saludos y espero te funcione
__________________
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!!
  #5 (permalink)  
Antiguo 26/08/2006, 15:36
 
Fecha de Ingreso: febrero-2005
Mensajes: 86
Antigüedad: 20 años, 2 meses
Puntos: 1
Gracias Metallick...

Te agradezco tu ayuda... realmente estoy empantanado con ese punto.
Voy a probarlo y luego te comento.

Gracias
  #6 (permalink)  
Antiguo 26/08/2006, 15:45
 
Fecha de Ingreso: febrero-2005
Mensajes: 86
Antigüedad: 20 años, 2 meses
Puntos: 1
Falla..

Metallick, lo probe (y debo decir que ya antes habia intentado de la misma forma) y me da el siguiente fallo:

Syntax error in INSERT INTO statement.

/usuarios/altas_usu.asp, line 181


Esa línea corresponde a
oConn.Execute(SQL)

Es decir, que no puede ejecutar lo que se le pide. Puse todo el codigo que me pasaste pero se queda clavado allí...

Bueno, no quiero ser pesado, pero si tenes algun momento dale una mirada..

Gracias
  #7 (permalink)  
Antiguo 26/08/2006, 15:59
 
Fecha de Ingreso: febrero-2005
Mensajes: 86
Antigüedad: 20 años, 2 meses
Puntos: 1
Abuso de tu ayuda...

Mira, para que pueda ser más gráfico, te copio todo el codigo asp completo de esa pagina, pues puede suceder que este cometiendo algun error en otra parte y no me doy cuenta:


<%
' Función para generar passwords aleatorios
Function GenerarPassword(largo)
Dim Resultado, Caracter, Password

'Cargamos la matriz con números y letras
caracter = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z")

Randomize()
Do While Len(Resultado) < largo
Resultado = Resultado & Caracter(Int(36 * Rnd()))
Loop
GenerarPassword = Resultado
End Function

' Obtener un password de 8 caracteres
Password= GenerarPassword(8)



Dim nombre, apellido, fecha_nac, direccion
Dim ciudad, cod_postal, provincia, opPais
Dim telefono, email, actividad
Dim nom_usuario, password, promo
Dim correcto
Dim oConn, rs, SQL

'Recogemos el formulario
nombre=Request.Form("nom")
apellido=Request.Form("apell")
fecha_nac=Request.Form("nac")
direccion=Request.Form("direc")
ciudad=Request.Form("ciudad")
cod_post=Request.Form("cod_post")
provincia=Request.Form("prov")
pais=Request.Form("opPais")
telefono=Request.Form("telef")
email=Request.Form("email")
actividad=Request.Form("activ")
nom_usuario=Request.Form("usu")
promo=Request.Form("chkPromo")

' Creamos la conexion a la base de datos
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 (Email='"&email&"');"
'Ejecutamos la consulta
set rs=oConn.Execute(SQL)
if not rs.EOF then
Response.Write("<B>La dirección de E-mail ya está registrada. </B>")
Response.Write("<BR><B>Por favor, escoja otra.</B>")
else
' es vacio, así que le insertamos en la bd
SQL="INSERT INTO usuarios " & _
"(Nombre, Apellido, FechaNac, Direccion, Ciudad, CP, Provincia, Pais, Telefono, Email, Actividad, Usuario, Password, Promociones, Fecha)"
SQL=SQL & " VALUES ('"&nombre&"','"&apellido&"','"&fecha_nac&"','"&di reccion&"','"&ciudad&"','"&cod_post&"','"&provinci a&"','"&pais&"','"&telefono&"','"&email&"','"&acti vidad&"','"&nom_usuario&"','"& Password & "','"&promo&"', #" & Month(Date) & "/" & Day(Date) & "/" & Year(Date) & "#);"
oConn.Execute(SQL)

session("nombreD")=request("nombre")

Response.Write("<B>Gracias por Suscribirse "& nombre ) &"</B>"
Response.Write("<BR><BR>Su Nombre de Usuario y Password fueron enviados")
Response.Write("<BR>a la direccion de mail indicada por Ud.")
Response.Write("<BR>Ingrese los mismos para proceder a las descargas")

Set Mail = Server.CreateObject("Persits.MailSender")
Mail.Host = "mail.misitio.com"
Mail.From = "[email protected]"
Mail.AddAddress email
Mail.Subject = "Confirmación de Suscripción"

Mail.Body = "<HTML><BODY> Gracias por Suscribirse <b>"&request.form ("nom")&"</b><br><b>MI SITIO </b>le da la Bienvenida! <br><br> Sus datos de registración son: <br><b>Usuario:"&request.form ("usu")&"</b><br><br><br><b>MI SITIO</b><br><b>www.misitio.com</b><br><b>[email protected]</b><br><br></BODY></HTML>"

Mail.isHTML = True
Mail.Send

end if

'Limpiamos objetos
rs.Close
oConn.Close
set rs=nothing
set oConn=nothing
else

'El usuario ha metido datos incorrectos
Response.Write("<B>Datos incorrectos - Por favor vuelva a intentarlo </B>")
end if


%>


Gracias por tu ayuda!!!

Última edición por edysierra; 26/08/2006 a las 16:02 Razón: por un error en el tipeado
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 11:30.