IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Do While imbriqués


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 11
    Par défaut Do While imbriqués
    Bonjour,

    J'ai un script qui devrait généner un pdf avec plusieurs pages. Sur chaque page, une facture est affichée, avec les données du membre et ce qu'il a commandé.
    Pour ceci, j'ai 2 jeux d'enregistrements:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $query_RS_taille = "SELECT DISTINCT   t_club.No_sequence,  equipement.Training_haut,   equipement.Training_bas,   equipement.Top,   equipement.Liquette,   equipement.Tshirt_polyesther,   equipement.Tshirt_coton,   equipement.Pull_longues_manches_adulte,   equipement.Short_sport,   equipement.Short_course_a_pied,   equipement.Short_collant,   equipement.Collant_trois_quart,   equipement.Collant_long,   equipement.Coupe_vent,   equipement.Liquette_Basket,   equipement.Short_Basket,   equipement.Liquette_volley FROM  equipement    INNER JOIN t_club     ON     equipement.ID_MEMBRE = t_club.No_sequence";
    $RS_taille = mysql_query($query_RS_taille, $cs) or die(mysql_error());
    $row_RS_taille = mysql_fetch_assoc($RS_taille);
    $totalRows_RS_taille = mysql_num_rows($RS_taille);
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $query_RS_equipement = "SELECT DISTINCT   t_famille.nom,   t_famille.NPA,  t_nom_categorie.Desc_cat, t_famille.localite,   t_famille.telephone,   t_club.prenom,   t_club.filiation,   t_famille.adresse,   t_liaison_membre_famille.No_famille,   t_club.parent,   t_club.sexe,   t_club.date_naissance,   t_club.annee,   t_club.No_sequence,   t_famille.ID_famille   FROM   t_cotisation_categorie, equipement, t_liaison_membre_famille   INNER JOIN t_famille     ON t_liaison_membre_famille.No_famille = t_famille.ID_famille   INNER JOIN t_club     ON t_liaison_membre_famille.No_membre = t_club.No_sequence   INNER JOIN t_nom_categorie     ON t_club.categorie = t_nom_categorie.Categorie   INNER JOIN t_nom_groupes   INNER JOIN t_liaison_membre_groupe     ON t_club.No_sequence = t_liaison_membre_groupe.no_membre AND t_nom_groupes.Groupe = t_liaison_membre_groupe.no_groupe WHERE   t_club.categorie < 7 AND   (t_nom_groupes.Groupe < 20 OR t_nom_groupes.Groupe > 90) AND   t_cotisation_categorie.Cat_cotisation = t_club.categorie AND   equipement.ID_MEMBRE = t_club.No_sequence  ORDER BY   t_famille.nom,   t_famille.ID_famille,   t_club.filiation,   t_club.prenom";
    $RS_equipement = mysql_query($query_RS_equipement, $cs) or die(mysql_error());
    $row_RS_equipement = mysql_fetch_assoc($RS_equipement);
    $totalRows_RS_equipement = mysql_num_rows($RS_equipement);
    Voici la partie qui génère le pdf, avec mes boucles. Le souci est que la première page est OK, mais la 2ème ne m'affiche que les coordonnées de la personne, et pas ce qu'elle a commandé...
    A la fin de la première page, $ok =1 au début et 0 à la fin , sur la 2ème $ok=0 (--> pas d'affichage)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    $pdf = new PDF_Invoice( 'P', 'mm', 'A4' );
    //boucle principale pour générer une page par membre
    do {
        header ('Content-type: text/html; charset=utf-8');
        $pdf->AddPage();
       $pdf->addClientAdresse($row_RS_equipement['sexe']."\n".$row_RS_equipement['prenom']." ".$row_RS_equipement['nom']."\n".$row_RS_equipement['adresse']."\n".$row_RS_equipement['NPA']." ".$row_RS_equipement['localite']);
     
        // remplissage de chaque ligne, par les r&eacute;sultats correpondants
     
        $cols=array( "REFERENCE"    => 23,
                     "DESIGNATION"  => 78,
                     "QUANTITE"     => 22,
                     "P.U. HT"      => 26,
                     "MONTANT H.T." => 30,
                     "TVA"          => 11 );
        $pdf->addCols( $cols);
        $cols=array( "REFERENCE"    => "L",
                     "DESIGNATION"  => "L",
                     "QUANTITE"     => "C",
                     "P.U. HT"      => "R",
                     "MONTANT H.T." => "R",
                     "TVA"          => "C");
        $pdf->addLineFormat( $cols);
        $pdf->addLineFormat($cols);
     
        $y    = 109;
     
    // 2ème boucle (imbriquée dans la 1ère) qui affiche la commande par utilisateur
        $ok=1;
     
        do{     
            if (($row_RS_taille['Training_haut'])>0)
            {
                $prix_SR=0;
                $prix_CS=0;
                if (($row_RS_equipement['Desc_cat'])!="Adultes")
                    {
                    $prix_SR="105.00";
                    $prix_CS="35.00";
                    }
                    else
                    {
                    $prix_SR="135.00";
                    $prix_CS="45.00";
                    }
     
                $line = array( "REFERENCE"    => "TEST". $ok."Taille: ".$row_RS_taille['Training_haut'],
                           "DESIGNATION"  =>  "Training haut",
                           "QUANTITE"     => "1",       
                           "P.U. HT"      => $prix_SR,
                           "MONTANT H.T." => $prix_CS,
                           //"P.U. HT"      => "105.00",
                           //"MONTANT H.T." => "25.00",
                           "TVA"          => "1" );               
                $size = $pdf->addLine( $y, $line );
                $y   += $size + 2;
     
            }
            if($row_RS_taille['No_sequence']==$row_RS_equipement['No_sequence']){$ok=1;}else{$ok=0;}   
     
            if (($row_RS_taille['Training_bas'])>0)
            {
                $prix_SR=0;
                $prix_CS=0;
                if (($row_RS_equipement['Desc_cat'])!="Adultes")
                    {
                    $prix_SR="105.00";
                    $prix_CS="35.00";
                    }
                    else
                    {
                    $prix_SR="135.00";
                    $prix_CS="45.00";
                    }
                $line = array( "REFERENCE"    => "TEST". $ok."Taille: ".$row_RS_taille['Training_bas'],
                           "DESIGNATION"  => "Training bas",
                           "QUANTITE"     => "1",
                           "P.U. HT"      => $prix_SR,
                           "MONTANT H.T." => $prix_CS,
                           "TVA"          => "1" );
                $size = $pdf->addLine( $y, $line );
                $y   += $size + 2;
            }
            //ajout d'une ligne de test pour afficher la valeur de la variable $ok
                $line = array( "REFERENCE"    => "TEST". $ok,
                           "DESIGNATION"  => "TEST". $ok,
                           "QUANTITE"     => "TEST". $ok,
                           "P.U. HT"      => "TEST". $ok,
                           "MONTANT H.T." => "TEST". $ok,
                           "TVA"          => "1" );
                $size = $pdf->addLine( $y, $line );
                $y   += $size + 2;
     
     
            } while ($row_RS_taille = mysql_fetch_assoc($RS_taille)&&($ok==1));
     
     
     
        $pdf->addCadreTVAs();
     
     
        }
        while ($row_RS_equipement = mysql_fetch_assoc($RS_equipement));
    $pdf->Output();
    Où est l'astuce?

    merci de votre aide!!!

  2. #2
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    je ne suis pas certain d'avoir compris ta question.
    mais je dirais ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    do {
      do {
    ...
      if($row_RS_taille['No_sequence']==$row_RS_equipement['No_sequence'])  {
              $ok=1;
      } else {
              $ok=0;
      }   
    ...
      } while ($row_RS_taille = mysql_fetch_assoc($RS_taille)&&($ok==1));
    } while ...
    Ensuite les condition pour le positionnement de ok sont à adapter à ton cas si elle ne te conviennent pas.

  3. #3
    Membre averti
    Inscrit en
    Septembre 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 11
    Par défaut
    Hum, c'est bien ce que je fais il me semble... ou alors j'ai besoin de lunettes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    do {
    header ('Content-type: text/html; charset=utf-8');
    $pdf->AddPage();
    $pdf->Image('logo_csm.jpg',10,8,33);
    $pdf->fact_dev( "Facture ", $row_RS_equipement['No_sequence'] );
    $pdf->temporaire( "Facture ".$str."quipement" );
    $pdf->addDate( $today);
    $pdf->addPageNumber("1");
    $pdf->addClientAdresse($row_RS_equipement['sexe']."\n".$row_RS_equipement['prenom']." ".$row_RS_equipement['nom']."\n".$row_RS_equipement['adresse']."\n".$row_RS_equipement['NPA']." ".$row_RS_equipement['localite']);
    $pdf->addReglement("Paiement comptant");
     
    // remplissage de chaque ligne, par les résultats correpondants 
     
    $cols=array( "REFERENCE"    => 23,
                 "DESIGNATION"  => 78,
                 "QUANTITE"     => 22,
                 "P.U. HT"      => 26,
                 "MONTANT H.T." => 30,
                 "TVA"          => 11 );
    $pdf->addCols( $cols);
    $cols=array( "REFERENCE"    => "L",
                 "DESIGNATION"  => "L",
                 "QUANTITE"     => "C",
                 "P.U. HT"      => "R",
                 "MONTANT H.T." => "R",
                 "TVA"          => "C");
    $pdf->addLineFormat( $cols);
    $pdf->addLineFormat($cols);
     
    $y    = 109;
    $prix_TOT=0;
    $prix_TOTAL=0;
    $ok=1;
     
    	do
    	{
     
    if (($row_RS_taille['Training_haut'])>0)  {
     
    	$prix_SR=0;
    	$prix_CS=0;
    	if (($row_RS_equipement['Desc_cat'])!="Adultes") 
    		{
    		$prix_SR="105.00";
    		$prix_CS="35.00";
    		}
    		else
    		{
    		$prix_SR="135.00";
    		$prix_CS="45.00";
    		}
    			$prix_TOT=$prix_CS + $prix_TOT;	
    			$prix_TOTAL=$prix_SR + $prix_TOTAL;	
    	$line = array( "REFERENCE"    => "Taille: ".$row_RS_taille['Training_haut'],
                   "DESIGNATION"  =>  "Training haut",
                   "QUANTITE"     => "1",	   
    			   "P.U. HT"      => $prix_SR,
    			   "MONTANT H.T." => $prix_CS,
    			   "TVA"          => "1" );               
    $size = $pdf->addLine( $y, $line );
    $y   += $size + 2;
     
    	}	
     if($row_RS_taille['No_sequence']==$row_RS_equipement['No_sequence']){$ok=1;}else{$ok=0;}
    $pdf->addCadreTVAs();
     
    $tot_prods = array( array ( "px_unit" => $prix_TOTAL, "qte" => 0, "tva" => 1 ),
                       array ( "px_unit" =>  $prix_TOT, "qte" => 1, "tva" => 1 ));
     
     
    $tab_tva = array( "1"       => 0,
                      "2"       => 0);
    $params  = array( "RemiseGlobale" => 0,
                         "remise_tva"     => 1,       // {la remise s'applique sur ce code TVA}
                         "remise"         => 0,       // {montant de la remise}
                         "remise_percent" => 0,      // {pourcentage de remise sur ce montant de TVA}
                      "FraisPort"     => 0,
                          "portTTC"        => 0,      // montant des frais de ports TTC
                                                       // par defaut la TVA = 19.6 %
                          "portHT"         => 0,       // montant des frais de ports HT
                          "portTVA"        => 0,    // valeur de la TVA a appliquer sur le montant HT
                     "AccompteExige" => 0,
                         "accompte"         => 0,     // montant de l'acompte (TTC)
                         "accompte_percent" => 0,    // pourcentage d'acompte (TTC)
                      "Remarque" => "A payer comptant lors de la distribution des ".$str."quipements" );
     
    $pdf->addTVAs( $params, $tab_tva, $tot_prods);
    $pdf->addCadreEurosFrancs(); 
     
     } while ($row_RS_taille = mysql_fetch_assoc($RS_taille)&&($ok==1));
     
    } while ($row_RS_equipement = mysql_fetch_assoc($RS_equipement));
     
    $pdf->Output();
    et le résultat est tjrs le même. Mon PDf est généré, ma 1ère page a les bonnes valeurs (données du membre + ce qu'il a commandé), mais la 2ème n'affiche que les données du membre, pas sa commande (le tableau est vide)...

Discussions similaires

  1. [MySQL] Problème while imbriqués
    Par MrSoul dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 18/10/2012, 03h17
  2. Plusieurs while imbriqués
    Par fedexpress dans le forum Langage
    Réponses: 2
    Dernier message: 15/10/2009, 14h36
  3. do while imbriqués avec pointeurs :)
    Par PapyFouras dans le forum Langage
    Réponses: 3
    Dernier message: 17/07/2008, 14h27
  4. [MySQL] Plusieurs while imbriqués pour expoitation de résultats
    Par jojo57 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 20/03/2008, 14h01
  5. [Débutant] Question sur deux while imbriqués
    Par beegees dans le forum Langage
    Réponses: 2
    Dernier message: 01/01/2007, 20h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo