|
|
|
|
Fonction afficher un tableau en php
Dernière réponse le 11 jun 2008 à 11:28:46 LiLou LiLa, le 10 jun 2008 à 09:01:08Bonjour,
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 :)
Configuration: Linux Firefox 2.0.0.11
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 . . |
Je suis désolé de pas pouvoir beaucoup t'aider ...
|
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 |
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 :) )
<? //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 |

