PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 23-02-2019 12:08:54

Beley
Membre
Inscription : 23-02-2019
Messages : 3

Table à 2 colonnes - Définir variables selon Id

Bonjour à vous,

Je débute en php et j'ai beaucoup de mal avec les tableaux. (ça craint sad )
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)


$sql = mysqli_query($cnx, "SELECT * FROM elements");

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 big_smile

Dernière modification par Beley (23-02-2019 12:31:13)

Hors ligne

#2 25-02-2019 05:11:19

KOogar
Membre
Lieu : PHP
Inscription : 09-05-2009
Messages : 38
Site Web

Re : Table à 2 colonnes - Définir variables selon Id

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:

$sql = mysqli_query($cnx, "SELECT champ1, champ2 FROM elements");
while ($ligne=mysqli_fetch_array($sql))
{
$id[] =  $ligne['champ1'];
$mots[] =  $ligne['champ2'];
}

print_r ( $id );
print_r ( $mots );

 

Hors ligne

#3 26-02-2019 18:49:52

Beley
Membre
Inscription : 23-02-2019
Messages : 3

Re : Table à 2 colonnes - Définir variables selon Id

Hello,

Je te remercie pour ta réponse smile

J'ai fini par trouver ce que je voulais:


$sql = mysqli_query($cnx, "SELECT * FROM elements");
while ($ligne=mysqli_fetch_array($sql))
{
    $MonTableau["id"][] =  $ligne[0];
    $MonTableau["mot"][]=  $ligne[1];
}

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 smile

Encore merci pour le temps que tu m'as consacré big_smile

Hors ligne

#4 27-02-2019 13:34:12

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 626
Site Web

Re : Table à 2 colonnes - Définir variables selon Id

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

#5 28-02-2019 00:55:27

Beley
Membre
Inscription : 23-02-2019
Messages : 3

Re : Table à 2 colonnes - Définir variables selon Id

Bonjour,

Merci pour cette méthode toute simple, à laquelle je n'avais pas pensé smile
(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é. big_smile

Hors ligne

Pied de page des forums