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

Résolu
lefreeman42 Messages postés 28 Date d'inscription lundi 24 octobre 2005 Statut Membre Dernière intervention 15 juin 2006 - 30 janv. 2006 à 11:03
lefreeman42 Messages postés 28 Date d'inscription lundi 24 octobre 2005 Statut Membre Dernière intervention 15 juin 2006 - 1 févr. 2006 à 10:24
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

lefreeman42 Messages postés 28 Date d'inscription lundi 24 octobre 2005 Statut Membre Dernière intervention 15 juin 2006
1 févr. 2006 à 10:24
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 ************************//
//****************************************************************************//
3
lefreeman42 Messages postés 28 Date d'inscription lundi 24 octobre 2005 Statut Membre Dernière intervention 15 juin 2006
30 janv. 2006 à 14:19
AIDEZ MOI SIOU PLAIT !!!
0
lefreeman42 Messages postés 28 Date d'inscription lundi 24 octobre 2005 Statut Membre Dernière intervention 15 juin 2006
31 janv. 2006 à 16:12
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...
0
Rejoignez-nous