Fonction afficher un tableau en php
Résolu
LiLou LiLa
Messages postés
330
Date d'inscription
Statut
Membre
Dernière intervention
-
LiLou LiLa Messages postés 330 Date d'inscription Statut Membre Dernière intervention -
LiLou LiLa Messages postés 330 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je suis en train de travailler sur un intranet dans lequel plusieurs fonctions sont utilisés.Il avait eté commencé lannée derniere par une autre stagiaire et jai du reecrire une de ces fonctions
mes pages :
dans fichereparation.php (appel fonction)
et ma fonction : (toutes sont enregistrés dans un fichier fonction.php)
sur le site le tableau est fait, il y a les titres, mais juste la premiere ligne comprend la liste deroulante sur 3 , et je n ai pas de case a cocher pour Action
je pense que c'est par làl que ça doit me planter et ne plus faire apparaitre le reste pour les autres
merci davance pour votre aide precieuse :)
je suis en train de travailler sur un intranet dans lequel plusieurs fonctions sont utilisés.Il avait eté commencé lannée derniere par une autre stagiaire et jai du reecrire une de ces fonctions
mes pages :
dans fichereparation.php (appel fonction)
<? //Requête sélection des travaux de la fiche $sql="SELECT Id_DR,Observation_DR,Libellecourt_TRE FROM DETAIL_REPARATION,TYPE_REPARATION_ET_ENTRETIEN,REPARATION_ET_ENTRETIEN WHERE DETAIL_REPARATION.Id_TRE=TYPE_REPARATION_ET_ENTRETIEN.Id_TRE AND DETAIL_REPARATION.Id_RE=REPARATION_ET_ENTRETIEN.Id_RE AND REPARATION_ET_ENTRETIEN.Id_RE='".$_SESSION['ID']."' ORDER BY Id_DR"; $resultat = resultat($sql,$Connexion); //Requête liste de tout les types pour la liste déroulante $sqlliste="SELECT Id_TRE,Libellecourt_TRE FROM TYPE_REPARATION_ET_ENTRETIEN"; $resultatliste=resultat($sqlliste,$Connexion); //Affiche le tableau/appel fonction $tab1=array("observation","observation","modifiable",0,"","",""); $tab2=array("type","","liste",1,$resultatliste,"",""); $tab3=array("action","checkbox","caseacocher",0,"","",""); echo Tableaumodif2($resultat,$tab1,$tab2,$tab3); //Affiche les boutons ajouter et supprimer//nouveau code &&($etat=="encours") if (($mode=="modification")&&($etat=="encours")) { echo "<table width=100%><tr><td align=\"right\"><input type=\"submit\" value=\"AJOUTER LIGNE\" name=\"AJOUTT\" class=\"bouton_form2\">"; echo "<input type=\"submit\" value=\"SUPPRIMER LIGNE\" name=\"SUPPRIMT\" class=\"bouton_form2\"></td></tr></table><p>"; } ?>
et ma fonction : (toutes sont enregistrés dans un fichier fonction.php)
function Tableaumodif2() { //parametres en entree : (tableau de données,tableau de conf par colonne ) //tableau de données = $resultat , tableau de conf par colonne = tab par colonne //tab=array(nom/titre colonne,class css,mode affichage,identification colonne,resultat requete menu deroulant,valeur defaut,id defaut) $NbArgs=func_num_args(); $Tableau=func_get_args(); //tableau de données $resultat=$Tableau[0]; //requete affichage du tableau //boucle affichage du tableau echo "<table align=\"center\">"; for($i=1;$i<=($NbArgs-1);$i++) echo"<th>".$Tableau[$i][0]."</th>"; //titre colonne //boucle lignes tableau while($row =& $resultat->fetchRow()) { echo "<tr>"; //boucle pour chaque ligne du tableau for($i=1;$i<=($NbArgs-1);$i++) { $conf=$Tableau[$i]; echo"<td align=\"center\">"; if($conf[1]=="") { switch ($conf[2]) { //suivant le mode d'affichage(visible,liste,caseacocher,cachee,modifiable) case 'visible': echo $row[$conf[0]]; break; case 'liste': echo ListeOption($conf[4],1,$conf[4].$row[$conf[3]],1,$conf[5]); break; case 'caseacocher': echo "<td><input type=\"checkbox\" name=\"".$row[0]."\" value=\"".$row[0]."\" class=\"checkbox\"></td>"; break; //case 'cachee': // echo ""; // break; (je sais pas comment on fait pour faire un affichage cachée encore) default: //case 'modifiable': echo "<input type=\"text\" name=\"".$conf[0].$row[$conf[3]]."\">"; break; } } else //suivant la class css ($conf[1]) echo "<input type=\"text\" name=\"".$conf[0].$row[$conf[3]]."\" class=\"".$conf[1]."\">"; echo "</td>"; } } echo "</tr></table>"; }
sur le site le tableau est fait, il y a les titres, mais juste la premiere ligne comprend la liste deroulante sur 3 , et je n ai pas de case a cocher pour Action
je pense que c'est par làl que ça doit me planter et ne plus faire apparaitre le reste pour les autres
merci davance pour votre aide precieuse :)
A voir également:
- Fonction afficher un tableau en php
- Tableau word - Guide
- Fonction si et - Guide
- Trier un tableau excel - Guide
- Tableau ascii - Guide
- Imprimer un tableau excel - Guide
6 réponses
j ai finalement trouvé moi meme la solution (je vous la met au cas ou ça pourrait interessé quelqu'un malgré toutes mes complications pour pas grand chose :) )
le probleme venait que les parametres en entrée dans ma fonction tableau etait des resultats de requetes
pour le tableau d'affichage ça passait niquel
mais pour la fonction de la liste deroulante celà ne marchait que pour le premier enregistrement, pour les autres il ne passait meme pas dans la boucle pour creer la liste ..
donc voici pmon ocde modifié et qui marche :
appel de la fonction modifié :
et dans ma fonction tableaumodif2 :
et tout marche :)
merci quand meme de vous etre interessé a mon probleme de mes codes mega complexes :p
le probleme venait que les parametres en entrée dans ma fonction tableau etait des resultats de requetes
pour le tableau d'affichage ça passait niquel
mais pour la fonction de la liste deroulante celà ne marchait que pour le premier enregistrement, pour les autres il ne passait meme pas dans la boucle pour creer la liste ..
donc voici pmon ocde modifié et qui marche :
appel de la fonction modifié :
<? //Requête sélection des travaux de la fiche $sql="SELECT Id_DR,Observation_DR,Libellecourt_TRE FROM DETAIL_REPARATION,TYPE_REPARATION_ET_ENTRETIEN,REPARATION_ET_ENTRETIEN WHERE DETAIL_REPARATION.Id_TRE=TYPE_REPARATION_ET_ENTRETIEN.Id_TRE AND DETAIL_REPARATION.Id_RE=REPARATION_ET_ENTRETIEN.Id_RE AND REPARATION_ET_ENTRETIEN.Id_RE='".$_SESSION['ID']."' ORDER BY Id_DR"; //Requête liste de tout les types pour la liste déroulante $sqlliste="SELECT Id_TRE,Libellecourt_TRE FROM TYPE_REPARATION_ET_ENTRETIEN"; //Affiche le tableau //structure : $tab par colonne - array(nom, class css, mode affichage, identifiant, resultat requete liste deroulante,valeur par defaut) $tab0=array("Id","","visible",0,"",""); $tab1=array("Observation","observation","modifiable",0,"",""); $tab2=array("Type","","liste",0,$sqlliste,""); $tab3=array("Action","checkbox","caseacocher",0,"",""); echo Tableaumodif2($sql,$tab0,$tab1,$tab2,$tab3); } ?>
et dans ma fonction tableaumodif2 :
function Tableaumodif2() { //parametres en entree : (tableau de données,tableau de conf par colonne ) //tableau de données = $resultat , tableau de conf par colonne = tab par colonne //tab=array(nom/titre colonne,class css,mode affichage,identification colonne,resultat requete menu deroulant,valeur defaut,id defaut) $NbArgs=func_num_args(); $Tableau=func_get_args(); //connexion $Connexion=Connecte(****,*******,********,$_SESSION['nom'],$_SESSION['passe']); //tableau de données //$resultat=$Tableau[0]; //requete affichage du tableau executé $sql=$Tableau[0];//requete affichage du tableau $resultat=resultat($sql,$Connexion); //boucle affichage du tableau echo "<div align=\"center\"><table align=\"center\">"; for($i=1;$i<=($NbArgs-1);$i++) echo"<th>".$Tableau[$i][0]."</th>"; //titre colonne //boucle lignes tableau while($row =& $resultat->fetchRow()) { echo "<tr>"; //boucle pour chaque ligne du tableau for($i=1;$i<=($NbArgs-1);$i++) { $conf=$Tableau[$i]; echo"<td align=\"center\">"; //suivant la class css ($conf[1]) if($conf[1]=="") $class=""; else $class="class=\"".$conf[1]."\""; //suivant le mode d'affichage(visible,liste,caseacocher,cachee,modifiable - message erreur par defaut) switch ($conf[2]) { case 'visible': echo $row[($i-1)]; break; case 'liste': //recupere la requete de la liste et on l execute $sqlliste=$conf[4]; $resultatliste=resultat($sqlliste,$Connexion); //appel fonction liste echo ListeOption($resultatliste,0,$conf[0].$row[$conf[3]],1,$conf[5],$class); break; case 'caseacocher': echo "<input type=\"checkbox\" ".$class." name=\"".$row[$i-1]."\" value=\"".$row[$i-1]."\">"; break; //case 'cachee': // echo ""; suivant droit? // break; case 'modifiable': echo "<input type=\"text\" ".$class." name=\"".$conf[3].$row[$i-1]."\" value=\"".$row[$i-1]."\">"; break; default: echo "mode incorrect"; } echo "</td>"; } echo "</tr>"; } echo "</table></div>"; }
et tout marche :)
merci quand meme de vous etre interessé a mon probleme de mes codes mega complexes :p
Bonjour,
N'y a-t-il pas un problème de guillemets dans cette ligne ?
$tab1=array("observation","observation","modifiable",0,"","","");
N'y a-t-il pas un problème de guillemets dans cette ligne ?
$tab1=array("observation","observation","modifiable",0,"","","");
sur ma page il y a
jai cherché tout ce matin avec celui qui soccupe de moi au stage mais rien a faire aucune solution n a eté trouvé . .
jai rajouté dans fichemateriel l id :
et reorganisé ma fonction tableaumodif2 :
maintenant jai ma case a cocher ( ça marchait pas vu qu il appliquait le mode d affichage puis la classe css l ecrasé mais comme ça tout va bien )
jai toujours le soucis de ma liste deroulante et c'est assez mysterieux :
ma premiere ligne du tableau marche bien :)
jai l id en visible, l observation en modifié et avec sa class, la liste deroulante pour le type, et ma case a coché pour action
puis pour les autres lignes
j ai toujours l id, l observation et l action correcte MAIS ma liste deroulante est vide totalement
on pense que le probleme vient du fait que $conf[4] qui reprend dans lappel de la fonction le resultat de la requete pour la liste deroulante devrait etre un tableau de resultat et ce nest pas le cas car lors d un echo celui affiche "Objet" et non "Array" ..
en fait il y a le grand tableau $Tableau[$i] qui a
| resultat requete affichage | colonne1 | colonne2 | colonneN
dans chaque colonne un tableau $conf[] avec:
- nom de la colonne
- class css
- mode affichage
- identifiant
- TABLEAU VALEUR RESULTAT LISTE DEROULANTE
- valeur par defaut
ça beuguerait sur le tableau ( $conf[4] ) qui ne serait pas un tableau ..
fonction pour liste deroulante :
aidez moi s il vous plait . .
$tab1=array("observation","observation","modifiable",0,"","","");je sais pas pourquoi ça la pas pris . .
jai cherché tout ce matin avec celui qui soccupe de moi au stage mais rien a faire aucune solution n a eté trouvé . .
jai rajouté dans fichemateriel l id :
$tab0=array("Id","","visible",0,"","",""); $tab1=array("Observation","observation","modifiable",0,"","",""); $tab2=array("Type","","liste",0,$resultatliste,"",""); $tab3=array("Action","checkbox","caseacocher",0,"","",""); echo Tableaumodif2($resultat,$tab0,$tab1,$tab2,$tab3);
et reorganisé ma fonction tableaumodif2 :
unction Tableaumodif2() { //parametres en entree : (tableau de données,tableau de conf par colonne ) //tableau de données = $resultat , tableau de conf par colonne = tab par colonne //tab=array(nom/titre colonne,class css,mode affichage,identification colonne,resultat requete menu deroulant,valeur defaut,id defaut) $NbArgs=func_num_args(); $Tableau=func_get_args(); //tableau de données $resultat=$Tableau[0]; //requete affichage du tableau //boucle affichage du tableau echo "<div align=\"center\"><table align=\"center\">"; for($i=1;$i<=($NbArgs-1);$i++) echo"<th>".$Tableau[$i][0]."</th>"; //titre colonne //boucle lignes tableau while($row =& $resultat->fetchRow()) { echo "<tr>"; //boucle pour chaque ligne du tableau for($i=1;$i<=($NbArgs-1);$i++) { $conf=$Tableau[$i]; echo"<td align=\"center\">"; //suivant la class css ($conf[1]) if($conf[1]=="") $class=""; else $class="class=\"".$conf[1]."\""; //suivant le mode d'affichage(visible,liste,caseacocher,cachee,modifiable - message erreur par defaut) switch ($conf[2]) { case 'visible': echo $row[($i-1)]; break; case 'liste': $test=$conf[4]; echo ListeOption($test,1,$conf[0].$row[$conf[3]],1,$conf[5]); break; case 'caseacocher': echo "<input type=\"checkbox\" ".$class." name=\"".$row[$i-1]."\" value=\"".$row[$i-1]."\">"; break; //case 'cachee': // echo ""; suivant droit? // break; case 'modifiable': echo "<input type=\"text\" ".$class." name=\"".$conf[3].$row[$i-1]."\" value=\"".$row[$i-1]."\">"; break; default: echo "mode incorrect"; } echo "</td>"; } echo "</tr>"; } echo "</table></div>"; }
maintenant jai ma case a cocher ( ça marchait pas vu qu il appliquait le mode d affichage puis la classe css l ecrasé mais comme ça tout va bien )
jai toujours le soucis de ma liste deroulante et c'est assez mysterieux :
ma premiere ligne du tableau marche bien :)
jai l id en visible, l observation en modifié et avec sa class, la liste deroulante pour le type, et ma case a coché pour action
puis pour les autres lignes
j ai toujours l id, l observation et l action correcte MAIS ma liste deroulante est vide totalement
on pense que le probleme vient du fait que $conf[4] qui reprend dans lappel de la fonction le resultat de la requete pour la liste deroulante devrait etre un tableau de resultat et ce nest pas le cas car lors d un echo celui affiche "Objet" et non "Array" ..
en fait il y a le grand tableau $Tableau[$i] qui a
| resultat requete affichage | colonne1 | colonne2 | colonneN
dans chaque colonne un tableau $conf[] avec:
- nom de la colonne
- class css
- mode affichage
- identifiant
- TABLEAU VALEUR RESULTAT LISTE DEROULANTE
- valeur par defaut
ça beuguerait sur le tableau ( $conf[4] ) qui ne serait pas un tableau ..
fonction pour liste deroulante :
function ListeOption () { $NbArgs=func_num_args(); $Tableau=func_get_args(); $resultat=$Tableau[0]; $ligne1=$Tableau[1]; $name=$Tableau[2]; $nbchamps=$Tableau[3]; $selection=$Tableau[4]; if(($NbArgs==6)and($Tableau[5]<>"")) { $class=$Tableau[5]; echo "<select name=\"".$name."\" class=\"".$class."\">"; } else echo "<select name=\"".$name."\">"; if($ligne1==1) echo "<OPTION>"; while ($row =& $resultat->fetchRow()) { if($row[0]<>'0') { if($selection==$row[1]) { echo "<option value=\"".$row[0]."\" selected=\"selected\">"; } else { echo "<option value=\"".$row[0]."\">"; } for($i=1;$i<=$nbchamps;$i++) { echo $row[$i]." "; } } } echo "</select>"; }
aidez moi s il vous plait . .
Je suis désolé de pas pouvoir beaucoup t'aider ...
Ton code à l'air vachement compliqué ...
Je pense qu'il y a des moments où tu te complique trop la tâche !
Essaye de revoir tout ça sans le grand tableau.
Il faudrait que tu fasse plus simple avec une boucle while qui te liste tout les résultat dans le tableau html de mise en forme directement et un par un avec ton Observation, ta Case à cocher et tout le reste.
Pour le style CSS, tu vois ce que tu peux faire. Je suis sûr que ton truc est faisable, mais beaucoup plus simplement.
En vérité, je vois vraiment pas à quoi doit ressembler le résultat final.
Et même si j'en ai une petite idée, je ne vois pas où est censée se produire l'action ...
C'est pas grave ... Garde courage, bonne chance.
Si tu à le temps essaye de faire des screenshots de ce que tu obtiens pour bien voir à quoi sa doit ressembler au final.
Désolé de pas pouvoir faire plus.
Ton code à l'air vachement compliqué ...
Je pense qu'il y a des moments où tu te complique trop la tâche !
Essaye de revoir tout ça sans le grand tableau.
Il faudrait que tu fasse plus simple avec une boucle while qui te liste tout les résultat dans le tableau html de mise en forme directement et un par un avec ton Observation, ta Case à cocher et tout le reste.
Pour le style CSS, tu vois ce que tu peux faire. Je suis sûr que ton truc est faisable, mais beaucoup plus simplement.
En vérité, je vois vraiment pas à quoi doit ressembler le résultat final.
Et même si j'en ai une petite idée, je ne vois pas où est censée se produire l'action ...
C'est pas grave ... Garde courage, bonne chance.
Si tu à le temps essaye de faire des screenshots de ce que tu obtiens pour bien voir à quoi sa doit ressembler au final.
Désolé de pas pouvoir faire plus.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
des screenshots ??
le truc c'est que je suis en stage et je n ai pas vraiment le choix a part de le faire comme ça
a l affichage jai qu un tableau
dans mon code jai le tableau qui affiche+ dans chaque colonne un tableau de parametre+dans le tableau de parametre dans une ligne un tableau de données
le truc c'est que je suis en stage et je n ai pas vraiment le choix a part de le faire comme ça
a l affichage jai qu un tableau
dans mon code jai le tableau qui affiche+ dans chaque colonne un tableau de parametre+dans le tableau de parametre dans une ligne un tableau de données
avec pleins d echo jai decouvert que mon probleme sur mes listes deroulantes est que pour le deuxieme enregistrements il ne passe pas dans ma boucle qui affiche les resultats de ma fonction liste option:
le message en javascript ne s affiche que pour les resultats de la liste du premier enregistrement
mais je ne sais toujours pas pourquoi il ne entre pas dans la boucle pour les autres
une idée? aidez moi svp
function ListeOption () { $NbArgs=func_num_args(); $Tableau=func_get_args(); $resultat=$Tableau[0]; $ligne1=$Tableau[1]; $name=$Tableau[2]; $nbchamps=$Tableau[3]; $selection=$Tableau[4]; if(($NbArgs==6)and($Tableau[5]<>"")) { $class=$Tableau[5]; echo "<select name=\"".$name."\" class=\"".$class."\">"; } else echo "<select name=\"".$name."\">"; if($ligne1==1) echo "<OPTION>"; while ($row =& $resultat->fetchRow()) {echo gettype($row); echo "<script language=\"javascript\"> alert(\"liste !\"); </script>"; if($row[0]<>'0') { if($selection==$row[1]) echo "<option value=\"".$row[0]."\" selected=\"selected\">"; else echo "<option value=\"".$row[0]."\">"; for($i=1;$i<=$nbchamps;$i++) echo $row[$i]." "; } } echo "</select>";echo gettype($row); }
le message en javascript ne s affiche que pour les resultats de la liste du premier enregistrement
mais je ne sais toujours pas pourquoi il ne entre pas dans la boucle pour les autres
une idée? aidez moi svp