si c'est la méthode query de pdo, ça te renvoie un objet (l'équivalent de ta ressource avec le connecteur mysql)... lis la doc... cet objet est de type PDOStatement...
ou alors faut que tu montres ce que tu mets dans connexion::query()
or tu utilises fetch() qui ne retourne qu'une seule ligne... ça devrait être fetchAll() si tu veux générer ton tableaux en une seule fois avant ta boucle de lecture...
autre chose, pourquoi repasser par un tableau ($donnees) avant d'afficher????
tu alloues de la mémoire inutilement et allourdis le temps d'exécution et la relecture pour un humain pour rien... $infoEnf est largement suffisant et parlant...
quitte à encapsuler autan y aller franco...
devrait être dans requeteSelection()
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 $reqEnf=$connexion->requeteSelection($sqlEnf); $infoEnf=$reqEnf->fetchAll(); $lignesTotalRecu=$reqEnf->rowCount();
de même, que de mettre un echo dans cette méthode qui va s'afficher en vrac dans ta page... il faut apprendre à mieux gérer ton code et les erreurs...
et pourquoi stocker un retour de requête dans $this qui est ta connexion?
l'idée est de faire un tableau avec 3 parties qui sera renvoyé (moins lourd qu'un objet vu ce qu'on a besoin de faire derrière):
- ['count'] qui contient le nombre de ligne
- ['error'] qui contient le texte de l'erreur ou null
- ['data'] qui contient les données ou null
ça donne pour :
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 function requeteSelection($requete) { try { if($this->connexionActive() == false) return array('count'=>0,'error'=>'Connexion inactive','data'=>null); else { $donnees = $this->connexion->query($requete); return array('count'=>$donnees->rowCount(),'error'=>null,'data'=>$donnees->fetchAll(PDO::FETCH_ASSOC)); } } catch(PDOException $e) { echo "Echec lors de l'exécution de la requête : ".; return array('count'=>0,'error'=>$e->getMessage(),'data'=>null); } }
il vaut mieux fixer le type de retour attendu dans fetchAll (ou fetch)... ici on retourne avec PDO::FETCH_ASSOC seulement le tableau associatif au lieu d'avoir à la fois la version associative et numérique pour l'accès des colonnes (ce qui démultiplie le temps de récupération de la requête et la taille en mémoire)
comme ça c'est plus propre et simple... tu as toujours un tableau avec toujours la même structure facile à analyser...
ensuite ton tableau html ne se justifie que si il n'y a pas d'erreur d'où parfois la mauvaise idée de ne pas générer ça en pure php plutôt que de trop mixer html/php
la génération du tableau des enfants donnerait alors:
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 <?php $sqlEnf="SELECT nomEnfant, prenomEnfant, dateNaissance, nivScolaire FROM enfants INNER JOIN salarie ON enfants.idSalarie=salarie.idSalarie AND salarie.idSalarie=$idSalarie"; $lignes=connexion->requeteSelection($sqlEnf); if(empty($lignes[error]) { echo'<table><!-- insere ton entete de tableau à la place de ce commentaire--><tbody>'; for($i=0;$i<$ligne['count'];$i++) echo'<tr><td>'.$lignes['data'][$i]['nom']. '</td><td>'.$lignes['data'][$i]['prenom']. '</td><td>'.$lignes['data'][$i]['dateNaissance']. '</td><td>'.$lignes['data'][$i]['nivScolaire'].'</td></tr>'; echo'</tbody></table>'; } else echo"<div>Une erreur c'est produite:{$lignes[error]}</div>"; ?>
j'ai l'impression que tu confonds aussi colonne et lignes dans ton tableau dans ton code, vu là où tu as mis le [$i]
voilà je pense que ça devrait résoudre ton problème les les morceau de code que tu as donné...
peut-être que cette méthodologie te fera mieux voir comment tu peux gérer un affichage de tableau ou d'erreur... à adapter à ce que tu veux très facilement ensuite
Partager