Retroceder   Foros del Web > Programación para sitios web > Bases de Datos > Mysql

Respuesta
 
Herramientas Desplegado
Antiguo 13-may-2008, 03:43   #1 (permalink)
Ziyad ha deshabilitado el karma
 
Fecha de Ingreso: abril-2008
Mensajes: 34
Campo contraseña

Tengo un campo en una tabla, que va a actuar como contraseña para el logueo en la página web.
¿Cómo hago para que, al crear registros, este campo se rellene al azar?

Gracias, un saludo
Ziyad está desconectado   Responder Citando
Antiguo 13-may-2008, 09:29   #2 (permalink)
quimfv tiene algunos puntos positivos de karma
 
Fecha de Ingreso: marzo-2008
Mensajes: 439
Re: Campo contraseña

Esto te generara un numero aleatorio, a partir de aqui puedes hacer lo que quieras....

Quim


De la ayuda de MySQL

Cita:
RAND(), RAND(N)

Returns a random floating-point value v in the range 0 <= v < 1.0. If a constant integer argument N is specified, it is used as the seed value, which produces a repeatable sequence of column values.

mysql> SELECT RAND();
-> 0.9233482386203
mysql> SELECT RAND(20);
-> 0.15888261251047
mysql> SELECT RAND(20);
-> 0.15888261251047
mysql> SELECT RAND();
-> 0.63553050033332
mysql> SELECT RAND();
-> 0.70100469486881
mysql> SELECT RAND(20);
-> 0.15888261251047
The effect of using a non-constant argument is undefined. As of MySQL 5.0.13, non-constant arguments are disallowed.

To obtain a random integer R in the range i <= R < j, use the expression FLOOR(i + RAND() * (j – i). For example, to obtain a random integer in the range the range 7 <= R < 12, you could use the following statement:

SELECT FLOOR(7 + (RAND() * 5));
You cannot use a column with RAND() values in an ORDER BY clause, because ORDER BY would evaluate the column multiple times. However, you can retrieve rows in random order like this:

mysql> SELECT * FROM tbl_name ORDER BY RAND();
ORDER BY RAND() combined with LIMIT is useful for selecting a random sample from a set of rows:

mysql> SELECT * FROM table1, table2 WHERE a=b AND c<d -> ORDER BY RAND() LIMIT 1000;
Note that RAND() in a WHERE clause is re-evaluated every time the WHERE is executed.

RAND() is not meant to be a perfect random generator, but instead is a fast way to generate ad hoc random numbers which is portable between platforms for the same MySQL version.
quimfv está desconectado   Responder Citando
Antiguo 14-may-2008, 02:30   #3 (permalink)
Ziyad ha deshabilitado el karma
 
Fecha de Ingreso: abril-2008
Mensajes: 34
Re: Campo contraseña

Ok, entonces si quiero que se rellene ese campo automaticamente al crear un registro, con un valor de 6 cifras.

Debería poner en valor predeterminado esto: FLOOR(100000 + RAND() * (999999 – 100000)

Correcto?.
Ziyad está desconectado   Responder Citando
Antiguo 14-may-2008, 04:13   #4 (permalink)
quimfv tiene algunos puntos positivos de karma
 
Fecha de Ingreso: marzo-2008
Mensajes: 439
Re: Campo contraseña

Si o algo asi.

Quim
quimfv está desconectado   Responder Citando
Antiguo 15-may-2008, 01:14   #5 (permalink)
Ziyad ha deshabilitado el karma
 
Fecha de Ingreso: abril-2008
Mensajes: 34
Re: Campo contraseña

Lo pongo en el valor predeterminado, y en vez de un numero me sale como valor de campo lo que he puesto "FLOOR(100000 + RAND() * (999999 – 100000)".
Ziyad está desconectado   Responder Citando
Antiguo 15-may-2008, 02:31   #6 (permalink)
quimfv tiene algunos puntos positivos de karma
 
Fecha de Ingreso: marzo-2008
Mensajes: 439
Re: Campo contraseña

No... tienes que ponerlo en la sentencia INSERT INTO donde iria el valor del campo.
Tambien se podria hacer con un trigger... tu mismo.
Quim

Última edición por quimfv; 15-may-2008 a las 02:48.
quimfv está desconectado   Responder Citando
Antiguo 15-may-2008, 03:59   #7 (permalink)
Ziyad ha deshabilitado el karma
 
Fecha de Ingreso: abril-2008
Mensajes: 34
Re: Campo contraseña

Perdona, es que no habia probado nada parecido. No consigo que me salga, he probado con un update para modificar el de los registros que ya tengo almacenados y tambien me sale lo que he escrito en vez de un número.
Tambien he probado con insert into y pasa lo mismo.

Gracias por tu ayuda
Ziyad está desconectado   Responder Citando
Antiguo 15-may-2008, 04:32   #8 (permalink)
quimfv tiene algunos puntos positivos de karma
 
Fecha de Ingreso: marzo-2008
Mensajes: 439
Re: Campo contraseña

No tengo aquí mysql pero si me pasas lo que intentas me lo miro....

Quim
quimfv está desconectado   Responder Citando
Antiguo 15-may-2008, 04:40   #9 (permalink)
Ziyad ha deshabilitado el karma
 
Fecha de Ingreso: abril-2008
Mensajes: 34
Re: Campo contraseña

He probado estas dos cosas

update alumnos set password='FLOOR(100000 + RAND() * (999999 – 100000))'
where password<'100000' (ahora mismo registros tienen numeros del 1 al 30 que puse manualmente)

Tambien sin comas:
update alumnos set password=FLOOR(100000 + RAND() * (999999 – 100000))
where password<'100000' (así da error)

Y:
insert into alumnos(password)
FLOOR(100000 + RAND() * (999999 – 100000))

insert into alumnos(password)
values('FLOOR(100000 + RAND() * (999999 – 100000))')

insert into alumnos(password)
values(FLOOR(100000 + RAND() * (999999 – 100000)))

Todo eso he probado más o menos jeje
Ziyad está desconectado   Responder Citando
Antiguo 15-may-2008, 05:02   #10 (permalink)
quimfv tiene algunos puntos positivos de karma
 
Fecha de Ingreso: marzo-2008
Mensajes: 439
Re: Campo contraseña

De entrada simplifica 999999 – 100000=899999.

Esta tarde puedo mirar me lo con mysql ahora no.

Pero, password es varchar por tanto espera un texto mira que funcion te puede convertir el resultado de FLOOR(...) a texto y no pongas comas...


Luego te digo algo...


Quim
quimfv está desconectado   Responder Citando
Antiguo 15-may-2008, 07:20   #11 (permalink)
Ziyad ha deshabilitado el karma
 
Fecha de Ingreso: abril-2008
Mensajes: 34
Re: Campo contraseña

Ok, cuando puedas. Muchisimas gracias
Ziyad está desconectado   Responder Citando
Antiguo 15-may-2008, 08:58   #12 (permalink)
quimfv tiene algunos puntos positivos de karma
 
Fecha de Ingreso: marzo-2008
Mensajes: 439
Re: Campo contraseña

Tanto una como la otra me han funcionado a la perfección te paso todo el script:

Código:
DROP TABLE IF EXISTS `forum`.`users`;
CREATE TABLE  `forum`.`users` (
  `iduser` int(11) NOT NULL auto_increment,
  `password` varchar(6) default NULL,
  `name` varchar(45) NOT NULL,
  PRIMARY KEY  (`iduser`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;


insert into users(`password`,`name`)
values(FLOOR(100000 + RAND() * 899999),'quim');


insert into users(`name`)
values('Ziyad');

update users set `password`=FLOOR(100000 + RAND() * (999999-100000))
where `password` is null;
Errores que tenias, no encerrabas los nombres de los campos entre " ` " (password ademas creo que tiene algun significado especial, pero bueno con el delimitador no le molesta) y esto 999999 – 100000 me daba error, asi no 999999-100000.

Yo uso MySql 5.0.45-community-nt-log

Quim
quimfv está desconectado   Responder Citando
Antiguo 16-may-2008, 01:23   #13 (permalink)
Ziyad ha deshabilitado el karma
 
Fecha de Ingreso: abril-2008
Mensajes: 34
Respuesta: Campo contraseña

Funciona perfectamente, muchas gracias quim.

Te molesto un poco mas jeje, ¿hay una forma de que salgan tanto números como letras?

Gracias otra vez.
Ziyad está desconectado   Responder Citando
Respuesta
No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 19:25.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93