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 :

Plusieurs 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
    Novembre 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 29
    Par défaut Plusieurs while imbriqués
    Bonjour,

    Le problème que j'ai est que le 1er while ne termine pas sa boucle.

    Le 2ème while parcourt tout le tableau.

    Quand j'exécute chaque boucle à part, tout se passe sans problème. Mais dès que je mets des while imbriqués, le 1er ne fait le 1er ne donne que le 1er enregistrement alors que le 2ème parcourt tous les enregistrements.

    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
     
            $arraybcp = array();
     
    	$arraybcpnew = array();
     
    	$querybcp = "SELECT * FROM chainbcp order by codeart";
     
    	$resultbcp = mysql_query($querybcp);
     
    	$querybcpnewall = "SELECT * FROM chainbcpnew order by codeart";
     
    	$resultbcpnewall = mysql_query($querybcpnewall);
     
    	while ($rowbcp = mysql_fetch_array($resultbcp)) {
     
    		while ($rowbcpnewall = mysql_fetch_array($resultbcpnewall)) {
     
    			if ($rowbcp['codeart'] == $rowbcpnewall['codeart']) {
     
    				$arraybcp[$i][0] = $rowbcp['codeart'];
     
    				$arraybcp[$i][1] = $rowbcp['typeart'];
     
    				$a = $rowbcp['codeart'];
     
    				echo "<font color='#ff0000'>".$rowbcp['codeart']."&nbsp;".$rowbcp['mvt']."&nbsp;".$rowbcpnewall['codeart']."&nbsp;".$rowbcpnewall['mvt']."</font>"."</br>";
     
    				$i++;
     
    			} else {
     
    				echo "<font color='#00ff00'>".$rowbcp['codeart']."&nbsp;".$rowbcp['mvt']."&nbsp;".$rowbcpnewall['codeart']."&nbsp;".$rowbcpnewall['mvt']."</font>"."</br>";
     
    			}
     
    		}
     
     
    	}
    Merci de votre assistance.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 59
    Par défaut
    Bonjour,

    Au premier tour de la boucle, ta requête $resultbcpnewall se "déverse" dans $rowbcpnewall. Au deuxième tour, elle ne contient donc plus tes résultats.

    Deux solutions:
    - Soit mettre ta deuxième requête à l'intérieur de ta première boucle, ainsi elle se régénérera à chaque tour de la première. L'inconvénient est que ça surcharge le nombre de requêtes inutilement.
    - Soit enregistrer les résultats de ta requête dans des tableaux temporaires et effectuer les boucles sur ces tableaux, ce qui me semble être le mieux. Exemple:
    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
     
            $arraybcp = array(); 
    	$arraybcpnew = array();
     
    	$querybcp = "SELECT * FROM chainbcp order by codeart"; 
    	$resultbcp = mysql_query($querybcp);
    	while ($rowbcp = mysql_fetch_array($resultbcp)) {
    		$arraybcp[] = $rowbcp;
    	}
     
    	$querybcpnewall = "SELECT * FROM chainbcpnew order by codeart";
    	$resultbcpnewall = mysql_query($querybcpnewall);
    	while ($rowbcpnewall = mysql_fetch_array($resultbcpnewall)) {
    		$arraybcpnew[] = $rowbcpnewall;
    	}
     
    	for ( $i = 0; $i < count ( $arraybcp ); $i ++ ){
    		for ( $j = 0; $j < count ( $arraybcpnew ); $j ++ ){
    			if ( $arraybcp[$i]['codeart'] == $arraybcpnew[$j]['codeart'] ){
    				echo "<font color='#ff0000'>".$arraybcp[$i]['codeart']."&nbsp;".$arraybcp[$i]['mvt']."&nbsp;".$arraybcpnew[$j]['codeart']."&nbsp;".$arraybcpnew[$j]['mvt']."</font>"."</br>";
    			}else{ 
    				echo "<font color='#00ff00'>".$arraybcp[$i]['codeart']."&nbsp;".$arraybcp[$i]['mvt']."&nbsp;".$arraybcpnew[$j]['codeart']."&nbsp;".$arraybcpnew[$j]['mvt']."</font>"."</br>";
    			}
    		}	
    	}
    J'ai enlevé les autres variables pour simplifier un peu.

  3. #3
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 29
    Par défaut
    Ok, merci pour ta réponse

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. do while imbriqués avec pointeurs :)
    Par PapyFouras dans le forum Langage
    Réponses: 3
    Dernier message: 17/07/2008, 15h27
  2. [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, 15h01
  3. [Débutant] Question sur deux while imbriqués
    Par beegees dans le forum Langage
    Réponses: 2
    Dernier message: 01/01/2007, 21h05
  4. Plusieurs strtok imbriqués
    Par HaTnuX dans le forum C
    Réponses: 7
    Dernier message: 10/12/2006, 16h02
  5. [excel] Plusieurs if imbriqués
    Par steps5ive dans le forum Access
    Réponses: 2
    Dernier message: 08/11/2005, 19h25

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