Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Mysql (http://www.forosdelweb.com/f86/)
-   -   Campo contraseña (http://www.forosdelweb.com/f86/campo-contrasena-585820/)

Ziyad 13/05/2008 03:43

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

quimfv 13/05/2008 09:29

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.

Ziyad 14/05/2008 02:30

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?.

quimfv 14/05/2008 04:13

Re: Campo contraseña
 
Si o algo asi.

Quim

Ziyad 15/05/2008 01:14

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)".

quimfv 15/05/2008 02:31

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

Ziyad 15/05/2008 03:59

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

quimfv 15/05/2008 04:32

Re: Campo contraseña
 
No tengo aquí mysql pero si me pasas lo que intentas me lo miro....

Quim

Ziyad 15/05/2008 04:40

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

quimfv 15/05/2008 05:02

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

Ziyad 15/05/2008 07:20

Re: Campo contraseña
 
Ok, cuando puedas. Muchisimas gracias

quimfv 15/05/2008 08:58

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

Ziyad 16/05/2008 01:23

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.


La zona horaria es GMT -6. Ahora son las 07:02.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.