Stocker nombre aléatoire php
Résolu/Ferméjee pee Messages postés 40558 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 16 décembre 2024 - 11 mai 2023 à 19:10
- Stocker nombre aléatoire php
- Easy php - Télécharger - Divers Web & Internet
- Nombre facile - Télécharger - Outils professionnels
- Gto nombre episode ✓ - Forum Jeux vidéo
- Kahoot gratuit nombre de participants - Forum Réseaux sociaux
- Tirage au sort excel aléatoire sans doublon ✓ - Forum Excel
1 réponse
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...
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 :
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.
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.
1 mai 2023 à 13:32
Bonjour
J’ai remplacé $nombre par
Puis j’ai modifié la requête :
Mais j’ai toujours le même problème, vous voyez ou est ce que je me suis trompé ?
Merci d’avance
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 !
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 :
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.