Fonction afficher un tableau en php

Résolu/Fermé
LiLou LiLa Messages postés 330 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 10 mars 2009 - 10 juin 2008 à 09:01
LiLou LiLa Messages postés 330 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 10 mars 2009 - 11 juin 2008 à 11:28
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)

<? //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:

6 réponses

LiLou LiLa Messages postés 330 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 10 mars 2009 12
11 juin 2008 à 11:28
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é :

<? //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
2
adgem0 Messages postés 119 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 7 mai 2010 158
10 juin 2008 à 11:49
Bonjour,
N'y a-t-il pas un problème de guillemets dans cette ligne ?

$tab1=array("observation","observation","modifiable",0,&quo­t;","","");
0
LiLou LiLa Messages postés 330 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 10 mars 2009 12
10 juin 2008 à 14:03
sur ma page il y a
$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 . .
0
adgem0 Messages postés 119 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 7 mai 2010 158
10 juin 2008 à 18:57
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
LiLou LiLa Messages postés 330 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 10 mars 2009 12
11 juin 2008 à 08:55
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
0
LiLou LiLa Messages postés 330 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 10 mars 2009 12
11 juin 2008 à 09:46
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:

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
0