Almacenar número aleatorio en PHP

Resuelto
Usuario anónimo -  
jee pee Mensajes publicados 31881 Fecha de registro   Estado Moderador Última intervención   -

Hola a todos

Me gustaría generar al cargar la página un número aleatorio y mantener ese mismo número para todo el resto del código

Por eso hice:

$nombre = rand(1,10);

El problema es que cada vez que se utiliza la variable $nombre en el resto del programa genera un número diferente, mientras que yo quiero que sea el mismo a lo largo de todo

¿Alguien tendría una idea para que este número se mantenga igual durante todo el código?

Gracias de antemano.

1 respuesta

  1. jordane45 Mensajes publicados 30426 Fecha de registro   Estado Moderador Última intervención   4 830
     

    Hola

    Utilizar una variable no regenerará su valor...

    Si tu número aleatorio se regenera cada vez, es porque lo has codificado mal o tienes un error tipográfico en tu código...

    No tiene nada que ver con la única línea de código que nos muestras.

    Habrá que mostrarnos el código completo de la página afectada por este problema.

    Por supuesto, dado la descripción que haces, suponemos que el uso de esta variable se realiza dentro de la misma página que se utilizó para generarla....... En caso contrario, si quieres usarla en otros scripts, tendrás que almacenarla en una variable de sesión y para evitar que se regenere cada vez que la página se recarga tras enviar un formulario, por ejemplo, será necesario comprobar previamente si esta variable ya existe o no antes de regenerar una...


    .
    Atentamente,
    Jordane

    0
    1. Usuario anónimo
       

      Hola

      Para ser más preciso, en cuanto hago clic en un botón (que enviará un POST a la página PHP para activar el código), el PHP debe mostrar una línea al azar de mi base de datos, así que después de declarar $nombre ejecuto la consulta preparada:

      SELECT * FROM table1 WHERE id=$nombre

      Pero me muestra una línea diferente en cada clic, aunque en teoría ya que $nombre permanece fijo, la fila debería permanecer igual en cada clic

      Soy novato, así que seguramente es un error tonto pero no lo encuentro

      Gracias por tu ayuda.

      0
    2. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588 > Usuario anónimo
       

      hola,

      Cada vez que se llama a la página (en cada clic), todo el código de la página se ejecuta y las variables se olvidan.

      Entonces usa, como explicó Jordane, una variable de sesión.

      0
    3. Usuario anónimo > yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención  
       

      Hola

      He reemplazado $nombre por

      $_SESSION[‘nombre’]=rand(1,10);

      Luego he modificado la consulta:

      SELECT * FROM table1 WHERE id=$_SESSION[‘nombre’]

      Pero sigo teniendo el mismo problema, ¿ves dónde me equivoqué?

      Gracias de antemano

      0
    4. Usuario anónimo > Usuario anónimo
       

      De hecho acabo de entender que debía declarar la variable de sesión en una página distinta de aquella en la que uso dicha variable.

      ¡Gracias a ambos por vuestra ayuda!

      0
    5. totorock > Usuario anónimo
       

      Hola,

      "

      php deberá mostrar una línea al azar de mi base de datos así que después de declarar $nombre ejecuto la consulta preparada:

        <span>SELECT</span> <span>*</span> <span>FROM</span> table1 <span>WHERE</span> id<span>=</span> $nombre"

      Antes, un grave problema de diseño y de comprensión de una base de datos, tengo la impresión...

      Si vuestro modelo de datos posee un identificador, este sirve para identificar un dato en la base (y no en otro sitio en general). Con vuestro modelo debéis cambiar todo el programa si tenéis que añadir un dato en la tabla y, peor aún, vuestra base de datos quedará inutilizable si elimináis un solo dato de la tabla.

      Yo elimino id = 1 así que si el número aleatorio cae en 1 el programa ya no funciona pero además la base de datos se vuelve inexplotable porque el dato id no corresponde a nada... Un dato es un valor que tiene sentido para un sistema de información, 1,2,3,1312 etc... no corresponde a nada. Id no indica ningún dato. Se puede usar arbitrariamente un identificador numérico auto-incrementado como clave primaria si se quiere (aunque inferior a un identificador natural en muchos casos como método) pero usar ese valor no tiene sentido ya que su único papel es que cada fila de datos sea única, solo habrá una fila de la tabla con el valor id=852244555. Y ojo, una base de datos está hecha para almacenar y MODIFICAR los datos almacenados, aquí con vuestro sistema lo que hacéis es modificar y tendréis que hacer tratamientos de valores aleatorios complejos y sin sentido.

      Si queréis hacer este tipo de cosas, o lo hacéis a partir de un conjunto de datos utilizando una tabla (Array) de datos para el almacenamiento (la forma natural de, de hecho, el resultado de una consulta) donde cada juego o fila de datos está arbitrariamente clasificado (de 0 a 'x' un entero que indica el número de valores que corresponden a la consulta) o bien usáis un valor que tenga sentido.

      Por ejemplo un identificador llamado nom_fruta = 'manzana' o 'pera' o 'plátano'... y ahí hacéis la cosa al azar sobre estos valores. El nombre de la fruta corresponde a algo real mientras que un identificador numérico auto-incremental no garantiza en absoluto una secuencia lógica o matemática así que tengáis datos con id auto-incrementado 0,1,2, entero numérico hasta el infinito.

      En resumen, una base de datos debe tener sentido, de lo contrario se vuelve inexplotable, no solo los programas se vuelven más complejos de hacer y de gestionar hasta que se vuelva imposible, sino que la base de datos se vuelve inexplotable e inútil y con ello se pierden todos los datos almacenados.

      La jugada del identificador numérico auto-incrementado es un truco (incluso una pereza del diseñador o una facilidad cuando dos valores de una tabla deben ser identificadores con o sin join) pero claramente su valor no corresponde a nada más que a un número que garantiza un valor único por fila. Usar un valor arbitrario y cambiante (se añade una fila y el valor del id se incrementa en 1; se añaden 1000 filas y cada una se incrementa en 1) significa que si modificáis cualquier valor en vuestra base, ya no funciona nada porque tendréis 1,2,3,... podéis muy bien tener 1, 457,1687,1333 (importa poco que no indique nada salvo que se inserta un valor posible antes de otro).

      En conclusión, o hacéis vuestro tiraje aleatorio sobre un valor que tenga sentido (el identificador natural) o un conjunto de datos arbitrario en el momento en que lo recuperáis, por ejemplo con SELECT * FROM table1.

      PD: mala idea llamar a vuestras 'table1' que no dice absolutamente nada. Un nombre de tabla debe indicar el papel del grupo de datos. Así que una persona externa o tú dentro de unos meses no sabrá para qué corresponde table1 ya que no dice nada. Además imagina que todo el mundo haga esto, cada uno tendría table1, table2, etc. y por tanto para una notación table1 correspondería table34 para alguien más. Lo llamo hacer lío intencionado. Mientras que un nombre que signifique algo y represente la entidad almacenada no solo todos entenderán, sino que tú también sabrás claramente a qué se refiere solo con mirar el programa y sin tener que hacer un análisis completo.

      Por lo tanto tableClient OK table1 no OK en absoluto.

      tableFruits SÍ, table1457 NO.

      0