Stocker nombre aléatoire php

Résolu
Utilisateur anonyme - Modifié le 1 mai 2023 à 11:07
jee pee Messages postés 39591 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 19 avril 2024 - 11 mai 2023 à 19:10

Bonjour a tous

Je voudrais générer au chargement de la page un nombre aléatoire et garder ce meme nombre pour tout le reste du code

J’ai donc fait : 

$nombre = rand(1,10);

Le problème est que a chaque fois que la variable $nombre est utilisée dans le reste du programme elle génère un nombre différent, alors que je veux garder le même tout le long

Quelqu’un aurait une idee pour que ce nombre reste le même tout le long du code ?

Merci d’avance.

A voir également:

1 réponse

jordane45 Messages postés 38139 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649
1 mai 2023 à 12:06

Bonjour

Utiliser une variable ne régénérera pas sa valeur...

Si ton nombre aléatoire est régénéré à chaque fois, c'est que tu as mal codé ou que tu as une coquille dans ton code...

Rien à voir avec la seule ligne de code que tu nous montres.

Il va falloir nous montrer le code complet de la page concernée par ce souci.

Bien entendu, vu la description que tu fais, on suppose que l'utilisation de cette variable se fait bien uniquement dans la même page qui a servi à le générer....... Dans le cas contraire, si tu veux l'utiliser dans d'autres scripts, il te faudra en effet le stocker dans une variable de session et pour éviter qu'il ne se régénère à chaque fois que la page est rechargée suite à la soumission d'un formulaire par exemple il faudra en amont vérifier si cette variable existe déjà ou non avant de régénérer une...


0
Utilisateur anonyme
1 mai 2023 à 13:05

Bonjour 

Pour être plus précis dès que je clique sur un bouton (qui enverra un POST à la page php pour déclencher le code) le php devra afficher une ligne au hasard de ma base de donnée donc après avoir déclarer $nombre j’exécute la requête préparée :

SELECT * FROM table1 WHERE id=$nombre

Mais on m’affiche une ligne différente à chaque click alors qu’en théorie vu que $nombre reste fixe la ligne devrait rester la même à chaque click

Je suis débutant donc c’est surement une erreur bête mais je la trouve pas

Merci pour votre aide. 

0
yg_be Messages postés 22708 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 avril 2024 1 471 > Utilisateur anonyme
Modifié le 1 mai 2023 à 13:16

bonjour,

Chaque fois que la page est appelée (à chaque clic), tout le code de la page est exécuté et les variables sont oubliées.

Utilise alors, comme expliqué par Jordane, une variable de session.

0
Utilisateur anonyme > yg_be Messages postés 22708 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 avril 2024
1 mai 2023 à 13:32

Bonjour 

J’ai remplacé $nombre par

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

Puis j’ai modifié la requête :

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

Mais j’ai toujours le même problème, vous voyez ou est ce que je me suis trompé ?

Merci d’avance

0
Utilisateur anonyme > Utilisateur anonyme
Modifié le 1 mai 2023 à 14:30

En fait je viens de comprendre que je devais déclarer la variable de session dans une page différente de celle où j’utilise cette variable.

Merci à tout les 2 pour votre aide !

0
totorock > Utilisateur anonyme
Modifié le 11 mai 2023 à 18:55

Salut,

"

php devra afficher une ligne au hasard de ma base de donnée donc après avoir déclarer $nombre j’exécute la requête préparée :

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

Avant tout grave probléme de conception et de compréhension d'une base de données j'ai l'impression...

Si votre modèle de données posséde un identifiant celui ci sert à identifier une donnée dans la base(et non ailleurs en général). Avec votre modèle vous devez changer tout le programme si vous devez rajouter une donnée dans la table et pire encore votre base de données sera bonne à jeter si vous supprimez une seule donnée de la table.

je supprime id =  1 donc si le nombre aléatoire tombe sur 1 le programme ne fonctionne plus mais en plus la base de données devient inexploitable car la donnée id ne correspond à rien... Une donnée est une valeur qui a du sens pour un système d'information, 1,2,3,1312 etc... ne correspond à rien. Id n'indique aucune donnée. On peut arbitrairement utiliser un identifiant numérique auto-incrémenté en clé primaire si on veut(bien qu'inférieur à un dientifiant naturel dans de nombreux cas comme méthode) mais utiliser celle valeur n'a aucun sens puisque son seul rôle et que chaque ligne de donnée soit unique, il n'y aura qu'une ligne de la table qui a la valeur id=852244555. Et bon une base de données est fait pour stocker et MODIFIER les données stockées, là avec votre systèème on modifie il il faudra faire des traitement de valeurs aléatoires complexes et qui n'ont aucun sens.

Si vous voulez faire ce genre de choses soit vous le faites à partir d'un set de données en utilisant un tableau(Array) de données pour le stockage(la forme naturelle d'ailleurs du résultat d'une requête) où chaque jeu  ou ligne de données est classée arbitrament(de 0 à 'x' un entier indiquant le nombre de valeurs correspondantes à la requête) soit vous utilisez une valeur qui a un sens.

Par exemple un identifiant nommé nom_fruit = 'pomme' ou 'poire' ou 'banane' ... et là vous faites le truc aléatoire sur ces valeurs. Nom fruit correspond à quelque chose de réel tandis qu'n identifiant numérique auto incrémenté ne garantit pas du tout une suite logique ou mathématique donc que vous ayez des données avec id aut-incrémenté 0,1,2, entier numérique jusqu'à l'infini.

Bref une base de données doit avoir du sens sinon elle devient inexploitable, non seuilement les programmes deviennent plus complexes à faire et à gérer juqu'à ce que cela dvienne impossible mais la base de données devient inexploitable et inutile et avec celà vous perdez toutes les données stockées.

Le coup de l'identifiant numérique auto-incrémenté est une astuce (voire même de la paresse du concepteur ou une facilité lorsque deux valeurs d'une table doivent être identifiantes avec ou sans jointure) mais clairement sa valeur ne correpsond à rien à part un nombre qui garantit une valeur unique à chaque ligne. Utiliser une valeur arbitraire et changeante(on ajoute une ligne la valeur de l'id est incrémenté de 1, on ajoute 1000 lignes chaque ligne sera incrémenté de 1) signifie que si vous modifiez une quelconque valeur dans votre base plus rien ne fonctionne puisque où vous aurez 1,2,3,... vous pouvez très bien avoir 1, 457,1687,1333 (lrodre aussi n'indique rien sauf qu'une valeur est insérée possiblemen avant une autre).

En conclusion soit vous faites votre tirage aléatoir sur une valeur qui a un sens (l'identifiant naturel) soit un set de données arbitraire au moment où vous le récupérez par exemple avec SELECT * table1.

Ps: mauvaise idée de nommer vos 'table1' qui ne veut strictement rien dire. Un nom de table est censé indiquer le rôle du regroupement de données. Donc une personne externe ou votre vous de dans quelques mois ne saura pas du tout à quoi correspond table1 puisque cela veut rien dire. Pire encore imaginez que tout le monde fasse cela, chacun aura des table1, table2 etc et donc pour une notation table1 eut correspondre table34 chez quelqu'un d'autre. J'appelle ça foutre le bordel volontairement. Tandis qu'un nom qui veut dire quelqu' chose et rerésente l'entité stocké non seulement tout le monde comprends mais en plus vous même vous saurez clairement ce que ça concernne rien qu'en regardant le programme et non en devant faire une analyse compléte.

Donc tableClient OK table1 pas OK du tout.

tableFruits OUI, table1457 NON.

0