Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: splendid37 en 11 Febrero 2016, 23:24 pm



Título: Mantener números array con session
Publicado por: splendid37 en 11 Febrero 2016, 23:24 pm
Hola.

¿Cómo puedo mantener los números aleatorios de este array?

Cuando recargo la página ya se reinician los números y aparecen otros.

Código:

session_start();

 $_SESSION['carton'] = $_SESSION['carton'];

$num[0] = rand(0,8);
$num[1] = rand(9,17);
$num[2] = rand(18,26);
$num[3] = rand(27,35);
$num[4] = rand(36,44);
$num[5] = rand(45,53);
$num[6] = rand(54,62);
$num[7] = rand(63,71);
$num[8] = rand(72,80);
$num[9] = rand(81,89);
$num[10] = rand(90,98);
$num[11] = rand(99,106);

echo $_SESSION['carton'];


¿Alguna idea?

Gracias.Saludos!


Título: Re: Mantener números array con session
Publicado por: sodark en 12 Febrero 2016, 00:28 am
El problema esta en:

- Creas la sesion y creas una variable asignandole un valor de una variable que no existe en memoria
Código
  1. $_SESSION['carton'] = $_SESSION['carton'];

- Creas el array pero no lo guardas en la session
- Siempre sobreescribes el array puesto que no compruebas si existe una variable de session.

Te dejo el codigo de como sería, no he podido probarlo porque ahora no tengo mucho tiempo, pero diria que funciona correctamente

Código
  1. // Miramos si existe la variable en session --> Si es la primera vez no existira, por lo tanto entrara dentro del if y creara el array
  2. if ( !isset($_SESSION['carton'] ) ) {
  3.  
  4. $num[0] = rand(0,8);
  5. $num[1] = rand(9,17);
  6. $num[2] = rand(18,26);
  7. $num[3] = rand(27,35);
  8. $num[4] = rand(36,44);
  9. $num[5] = rand(45,53);
  10. $num[6] = rand(54,62);
  11. $num[7] = rand(63,71);
  12. $num[8] = rand(72,80);
  13. $num[9] = rand(81,89);
  14. $num[10] = rand(90,98);
  15. $num[11] = rand(99,106);
  16. // Una vez creado el array, lo asignamos a una variable de session, que precisamente es la que comprovamos si existe en el if,
  17. // asi a la segunda carga, como ya existira, no volvera a generar el array puesto que ya lo tendra en la session y por lo tanto no entrara en el if
  18. $_SESSION['carton']=$num;
  19. } else {
  20. echo "Este else no es necesario, pero es para que veas que no entra en el if";
  21. }
  22. print_r($_SESSION['carton'])
  23.  


Título: Re: Mantener números array con session
Publicado por: splendid37 en 12 Febrero 2016, 12:17 pm
Muchas gracias por la respuesta.

Funciona perfecto, pero ¿hay alguna forma de sacar cada número por separado?.

Me explico, por ejemplo hacer solo echo de "num[0]" y "num[1]".

Cuando lo cargo por primera vez sí que carga estos números y los muestra pero al recargar ya se pierden.

Siento darte la lata con esto que supongo que será muy fácil, pero al estar empezando uno no se entera de mucho..

Muchas gracias.Saludos.


Título: Re: Mantener números array con session
Publicado por: sodark en 12 Febrero 2016, 12:54 pm
Claro que puedes, piensa que $_SESSION['carton'] tiene un array dentro.

Podrias hacer esto en el ELSE o donde quieras pintarlo

Código
  1. $variableNum = $_SESSION['carton'];
  2. echo $variableNum[0];
  3. echo $variableNum[1];
  4. .
  5. .
  6. .
  7. .
  8. echo $variableNum[11];

O bien directamente (la mejor forma, ya que si ya lo tienes en session, pues accede directamente)

Código
  1. echo $_SESSION['carton'][0];
  2. echo $_SESSION['carton'][1];
  3. echo $_SESSION['carton'][2];
  4. echo $_SESSION['carton'][3];

La cosa es que la variable $num la segunda vez no existe, por ello lo mejor que puedes es

Código
  1. // Miramos si existe la variable en session --> Si es la primera vez no existira, por lo tanto entrara dentro del if y creara el array
  2. if ( !isset($_SESSION['carton'] ) ) {
  3. echo "Entro en el if, borra este mensaje luego!";
  4. $_SESSION['carton'][0] = rand(0,8);
  5. $_SESSION['carton'][1] = rand(9,17);
  6. $_SESSION['carton'][2] = rand(18,26);
  7. $_SESSION['carton'][3] = rand(27,35);
  8. $_SESSION['carton'][4] = rand(36,44);
  9. $_SESSION['carton'][5] = rand(45,53);
  10. $_SESSION['carton'][6] = rand(54,62);
  11. $_SESSION['carton'][7] = rand(63,71);
  12. $_SESSION['carton'][8] = rand(72,80);
  13. $_SESSION['carton'][9] = rand(81,89);
  14. $_SESSION['carton'][10] = rand(90,98);
  15. $_SESSION['carton'][11] = rand(99,106);
  16. }
  17. // Cuidado con salirte del array!
  18. echo $_SESSION['carton'][0];
  19. echo $_SESSION['carton'][1];
  20. echo $_SESSION['carton'][2];
  21. echo $_SESSION['carton'][3];
  22.  
  23. //Tendras que controlarlo de alguna forma, o pintar el array mediante for asegurandote no pasarte por ej:
  24. $size = count($_SESSION['carton']);
  25. for ( $i=0;$i<$size;$i++ ) {
  26. echo "Valor de $i = $_SESSION['carton'][i]";
  27. }
  28. // O bien usar un foreach --> http://php.net/manual/es/control-structures.foreach.php
  29.  


Título: Re: Mantener números array con session
Publicado por: splendid37 en 12 Febrero 2016, 13:21 pm
Solucionado.

Muchas gracias por tu tiempo!



Una útima cosa (o eso espero), en el código como ves cuando sale un número aleatorio que sea igual que en el "carton" se marca con un "*".

El problema es que quiero que se mantenga marcado con el "*", lo he intentado con una sesión pero no me funciona o lo he puesto mal lo mas probable.

¿Cómo lo puedo hacer para que ese número se quede marcado?

Código
  1.  
  2. <?php
  3.  
  4.  
  5. $numero = rand(0,17);
  6.  
  7. if ( !isset($_SESSION['carton'] ) ) {
  8.  
  9. $num[0] = rand(0,8);
  10.  
  11. $num[1] = rand(9,17);
  12.  
  13. $_SESSION['carton']=$num;}
  14.  
  15. echo $_SESSION['carton'][0];
  16.    if ($_SESSION['carton'][0] == $numero)
  17.    {echo "*";} else {echo "";};
  18.  
  19.    echo ",";
  20.  
  21. echo $_SESSION['carton'][1];
  22. if ($_SESSION['carton'][1] == $numero)
  23.    {echo "*";} else {echo "";}
  24.  
  25. echo "<br/>","<br/>";
  26.  
  27. $_SESSION['muestra'] = $_SESSION['muestra'].$numero.", ";
  28.  
  29.    echo $_SESSION['muestra'];
  30.  
  31. ?>
  32.  
  33.  

Como bien dicen una imagen vale más que mil palabras.

Lo que quiero hacer es que una vez marcado el 4 o el 17 con un "*" se quede marcado con el "*" y seguir sacando números con el botón de siguiente número.

(http://oi64.tinypic.com/1174ryg.jpg)


Mod: No hacer doble post.