Problème d'affichage pour une gestion de relance de commandes

Résolu
Signaler
Messages postés
28
Date d'inscription
lundi 24 octobre 2005
Statut
Membre
Dernière intervention
15 juin 2006
-
Messages postés
28
Date d'inscription
lundi 24 octobre 2005
Statut
Membre
Dernière intervention
15 juin 2006
-
Bonjour,

J'ai un problème au niveau de ma boucle à mon avis.C'est la deuxième journée que je galère sur cet affichage de m****...

Voici ce que j'obtiens avec mon code :
ai2av.gif http://img99.imageshack.us/my.php?image=ai2av.gif


Et ce voila ce que j'aimerais :
http://img59.imageshack.us/my.php?image=cequejeveux2lg.gif


et voila mon super code lol

$req = "SELECT * FROM cdefrs,cdecli,client,fournisseur "
."WHERE reffrs=idfrs AND refcdecli=idcdecli AND refcli=idcli "
."ORDER BY datedelai DESC";
$res = $bd->execRequete ($req); //fonction qui exécute la requête


$i=0;//On initialise i à 0


while ($nbcde = $bd->objetSuivant($res)) //correspond à mysql_fetch_object
{
list($ad,$md,$jd) = explode("-",$nbcde->datedelai);//on récupère l'année, le mois et le jour
$annee = substr($ad,2,2);//On récupère les deux derniers chiffres de l'année


//Si l'année XXXX n'est pas déjà affichée, on l'affiche
if ($i != $ad)
{
echo 'PLANNING DE SOUS-TRAITANCE DE L\'ANNEE '.$ad.'
';
$i=$ad;
}


//On crée un nouveau tableau à chaque nouvelle semaine de l'annnée en cours
echo 'Semaine : '.$nbcde->refsem.'/'.$annee.'

DOSSIER |
SOUS-TRAITANT |
NATURE |
DELAI |
RECEPTION |
';

//On convertit la date délai en timestamp pour la comparer avec
//le timestamp de la date d'aujourd'hui
$datedelai = mktime (0,0,0,$md,$jd,$ad);
//Si la délai n'a pas été dépassé, on ne met pas de couleur
if ( date('U') <= ($datedelai) && $nbcde->datereception==\"\")
{
echo '
----
';
}
else
{
//Si la date de réception a été entrée, on colorie la ligne en bleue
if ($nbcde->datereception != \"\")
{
echo '
----
';
}
//Sinon la date délai a été dépassée et on colorie la ligne en rouge
else
{
echo '
----
';
}
}

//On affiche toutes les données concernant la commande de sous-traitance
//dans un tableau
echo '
<table width="90%" border="0" cellpadding="0" cellspacing="0">
----, '.$nbcde->nomcli.'</td>
'.$nbcde->numcdecli.'
</td>
<td>'.$nbcde->nomfrs.',
'.$nbcde->numcdefrs.'
</td>
<td>'.$nbcde->nature.'</td>
<td>'.$jd.'/'.$md.'/'.$ad.'</td>
<td valign="middle">';


//Si aucune date de réception n'a été entrée dans la base de données
//On affiche une case à cocher
if ($nbcde->datereception=="")
{
echo '
<form method="POST" action="index.php" name="form">
numcdefrs.'">';
}
else //Sinon on affiche la date à laquelle la réception a été effectuée
{
// Décryptage de la date Unix
$idate = getDate($nbcde->datereception);
// Mise en forme de la date décryptée
$date = $idate['mday'] . "/" . $idate['mon'] . "/" . $idate['year'];
echo $date;
}


echo '
</td>
</tr></table>
';
}

J'ai essayé tout plein de contrôles, mais bon j'avais pas ce que je voulais
Je désespère...Surtout que c'est pour mon stage de deuxieme année...

Merci d'avance ^^

3 réponses

Messages postés
28
Date d'inscription
lundi 24 octobre 2005
Statut
Membre
Dernière intervention
15 juin 2006

Finalement j'ai réussi à obtenir le résultat que je voulais

$bd = Connexion (NOM, PASSE, BASE, SERVEUR);

//****************************************************************************//
//*************************** AFFICHAGE DU FORMULAIRE ************************//
//****************************************************************************//

//Requête permettant d'avoir toutes les données nécessaires sur une commande de
//sous-traitance
$requete="SELECT * FROM cdefrs,cdecli,client,fournisseur "
."WHERE reffrs=idfrs AND refcdecli=idcdecli AND refcli=idcli "
."ORDER BY datedelai DESC";
$resultat=$bd->execRequete($requete);

// Je t'explique un peu le plus le code
// afin que tu puisses l'adapter à ton cas
//
// Initialisation des variables
$sauvannee="";
$sauvsemaine="";
//
// Tant que ce n'est pas la fin du fichier
while($nbcde=$bd->objetSuivant($resultat)) //correspond à mysql_fecth_object
{
list($ad,$md,$jd) = explode("-",$nbcde->datedelai);//on récupère l'année, le mois et le jour
$annee = substr($ad,2,2);//On récupère les deux derniers chiffres de l'année

//On convertit la date délai en timestamp pour la comparer avec
//le timestamp de la date d'aujourd'hui
$datedelai = mktime (0,0,0,$md,$jd,$ad);

//Récupération du numéro de semaine calculé à partir du timestamp
//de la date delai
$semaine=date('W',$datedelai);

//Récupération de l'année calculé à partir du timestamp
//de la date delai
$an=date('Y',$datedelai);

//Contrôle du numéro de la semaine de la date délai
//Si la date est le 1er,2 ou janvier, et que d'après le timestamp Unix,
//elle fait partit de le 52ème ou 53ème semaine de l'année précédente, on
//remplace la valeur du numéro de semaine par la valeur '01'.
if ( ($semaine==53 && $jd==1 && $md==1) or ($semaine==52 && $jd==1 && $md==1) )
{
$semaine='01';
}
elseif ( ($semaine==53 && $jd==2 && $md==1) or ($semaine==52 && $jd==2 && $md==1) )
{
$semaine='01';
}
elseif ( ($semaine==53 && $jd==3 && $md==1) or ($semaine==52 && $jd==3 && $md==1) )
{
$semaine='01';
}

// Nouvelle semaine ?
// si ce n'est pas égal c'est que c'est une nouvelle semaine
if(($semaine!=$sauvsemaine)||($an!=$sauvannee))
{
// est-ce le premier ? si oui, afficher le total du précédent que l'on finit
if($sauvsemaine)
echo "</td></tr></table>";

// Nouvelle année ?
// si ce n'est pas égal c'est que c'est une nouvelle année
if($an!=$sauvannee)
{
// si ce n''est pas la première, alors afficher la fin de celle que l'on finit
if($sauvannee)
echo "";

// et afficher le début de la nouvelle famille
echo "PLANNING DE SOUS-TRAITANCE DE L'ANNEE ".$an."
";
// stocker cette nouvelle famille pour comparaison future
$sauvannee = $an;
//$sauvsemaine="";
}
// afficher la nouvelle semaine
echo 'Semaine : '.$semaine.'/'.$annee.'

DOSSIER |
SOUS-TRAITANT |
NATURE |
DELAI |
RECEPTION |
';
// sauvegarder cette nouvelle semaine pour comparaison future
$sauvsemaine = $semaine;
}

//****************************************************************************//
//********************* CONTROLE DE LA DATE DE RECEPTION *********************//
//****************************************************************************//

//Si la délai n'a pas été dépassé, on ne met pas de couleur
if ( date('U') <= ($datedelai) && $nbcde->datereception==\"\")
{
echo '
----
';
}
else
{
//Si la date de réception a été entrée, on colorie la ligne en bleue
if ($nbcde->datereception != \"\")
{
echo '
----
';
}
//Sinon la date délai a été dépassée et on colorie la ligne en rouge
else
{
echo '
----
';
}
}

//On affiche toutes les données concernant la commande de sous-traitance
//dans un tableau
echo '
<table width="90%" border="0" cellpadding="0" cellspacing="0">
----, '.$nbcde->nomcli.'</td>
'.$nbcde->numcdecli.'
</td>
<td>'.$nbcde->nomfrs.',
'.$nbcde->numcdefrs.'
</td>
<td>'.$nbcde->nature.'</td>
<td> '.$jd.'/'.$md.'/'.$ad.' </td>
<td valign ="middle">';

//Si aucune date de réception n'a été entrée dans la base de données
//On affiche une case à cocher
if ($nbcde->datereception=="")
{
echo '
<form method="POST" action="index.php" name="form">
numcdefrs.'">';
}
else //Sinon on affiche la date à laquelle la réception a été effectuée
{
// Décryptage de la date Unix
$idate = getDate($nbcde->datereception);
// Mise en forme de la date décryptée
$date = $idate['mday'] . "/" . $idate['mon'] . "/" . $idate['year'];
echo $date;
}
}

//On affiche le bouton valider et la légende pour bien comprendre à quoi
//correspondent les couleurs. Cependant ce n'est pas très utile.
echo ' </td><table>


</form>


';
//****************************************************************************//
//*********************** FIN AFFICHAGE DU FORMULAIRE ************************//
//****************************************************************************//
Messages postés
28
Date d'inscription
lundi 24 octobre 2005
Statut
Membre
Dernière intervention
15 juin 2006

AIDEZ MOI SIOU PLAIT !!!
Messages postés
28
Date d'inscription
lundi 24 octobre 2005
Statut
Membre
Dernière intervention
15 juin 2006

Bon j'essaie de m'inspirer d'un code depuis ce matin, mais je n'ai pas obtenu grand chose...





Alors la j'ai réessayé en partant de quelque chose de tout simple :


PHP:, ----
$req = "SELECT * FROM cdefrs ORDER BY datedelai DESC";

//Ex&#233;cution de la requ&#234;te

$res = $bd->execRequete ($req);

$an="";

$semaine="";

while ($cde=mysql_fetch_array($res))

{

list($a,$m,$j)=explode("-",$cde['datedelai']);

$date=mktime(0,0,0,$m,$j,$a);

if (($an != date('Y',$date))||($semaine != date('W',$date)))

{

if ($an)

echo 'Ann&#233;e : '.$an.'
';

if ($semaine != date('W',$date))

{

if ($semaine)

echo 'Semaine : '.$semaine.'';

$semaine =  date('W',$date);

}

$an = date('Y',$date);

}

} 










Et j'obtiens :


Citation:, ----
Année : 2006

Semaine : 07

Année : 2006

Semaine : 05

Année : 2006

Semaine : 01

Année : 2006

Semaine : 52

Année : 2005

Semaine : 01

Année : 2005

Année : 2004

Semaine : 53






Normalement je devrais obtenir ceci si je ne me trompe pas:


Citation:, ----
Année : 2006

Semaine : 07

Année : 2006

Semaine : 05

Année : 2006

Semaine : 01

Année : 2005

Semaine : 52

Année : 2005

Semaine : 01

Année : 2004

Semaine : 53

Année : 2004

Semaine : 46






Soit je suis vraiment malchanceux, soit je suis extrêmement nul...





Vous pouvez me dire où mon erreur dans ce code tout simple ???





Je me suis inspiré de ca ( http://www.asp-php.net/tutorial/divers/hierarchie.php?page=5 ):


PHP:, ----
$totgen=0; $totfam=0; $totelem=0; $sauvfam=""; $sauvelem="";

while($val=mysql_fetch_array($result)) {

// Nouvel &#233;l&#233;ment

if(($val["element"]!=$sauvelem)||($val["famille"]!=$sauvfam)) {

if($sauvelem) echo "<li>Total ".$sauvelem."=".$totelem."</li>";

$totfam+=$totelem;

// Nouvelle famille

if($val["famille"]!=$sauvfam) {

if($sauvfam) echo "<li>Total ".$sauvfam."=".$totfam."</li>";

echo "<li>D&#233;but de : ".$val['famille']."</li>";

$sauvfam = $val["famille"];

$totgen+=$totfam;

$totfam=0; $sauvelem="";

}

echo "<li>D&#233;but de : ".$val['element']."</li>";

$sauvelem = $val["element"];

$totelem=0;

}

// Traiter rubrique

echo "<li>".$val['rubrique']." : ".$val['nombre']."</li>";

$totelem+=$val['nombre'];

} 







Help me, je désespere...