Vous n'êtes pas identifié(e).
Bonjour à vous,
Je débute en php et j'ai beaucoup de mal avec les tableaux. (ça craint )
Souvent je "vois" l'idée, le cheminement, mais je cale sur la syntaxe voire le développement des boucles.
Je mets un point d'honneur à ne pas demander d'aide mais là j'ai beau chercher partout, je ne trouve rien qui me mette sur les bons rails - je sèche (... d'autant plus frustrant que je suis sûr que c'est une question fréquemment posée tellement c'est bête). Une semaine coincé sur ce bout de code, je craque.
Pour ne rien arranger, vu mon niveau je reste en style procédural et la plupart des réponses sont en pdo
(si je le dis bien ^^)
Mon problème et mon objectif:
J'ai une table "elements" dans ma base de données.
Elle comporte 2 colonnes: Id (auto-increment) et mot
Particularité: j'enrichis la table manuellement au fur et à mesure des besoins, et je laisse volontairement des trous dans les id, trous que je remplis par la suite avec de nouveaux mots.
Au final, je veux pouvoir appeler la table et définir chaque mot en variable, style $mot1=$mot[0] etc
J'ai avancé dans mon code, sauf que ce que j'obtiens correspond à l'ordre des mots retournés par mon appel et non pas à l'id des mots (ma particularité).
(J'ai viré les lignes de connexion à la bdd et vérification pour alléger)
while ($ligne=mysqli_fetch_array($sql))
{
$id[] = $ligne['0'];
$mots[] = $ligne['1'];
}
Pour vérifier:
- si je fais un echo $id[0] et que je continue avec $id[1] etc, j'ai bien les id qui correspondent à mes enregistrements: les trous sont bien pris en compte. (normal, chaque id est un champ, un champ compte pour un même s'il est vide) Je peux donc définir $id1 = $id[0] etc.....
- si je fais la même chose avec $mots, j'ai bien tous mes mots, sauf qu'ils ne sont pas en rapport avec l'id
$mot[0] est le premier mot renvoyé par ma requête, les vides génèrent un décalage.
Comment faire pour que $mot25 corresponde à $id25? (j'ai bien dit $id25, pas 24 ^^)
(Parce qu'au passage si vous savez comment régler le décalage induit par le fait que la numérotation commence à zéro... sinon j'irai voir du côté index ... ou me contenterai du dédalage de 1)
J'essaie d'ajouter une boucle foreach dans le while mais j'obtiens n'importe quoi.
Je vous remercie par avance pour le temps que vous allez me consacrer
Dernière modification par Beley (23-02-2019 12:31:13)
Hors ligne
En programmation quelque soit le langage on évite l'utilisation des numéros de champ, c'est une source d'erreurs
Utilise le nom des champs afin d'afficher leurs valeurs respectives:
print_r ( $id );
print_r ( $mots );
Hors ligne
Hello,
Je te remercie pour ta réponse
J'ai fini par trouver ce que je voulais:
foreach ($MonTableau['id'] as $i => $id)
{
${"mot".$id} = $MonTableau['mot'][$i];
}
Ca déclare directement en variable chaque mot trouvé dans la table ET $mot28 par exemple est et reste le mot correspondant à l'id 28.
Du coup je fais une pause et je révise pour passer du html4 au html5 (en gros je vais refaire mes pages en flexbox ^^) et de là je reprendrai le php à 0, Pdo inclus
Encore merci pour le temps que tu m'as consacré
Hors ligne
Bonjour,
Il faut bien comprendre à la base qu'il n'y a pas d'ordre dans une base de données. Il faut assimiler votre table à un sac de billes. Les ids sont des ids techniques et non pas un numéro d'ordre.
Que ferez-vous lorsque vous allez vouloir insérer un mot entre l'id 3 et l'id 4 ? on se le demande bien. Si vous voulez ordonner vos mots, il vous faut rajouter une colonne, appelons-là pour l'exemple "ordre" et il vous suffira de renuméroter l'ordre de vos mots indifféremment de leur id. Ensuite dans votre requête il suffira d'écrire SELECT id,mot FROM elements ORDER by ordre; et vous obtiendrez directement votre liste ordonnée comme vous le souhaitez.
Cordialement,
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Bonjour,
Merci pour cette méthode toute simple, à laquelle je n'avais pas pensé
(rien de péjoratif hein)
La raison pour laquelle je laisse des "trous" en inscrivant les mots dans ma bdd est justement d'éviter d'avoir un ordre ou de le créer inconsciemment: je "saute" d'une plage à l'autre. Quand une plage est pleine, pas de souci: j'en utilise une autre plus loin, sans rapport avec celle que j'utilise.
Mais encore une fois, merci pour cette autre solution, si simple dans son efficacité.
Hors ligne