faire un break sur un while possible?

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : faire un break sur un while possible?

Re: faire un break sur un while possible?

par devmaster31 » 08 nov. 2013, 12:53

Salut ,

je reviens vers toi, pour te dire que ça fonctionne à merveille!!!!!!!!!!!!!!!!!!!!!


merci infiniment...

bravo à phpfrance!

Re: faire un break sur un while possible?

par yann18 » 28 oct. 2013, 17:15

<?php

// on trie les données par scatgegirie
$qcom="select c.id,c.idcontrat,c.revue,c.idcat,c.idscat,c.montant,c.avance,c.commissions,c.taux_verse,s.codif,s.scategorie from commissions c, scategorie s where c.idcourtier='$idcol' $qidscat and s.codif=c.revue order by s.scategorie,c.idcontrat ASC";

                        $rescom1=execute_sql($qcom);
                        $compte=mysql_num_rows($rescom1);
                        if($compte==0)
                        {
                                echo "Acune commission pour ce courtier trouvée";
                        }
                        else
                        {
                         $revue_precedente='';
                        while($row=mysql_fetch_array($rescom1))
                         {     
                          $idcom=$row['id'];
                          $idcontrat=$row['idcontrat'];
                          $revue=$row['revue'];
                          $idcat=$row['idcat'];
                          $idscat=$row['idscat'];
                          $proposition=$row['montant'];
                          $montant_comvalider=$proposition;
                          $avance=$row['avance'];
                          $commissions=$row['commissions'];
                          $taux_verse=$row['taux_verse'];
                  //  $nomrevue=$row['scategorie'];
            
                       
                         
                                if($row['scategorie'] != $revue_precedente){
                         $nomrevue=$row['scategorie'];
                         echo "<h2>$nomrevue</h2>";//on affiche une seule scategorie
                        $revue_precedente=$row['scategorie'];            
                }
                                               
              // JE VOUDRAI QUE ECHO $nomrevue, ne s'affiche qu'une fois
echo  " $idcom <br>, $revue <br>, $proposition <br>";//
// } FIN DU WHILE
                                
?>

et ça donne quoi?

Re: faire un break sur un while possible?

par devmaster31 » 28 oct. 2013, 16:43

Salut voila le code ci dessous :
// ON VERIFI SI Y A PA DE PAIEMENT VERSER
$qcom="select c.id,c.idcontrat,c.revue,c.idcat,c.idscat,c.montant,c.avance,c.commissions,c.taux_verse,s.codif,s.scategorie from commissions c, scategorie s where c.idcourtier='$idcol' $qidscat and s.codif=c.revue order by c.idscat,c.idcontrat ASC";

			$rescom1=execute_sql($qcom);
			$compte=mysql_num_rows($rescom1);
			if($compte==0)
			{
				echo "Acune commission pour ce courtier trouvée";
			}
			else
			{
			while($row=mysql_fetch_array($rescom1))
			 {	
			  $idcom=$row['id'];
			  $idcontrat=$row['idcontrat'];
			  $revue=$row['revue'];
			  $idcat=$row['idcat'];
			  $idscat=$row['idscat'];
			  $proposition=$row['montant'];
			  $montant_comvalider=$proposition;
			  $avance=$row['avance'];
			  $commissions=$row['commissions'];
			  $taux_verse=$row['taux_verse'];
		  //  $nomrevue=$row['scategorie'];
              $revue_precedente=''; 
			
			 
				if($row['scategorie'] != $revue_precedente){ 
                         $nomrevue=$row['scategorie'];
                         echo $nomrevue;// EXEMPLE ICI j'en ai 3 et il s'affiche 3 fois et je voudrai qu'il s'affiche une seul fois...
                        $revue_precedente=$row['scategorie'];             
                }
						
              // JE VOUDRAI QUE ECHO $nomrevue, ne s'affiche qu'une fois
echo "$row de taux etc.."
// } FIN DU WHILE
				
merci

Re: faire un break sur un while possible?

par yann18 » 28 oct. 2013, 16:24

approche 1:
désolé j'avais du oublier d'ordonner les revues par catégorie.pour ce faire il suffit juste d'ajouter order by scategorie comme ci-dessous:

<?php
$sql="SELECT toto.id, toto.idcontrat, toto.revue , scategorie.codif
FROM  toto
INNER JOIN scategorie
ON toto.revue=scategorie.codif ORDER BY scategorie";

                 $resrevue=execute_sql($sql);
                $revue_precedente='';
                 while($row=mysql_fetch_array($resrevue)){

                 if($row['scategorie'] != $revue_precedente){
                         //$nomrevue=$row['scategorie'];
                         echo '<h2>', $row['scategorie'],'</h2>';
                        $revue_precedente=$row['scategorie']             
                }

          echo '<br>',$row['idcontrat'];

   }
?>







approche 2:
En revanche si tu as du mal à intégrer l'approche précédente dans ton code, je te suggère une approche différente où t'auras pas besoin de modifier ton code.elle consiste à mettre dans un tableau à 2 dimension les idcontrat comme élément du tableau et $scategorie sera une clé de chacun de éléments du tableau.tu n'auras plus qu'à parcourir avec 2 boucles foreach le tableau à 2 dimensions
<?php
// RECUP TABLE TOTO rapide
$q="requete classic toto";
execute_sql();
// LE WHILE
while($row=mysql_fetch_array($rescom1))
                         {     
                          $idcom=$row['id'];
                          $idcontrat=$row['idcontrat'];
                          $revue=$row['revue'];

// RECUP SOUS CATEGORIE
qrevue="select * from scategorie where codif='$revue'";
                 $resrevue=execute_sql($qrevue);
                 while($row=mysql_fetch_array($resrevue)){
                        // $nomrevue=$row['scategorie'];
			 $tabRevue[$row['scategorie']][] =$idcontrat;
// AFFICHAGE CATOGORIE ET LISTE IDCONTRAT
//echo "$nomrevue<br>";
//echo "$idcontrat";


}//while2
}//end while1
//on sort de la boucle while principale(1) pour afficher 
// AFFICHAGE CATOGORIE ET LISTE IDCONTRAT
foreach ($tabRevue as $cle=>$value){
                echo "<h2> catégorie : $cle </h2>"; //$cle correspond à $scategorie
                foreach ($value as $key => $idcontrat) {
                  echo " $idcontrat <br>";
                }
              }
 
je te suggère de commencer d'abord par l'appoche 2 pour ne pas avoir à modifier ton code puis une fois réussi tu peux regarder l'approche 1.

Re: faire un break sur un while possible?

par yann18 » 22 oct. 2013, 11:25

comment tu ferais cette conditions du coup?

car j'essayé en faisant

if(!$nonrevue)
echo affichage

mais ca mafiche rien.

merci
sans code je n'ai aucune idée de comment tu effectues le teste .

Re: faire un break sur un while possible?

par devmaster31 » 21 oct. 2013, 20:37

comment tu ferais cette conditions du coup?

car j'essayé en faisant

if(!$nonrevue)
echo affichage

mais ca mafiche rien.

merci

Re: faire un break sur un while possible?

par yann18 » 21 oct. 2013, 16:17

en gros si revue est différent on affiche pour afficher seulement une foi la revue?
bien sûr que oui.en effet si la revue est la même on ne rentrera jamais dans le if et dans ce cas c'est la revue précédemment affichée qui sera ré-affichée. Dans tous les cas on affiche le reste des données(idcontrat) et on avance.

Re: faire un break sur un while possible?

par devmaster31 » 21 oct. 2013, 15:55

Salut merci pour t'a réponse,

Le problème j'ai beaucoup de condition (if) else avant pour l'affichage il y a t'il pas moyen de faire autrement?
EXEMPLE 
// si revue est afficher on affiche pas l'autre (la meme) mais on continu la liste...
if(!$nomrevue)
echo on affiche
else
{
on affiche pa
}
en gros si revue est différent on affiche pour afficher seulement une foi la revue?
MERCI de t'on aide...

Re: faire un break sur un while possible?

par yann18 » 21 oct. 2013, 15:46

bonjour,

tout d'abord ,tu peux afficher tes données à l'aide d'une seule requête(requête avec jointure).Pour afficher par revue, il faut comparer la revue en cours à la revue précédente.ça doit ressembler à quelque chose de ce genre:

$sql="SELECT toto.id, toto.idcontrat, toto.revue , scategorie.codif
FROM  toto
INNER JOIN scategorie
ON toto.revue=scategorie.codif";

                 $resrevue=execute_sql($sql);
   		$revue_precedente=''; 
                 while($row=mysql_fetch_array($resrevue)){

		 if($row['scategorie'] != $revue_precedente){ 
                         //$nomrevue=$row['scategorie'];
			 echo '<h2>', $row['scategorie'],'</h2>';
			$revue_precedente=$row['scategorie']		 
		}

  	  echo '<br>',$row['idcontrat'];

   }


faire un break sur un while possible?

par devmaster31 » 21 oct. 2013, 14:49

Bonjour, :roll: :(

J'arrive à un probleme d'affichage de requette ou de conditions

Voila, j'utilise un while() pour recuperer plusieur colone d'une table "toto"
et dans l'une des colonnes de la table toto j'ai un idrevue (par exemple) que je récupére pour allez chercher le nom de la "revue 'xxx"" soit l'idscategorie dans l'exemple ci-dessous.
Je voudrais afficher qu'une seul fois la sous catégorie associé aux idcontrat voir ci dessous exemple
// RECUP TABLE TOTO rapide
$q="requete classic toto";
execute_sql();
// LE WHILE
while($row=mysql_fetch_array($rescom1))
			 {	
			  $idcom=$row['id'];
			  $idcontrat=$row['idcontrat'];
			  $revue=$row['revue'];

// RECUP SOUS CATEGORIE
qrevue="select * from scategorie where codif='$revue'";
		 $resrevue=execute_sql($qrevue);
		 while($row=mysql_fetch_array($resrevue)){
			 $nomrevue=$row['scategorie'];
// AFFICHAGE CATOGORIE ET LISTE IDCONTRAT
echo "$nomrevue<br>";
echo "$idcontrat";


}
}
Voila je voudrai afficher qu'une seul fois $nomrevue et en dessous la liste idcontrat associé exemple:
1-nom revue
>>>>liste idcontrat1
>>>>liste idcontrat2
>>>>liste idcontrat3
>>>>liste idcontrat4
2-nom revue2
>>>>liste idcontrat1
>>>>liste idcontrat2
>>>>liste idcontrat3
>>>>liste idcontrat4
etc...
Actuellement sa m'affiche :
1-nom revue
>>>>liste idcontrat1
1-nom revue
>>>>liste idcontrat2
1-nom revue
>>>>liste idcontrat3
2-nom revue2
>>>>liste idcontrat1
2-nom revue2
>>>>liste idcontrat2

MERCI pour votre aide et surtout, j'espère que vous m'avez compris xD.
je pensé avoir la solution en faisant if(!$nomrevue) en gros si la nom revue est différente on affiche donc du coup ça aurait du afficher qu'une fois mais ça fonctionne pas....