![]() |
Generar muchos passwords Hola a todos, necesito un script que me pueda generar 300 passwords de golpe. Tengo el script de Cluster que dejó en las Faq's, pero ahora necesito paginar de golpe 300 passwords. El nick ya lo tengo, me lo pasó el cliente. Solo debo añadir un password a cada nick. Es posible? Gracias por adelantado. |
Pues .. si te fijas .. el script de las FAQ's es una función ... No sé de donde obtendrás tus "nicks" .. pero imaginemos que de alguna forma los lees de una BD por ejemplo ... Código PHP: |
Gracias Cluster, me ha servido. De echo es lo que estaba buscando, aunque debo pedirte otro favor. el codigo es el siguiente: <?php require('configuracion.php'); function genera_password($longitud,$tipo="alfanumerico"){ if ($tipo=="alfanumerico"){ $exp_reg="[^A-Z0-9]"; } elseif ($tipo=="numerico"){ $exp_reg="[^0-9]"; } return substr(eregi_replace($exp_reg, "", md5(time())) . eregi_replace($exp_reg, "", md5(time())) . eregi_replace($exp_reg, "", md5(time())), 0, $longitud); } $resultado=mysql_query("SELECT nick FROM usuarios"); while ($row=mysql_fetch_array($resultado)){ $password=genera_password(8); $sql="UPDATE usuarios SET password='$password' WHERE nick='".$row['nick']."'"; mysql_query($sql); } ?> Hasta aquí bien, aunque lo que sucede ahora es que me escribe el mismo password para todos igual. Como se haria para que cada usuario tenga su password. Gracias |
En principio . . esa función al ejecutarla genera un password aleatorio ..(al llamarla como lo haces en tu bucle) .. Haz un echo a tu $password antes de tu UPDATE para ver si hay problemas con tu consulta SQL o es de la función que no sea tan "aleatória". Un saludo, |
No acabo de entender.... al excribir el echo me sale lo siguiente como es lógico Password: af0d1c26 Password: af0d1c26 Password: af0d1c26 . . .etc.. hasta 300 passwords y claro a mi me interesaria que fuera así Password: af0d1c26 Password: 8a8da135 Password: 8rh98cc1 y posteriormente me hiciera el UPDATE. |
Cita:
time() devuelve la hora actual (en TimeStamp...) con una precisión de segundos. Si el script se ejecuta en menos de un segundo.... todos tendrán el mismo password. Y si se ejecuta en más de un segundo.. habrá bloques enteros de usuarios con passwords iguales por cada segundo de ejecución. O sea que en este caso sí es recomendable utilizar una función como rand() en lugar o junto con el time() dentro de la función genera_password(). Podría ponerse por ejemplo: md5(time()+rand()) o simplemente: md5(rand()) saludos:adios: PD: ojo que para utilizar la función rand() así directamente se necesita una versión de PHP >= 4.2.0. En versiones menores habrá que inicializar la semilla del generador de números aleatorios. (ver manual http://www.php.net/rand) |
Perfecto, es justo lo que quería. Gracias por la aclaración jpinedo. Por si a alguien le interesa les dejo aquí el codigo: <? require('configuracion.php'); function genera_password($longitud,$tipo="alfanumerico"){ if ($tipo=="alfanumerico"){ $exp_reg="[^A-Z0-9]"; } elseif ($tipo=="numerico"){ $exp_reg="[^0-9]"; } return substr(eregi_replace($exp_reg, "", md5(rand())) . eregi_replace($exp_reg, "", md5(rand())) . eregi_replace($exp_reg, "", md5(rand())), 0, $longitud); } $resultado=mysql_query("SELECT nick FROM usuarios"); while ($row=mysql_fetch_array($resultado)){ $password=genera_password(8); $sql="UPDATE usuarios SET password='$password' WHERE nick='".$row['nick']."'"; mysql_query($sql); } ?> |
jpinedo Te adelantastes .. ahora que lo vì es cierto.. la ejecuciòn del script se hace pràcticamente en el mismo segundo asì que el password no cambiará. La solución que propones es buena .. yo estaba pensando en usar en lugar de time() .. microtime(). Voy a modificar la FAQ en cuestiòn con los crèditos correspondientes Jpinedo. Un saludo, |
Ok Cluster... No es necesario lo de los créditos... no era tan difícil darse cuenta después de la información brindada por Faser. Yo he utilizado ese script como base para generar contraseñas varias veces y nunca se me ocurrió que podía tener esa limitación... hasta ahora que a alguien le pasó. saludos:adios: |
| La zona horaria es GMT -6. Ahora son las 23:32. |
Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.