Probleme d'affichage de variables dans un tableau

Petit nouveau ! | 6 Messages

18 févr. 2021, 22:21

Bonjour à tous,
Je vous expose ici une difficulté à laquelle je suis confrontée et que j’essaye de résoudre pendant près d’un mois mais hélas sans solution, j’ai tourné l’affaire dans tous les sens mais à chaque fois je tombe sur de l’os.

J’ai deux tables qui gèrent des numéros de compte, la table comptes_niveau1 contient les comptes principaux avec chacun son numéro respectif, tandis que la deuxième intitulée comptes_niveau2 contient les sous comptes créés à partir des comptes principaux de la première table.

comptes_niveau1 comptes_niveau2
numero1 Compte_assoc2 numero2
571 571 5711
572 571 5712
573 571 5713
572 5721
572 5722
572 5723
573 5731
573 5732
573 5733


Ensuite j’ai lié les deux tables par une jointure pour qu’avec une seule requête je puisse récupérer le numéro de compte principal ainsi que l’ensemble des sous comptes relatifs à ce compte principal à travers une boucle.
Pour la dernière étape (c’est là où ça se corse pour moi) je souhaiterais afficher les données récupérées dans un tableau à une colonne de la manière suivante :
571
5711
5712
5713
572
5721
5722
5723
573
5731
5732
5733
mais je n’y parviens pas au lieu de cette forme d’affichage ci-dessus je ne suis capable que de produire cette présentation suivante :

5711
5712
5713
5721
5722
5723
5731
5732
5733
qui est largement en deçà de ça que je veux. Alors je sollicite l'aide tous j'ai fouiné dans tous les forums et tutos mais rien alors aidez moi SVP.

Voici mon code

Code : Tout sélectionner

<?php $req = $bdd->query('SELECT n1.numero1, n2.numero2 FROM comptes_niveau1 n1 LEFT JOIN comptes_niveau2 n2 ON n1.numero1 = n2.compte_assoc2'); if($req<>FALSE) { echo "<table border=\"1\">"; //entête du tableau echo "<tr>"; echo "<th> Numero</th>"; echo "</tr>"; //fin de l'entête while ($donnees = $req->fetch()) { echo "<tr ALIGN=center>"; echo "<td>".$donnees['numero2']."</td>"; echo "</tr>"; } echo "</table>"; $req->closeCursor(); } if($req ==FALSE) { echo "Aucun compte encore cree"; } ?>

Mammouth du PHP | 2703 Messages

18 févr. 2021, 22:35

le principe :
$niv1 = 0;
while (...){
if($niv1 != $donnees['numero1']){
// affichage de $donnees['numero1']
$niv1 = $donnees['numero1'];
}
else{
// affichage de $donnees['numero2']
}
}

dembawarsalll
Invité n'ayant pas de compte PHPfrance

19 févr. 2021, 15:37

merci or1, vous me mettez sur une piste qui commence a porter ses fruits, le seul problème est qu'a chaque itération l'affichage saute la première ligne récupérée par la raquette et commence par afficher à partir de la deuxième ligne.
voila le code

Code : Tout sélectionner

<?php $req = $bdd->query('SELECT n1.numero1, n2.numero2 FROM comptes_niveau1 n1 LEFT JOIN comptes_niveau2 n2 ON n1.numero1 = n2.compte_assoc2'); if($req<>FALSE) { //Initialisation d'une variable d'incrementation $niv1 = 0; while ($donnees = $req->fetch()) { if($niv1 != $donnees['numero1']) { // affichage de $donnees['numero1'] echo $donnees['numero1'].'<br><br />'; $niv1 = $donnees['numero1'] ; } else { // affichage de $donnees['numero2'] echo $donnees['numero2'].'<br><br />'; } } $req->closeCursor(); } if($req ==FALSE) { echo "Aucun compte encore cree"; } ?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

19 févr. 2021, 16:55

Salutations !

C'est parce que l'affichage du sous-compte (numéro 2), ne devrait pas être dans le else, mais être réalisée à chaque fois, à la suite du if() qui affiche ou non le numéro de compte principal :

571 5711 => doit afficher 571 ET 5711
571 5712 => doit afficher uniquement 5712
571 5713 => doit afficher uniquement 5713
572 5721 => doit afficher 572 ET 5721

Ta condition doit donc juste vérifier si le compte principal à changé ou non pour ne pas le réafficher s'il est identique (auquel cas tu ne fais rien de particulier, donc pas de else), mais tu dois dans tous les cas afficher la seconde partie du compte :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...