Foros del Web » Programando para Internet » PHP »

problema con aleatorio mt_rand

Estas en el tema de problema con aleatorio mt_rand en el foro de PHP en Foros del Web. Hola a todos Quiero que se genere un numero aletario por ejemplo entre 10000 y 99999, hago lo siguiente $generado=mt_rand(10000,99999); lo muestro en pantalla: echo ...
  #1 (permalink)  
Antiguo 13/07/2009, 12:07
Avatar de JOSANCIN  
Fecha de Ingreso: septiembre-2008
Ubicación: huesca
Mensajes: 298
Antigüedad: 15 años, 7 meses
Puntos: 0
problema con aleatorio mt_rand

Hola a todos
Quiero que se genere un numero aletario por ejemplo entre 10000 y 99999, hago lo siguiente
$generado=mt_rand(10000,99999);

lo muestro en pantalla:

echo $generado;

pero el problema es que cuando pongo una condicion para que,cuando le pase un valor por medio del post de un formulario, recojo el valor y hago:

if($_POST['valor']==$generado)
{header("location:pagina.php");}

nunca se cumple estoporque al comparar $_POST['valor'] con $generado se genera otro numero aleatorio distinto al que se ha mostrado al principio con el echo

¿Alguien sabria como lo puedo solucionar?

Gracias a todos y que vaya bien
Jose
  #2 (permalink)  
Antiguo 13/07/2009, 12:10
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: problema con aleatorio mt_rand

primero, genera el aleatorio después de comparar...

debes almacenarlo en sesión, y comparar el valor del post con el de sesión...

es exactamente igual al clásico "captcha"
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 13/07/2009, 23:50
Avatar de JOSANCIN  
Fecha de Ingreso: septiembre-2008
Ubicación: huesca
Mensajes: 298
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: problema con aleatorio mt_rand

Pero yo quiero que ese numero se muestre en pantalla para que el usuario lo tenga que copiar en la casilla de validacion y, en caso de que sea el que introduce el mismo que aparece le deje pasar a otra pantalla
Gracias
  #4 (permalink)  
Antiguo 13/07/2009, 23:57
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: problema con aleatorio mt_rand

por eso...

antes de generar el numero de nuevo compara el que esta en sesion...

osea...

obviamente una ves generado lo almacenas, y por ende al recibir el formulario todo cobra sentido...

si esta mal el codigo, se genera de nuevo y comenzamos de nuevo!!


te digo que es identico a un codigo captcha, busca en el foro y analizalo...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 14/07/2009, 09:35
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: problema con aleatorio mt_rand

El problema más a fondo es que no comprendes bien el uso de PHP.

Recuerda que PHP es un lenguaje 'stateless' lo que quiere decir que el estado no persiste, cada request vuelve a ejecutar todo el script, por lo que tienes que persisitir el valor de mt_rand() en tu primera carga de alguna forma.

Pateketrueke ya te dijo como, guardalo en una variable de sesión, así el usuario al enviar el formulario compruebas el valor que capturo contra el de la sesión para que veas sí es el mismo.

Saludos.
  #6 (permalink)  
Antiguo 15/07/2009, 07:41
Avatar de JOSANCIN  
Fecha de Ingreso: septiembre-2008
Ubicación: huesca
Mensajes: 298
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: problema con aleatorio mt_rand

pues no me funciona con variables de sesion, te cuento:

abro sesion:
<?
session start();
session_name('mail')
$_SESSION['generado']=mt_rand(1,10);

echo "el que se ha generado automaticamente es ".$_SESSION['generado'];
echo "<br>";
if (isset($_POST['aleatorio'])){

echo "sesion aleatorio introducido ".$_POST['aleatorio']."<br>";
echo "sesion generado auto ".$_SESSION['generado'];

}



cuando $_POST['aleatorio'] recoje el valor que le he dado con un formulario y por lo tanto hace los dos echos, el primer echo que muestra la variable se sesion $_SESSION['generado'] es distinto al segundo echo que muestra la misma variable de sesion



?>

Muchas gracias a los dos de todos modos, seguire investigando, que vaya bien
  #7 (permalink)  
Antiguo 15/07/2009, 09:19
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: problema con aleatorio mt_rand




sigues sin entender....

debes generar el nuevo numero después de compararlo con el POST, ya que si generas el numero antes de comparar obviamente jamas van a ser iguales !!!

Código PHP:
<?php
session start
();
//session_name('mail')

echo "el que se ha generado automaticamente es ".$_SESSION['generado'];
echo 
"<br>";

if (isset(
$_POST['aleatorio'])){

echo 
"sesion aleatorio introducido ".$_POST['aleatorio']."<br>";
echo 
"sesion generado auto ".$_SESSION['generado'];

}

// lo generamos de nuevo??? :P
$_SESSION['generado']=mt_rand(1,10);
?>
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #8 (permalink)  
Antiguo 15/07/2009, 10:30
Avatar de JOSANCIN  
Fecha de Ingreso: septiembre-2008
Ubicación: huesca
Mensajes: 298
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: problema con aleatorio mt_rand

perdona que te moleste, añado un formulario al final de tu codigo con post para pasar un valor a la variable $_POST['aleatorio']; no se me ocurre como puede funcionar, pasa lo mismo de siempre, al enviar esta variable con post al mismo script se genera de nuevo otro numero aleatorio con lo que estamos en las mismas, no se si tu lo has probado
que vaya bien

<?php
session_start();
//session_name('mail')
echo "el que se ha generado automaticamente es ".$_SESSION['generado'];
echo "<br>";

if (isset($_POST['aleatorio'])){

echo "sesion aleatorio introducido ".$_POST['aleatorio']."<br>";
echo "sesion generado auto ".$_SESSION['generado'];

}

$_SESSION['generado']=mt_rand(1,10);
?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>

<br>
<br>
<form method="post" action="pruebaphpmailer.php">
introduce el numero aleatorio:<input type="text" name="aleatorio">
<br>
<br>
<input type="submit" name="procesar" value="intro">


</form>


</body>
</html>
  #9 (permalink)  
Antiguo 15/07/2009, 10:41
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: problema con aleatorio mt_rand

bueno, es que a tu "manera" jamas le dejas saber al usuario el numero generado actualmente...

siempre le muestras el "generado" en sesión (el anterior), lo cual esta mal...


osea, debes generar el numero y lo guardas en sesión.... se lo muestras al usuario, para que intente escribirlo... bingo!!


prueba este código, es igual al tuyo... pero pensando en el usuario
Código PHP:
<?php
session_start
();

if ( ! empty(
$_POST))
{
    if (
$_POST['aleatorio'] == $_SESSION['generado']) echo '<h3>OK</h3>';
    else echo 
'NO son iguales!!!';
}

$rand mt_rand(1,10);
$_SESSION['generado']=$rand;
?>

<form method="post" action="">
    introduce el numero aleatorio (<?php echo $rand?>):<input type="text" name="aleatorio">
    <div><input type="submit" name="procesar" value="intro"></div>
</form>
si te fijas no es mucha programación, es sentido común

analiza muy bien el código y verás en lo que te equivocaste, suerte...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #10 (permalink)  
Antiguo 16/07/2009, 06:57
Avatar de JOSANCIN  
Fecha de Ingreso: septiembre-2008
Ubicación: huesca
Mensajes: 298
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: problema con aleatorio mt_rand

que facil es cuando lo ves hecho, ahora parece superlogico
muchas gracias de verdad
J
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 19:11.