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

PHP & Base de données Discussion :

probleme affichage dans un tableau avec double requetes


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    108
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 108
    Points : 47
    Points
    47
    Par défaut probleme affichage dans un tableau avec double requetes
    salut j'ai du utiliser 2 mysql_fetch_assoc dans une seule boucle et ceux ci a entrainé des problèmes niveau affichage de mes enregistrements (la boucle s'est arrêté dés le 3ème enregistrement!!)
    voici mes 2 requêtes qui sont tous les 2 fonctionnelles sous phpmyadmin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    //requete permettant d'afficher toutes les types matières premières
    $requete_gen="select * from type_matiere_premiere,matiere_premiere where type_matiere_premiere.code_mat_pre=matiere_premiere.code_mat_pre";
          $result1=mysql_query($requete_gen)OR die(mysql_error());
    celle ci va dépendre d'une variable globale de session n_cat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $requete_consom="select * from article,consommer,type_matiere_premiere,categorie,entree_stock where        
     entree_stock.code_typ_mat_pre=type_matiere_premiere.code_typ_mat_pre and article.n_cat=categorie.n_cat and article.n_art=consommer.n_art and consommer.code_typ_mat_pre=type_matiere_premiere.code_typ_mat_pre and categorie.n_cat='$n_cat'";  
             $result2=mysql_query($requete_consom)OR die(mysql_error());
    voici ma requête qui est la source du problème (regarder image2 et ce que elle m'a permis d'obtenir)
    1.
    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
       while($ligne1=mysql_fetch_assoc($result1) and ($ligne2=mysql_fetch_assoc($result2)))
             {
             echo'<tr><td>'.$ligne1["des_typ_mat_pre"].'</td>';
                        if($ligne1['code_typ_mat_pre']==$ligne2['code_typ_mat_pre'])
                  {
    // j'ai mis uniquement "pr_ttc pour tester mais je devrais en effet afficher plusieurs case de tableaux dans cette ligne si la condition est vérifié(image1)
                  echo'<td>'.$ligne2["pr_ttc"].'</td></tr>';
                  }
                  else
                  {
                  echo"<td>0</td></tr>";
                  }
            }
            mysql_close();
         ?>
    en effet je voudrai obtenir quelque chose qui ressemble approximativement à l'image 1
    merci pour votre aide

  2. #2
    Membre expérimenté Avatar de riete
    Homme Profil pro
    DevWeb - Oléiculteur
    Inscrit en
    Avril 2006
    Messages
    1 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : DevWeb - Oléiculteur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 193
    Points : 1 414
    Points
    1 414
    Par défaut
    La méthode me surprends mais ...

    Par contre compte tenu du fait que tu as un AND dans le while, si un des 2 fetch return false le while s'arrête.

    As tu le même nombre de résultat dans les 2 requêtes ?
    ----
    L'avenir appartient à ceux dont les salariés se lèvent tôt.

  3. #3
    Membre du Club
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    108
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 108
    Points : 47
    Points
    47
    Par défaut
    Citation Envoyé par riete Voir le message
    La méthode me surprends mais ...

    Par contre compte tenu du fait que tu as un AND dans le while, si un des 2 fetch return false le while s'arrête.

    As tu le même nombre de résultat dans les 2 requêtes ?
    à vrai dire non! comme je vous ai dis la première colonne devra afficher tout type_matiere_premiere.des_typ_mat_pre dans ma base alors les autres colonne vont dépendre de ma deuxième requête et sa variable globale ....pouvez vous me proposez une nouvelle méthode???
    merci!!

  4. #4
    Inscrit
    Avatar de Caerbannog
    Inscrit en
    Novembre 2004
    Messages
    206
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 206
    Points : 273
    Points
    273
    Par défaut
    C'est un peu dur à comprendre ce que tu veux faire, tu pourrais expliquer simplement ?

  5. #5
    Membre du Club
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    108
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 108
    Points : 47
    Points
    47
    Par défaut
    Citation Envoyé par Caerbannog Voir le message
    C'est un peu dur à comprendre ce que tu veux faire, tu pourrais expliquer simplement ?
    j'ai besoin d'un double affichage dans mon tableau dans la première colonne je voudrais afficher tout mes enregistrement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    type_matiere_premiere.des_typ_mat_pre
    dans les autres colonne ceci va dépendre de ma variable globale si il y a une jointure est que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    type_matiere_premiere.code_typ_mat_pre
    qui convient à ma première colonne est égal à type_matiere_premiere.code_typ_mat_pre de ma requête en cours celle de la variable globale $n_cat tel que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($ligne1['code_typ_mat_pre']==$ligne2['code_typ_mat_pre'])
    est vérifié je voudrais afficher tout ce qui lui est convient dans ma requête2 tel que quelque chose lui ressemble dans mon image1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $requete_consom="select * from article,consommer,type_matiere_premiere,categorie,entree_stock where        
     entree_stock.code_typ_mat_pre=type_matiere_premiere.code_typ_mat_pre and article.n_cat=categorie.n_cat and article.n_art=consommer.n_art and consommer.code_typ_mat_pre=type_matiere_premiere.code_typ_mat_pre and categorie.n_cat='$n_cat'";
    et j'ai donné un exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo'<td>'.$ligne2["pr_ttc"].'</td></tr>';
    sinon je voudrais afficher des "0".
    voici quelques structures de mes tables concerné
    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
    #
    # Structure de la table `type_matiere_premiere`
    #
     
    CREATE TABLE type_matiere_premiere (
      code_typ_mat_pre int(20) NOT NULL auto_increment,
      code_mat_pre varchar(20) NOT NULL default '',
      couleur varchar(20) NOT NULL default '',
      des_typ_mat_pre varchar(20) NOT NULL default '',
      code_four varchar(20) NOT NULL default '',
      PRIMARY KEY  (code_typ_mat_pre)
    ) TYPE=MyISAM;
    #
    # Structure de la table `consommer`
    #
    CREATE TABLE consommer (
      qte_mat_pre varchar(20) NOT NULL default '',
      code_typ_mat_pre varchar(20) NOT NULL default '',
      n_art varchar(20) NOT NULL default '',
      PRIMARY KEY  (code_typ_mat_pre,n_art)
    ) TYPE=MyISAM;
    #
    # Structure de la table `entree_stock`
    #
    CREATE TABLE entree_stock (
      code_stock int(20) NOT NULL auto_increment,
      code_typ_mat_pre int(20) NOT NULL default '0',
      pr_ttc float NOT NULL default '0',
      qte_stock float NOT NULL default '0',
      PRIMARY KEY  (code_stock,code_typ_mat_pre)
    ) TYPE=MyISAM;
    #
    # Structure de la table `article`
    #
    CREATE TABLE article (
      n_art int(20) NOT NULL auto_increment,
      lib_art varchar(20) NOT NULL default '',
      prof_art varchar(20) NOT NULL default '',
      long_art varchar(20) NOT NULL default '',
      larg_art varchar(20) NOT NULL default '',
      haut_art varchar(20) NOT NULL default '',
      tum_art varchar(20) NOT NULL default '',
      tmc_art varchar(20) NOT NULL default '',
      n_clt varchar(20) NOT NULL default '',
      n_bon_liv varchar(20) NOT NULL default '',
      remise_art varchar(20) NOT NULL default '',
      n_cat varchar(20) NOT NULL default '',
      qte_art varchar(20) NOT NULL default '',
      PRIMARY KEY  (n_art,n_clt,n_bon_liv,n_cat)
    ) TYPE=MyISAM;
    ceci est dis ma requete est fonctionnel est aucun problème avec elle j'ai vérifié avec le phpmyadmin
    merci!

  6. #6
    Membre expérimenté Avatar de riete
    Homme Profil pro
    DevWeb - Oléiculteur
    Inscrit en
    Avril 2006
    Messages
    1 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : DevWeb - Oléiculteur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 193
    Points : 1 414
    Points
    1 414
    Par défaut
    Je vais essayé de te mettre sur un piste car je n'ai trop le temps de faire mieux.
    Il faut peut être que tu fasses 2 while imbriqués pour parvenir à ton résultat.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while($ligne1=mysql_fetch_assoc($result1){
     while($ligne1=mysql_fetch_assoc($result2){
     
     {
    }
    C'est un point de départ bien sûr. Désolé de ne pas pouvoir t'aider plus. Poste ton nouveau code
    ----
    L'avenir appartient à ceux dont les salariés se lèvent tôt.

  7. #7
    Membre du Club
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    108
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 108
    Points : 47
    Points
    47
    Par défaut
    Citation Envoyé par riete Voir le message
    Je vais essayé de te mettre sur un piste car je n'ai trop le temps de faire mieux.
    Il faut peut être que tu fasses 2 while imbriqués pour parvenir à ton résultat.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while($ligne1=mysql_fetch_assoc($result1){
     while($ligne1=mysql_fetch_assoc($result2){
     
     {
    }
    C'est un point de départ bien sûr. Désolé de ne pas pouvoir t'aider plus. Poste ton nouveau code
    merci en tous cas riete merci pour tous j'ai travaillé donc de 2 façon la première tel que vous avez proposez voici le code
    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
    while($ligne1=mysql_fetch_assoc($result1))
    	 	{
    		  echo'<tr><td>'.$ligne1["des_typ_mat_pre"].'</td>';
    	 while ($ligne2=mysql_fetch_assoc($result2))
    	 {
     
    			if($ligne1['code_typ_mat_pre']==$ligne2['code_typ_mat_pre'])
    				{
    				echo'<td>'.$ligne2["pr_ttc"].'</td></tr>';
    				}
    				else
    				{
    				echo"<td>0</td></tr>";
    				}
    		}
    	}	
    	mysql_close();
    et voici ce que j'ai obtenu regardez image3
    et d'une façon avec le même enchainement des idées que vous m'avez proposez j'ai développé d'une autre façon(regardez image4) et voici le code
    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
    while ($ligne2=mysql_fetch_assoc($result2))
    	 	{
    	 while($ligne1=mysql_fetch_assoc($result1))
    	 {
    	  echo'<tr><td>'.$ligne1["des_typ_mat_pre"].'</td>';
     
    			if($ligne1['code_typ_mat_pre']==$ligne2['code_typ_mat_pre'])
    				{
    				echo'<td>'.$ligne2["pr_ttc"].'</td></tr>';
    				}
    				else
    				{
    				echo"<td>0</td></tr>";
    				}
    		}
    	}	
    	mysql_close();
    en effet celle ci est la plus proche à mon besoin!!!
    le problème comme vous allez le constatez c'est que c'est seulement le premier enregistrement qui va affichez son $ligne2["pr_ttc"] alors que j'en ai plusieurs!!!
    merci je suis redevant pour votre aide et j'en ai vraiment besoin ma soutenance est pour la fin de cette semaine et il s'agit de mon pfe!!
    merci!

  8. #8
    Membre expérimenté Avatar de riete
    Homme Profil pro
    DevWeb - Oléiculteur
    Inscrit en
    Avril 2006
    Messages
    1 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : DevWeb - Oléiculteur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 193
    Points : 1 414
    Points
    1 414
    Par défaut
    Je pense qu'il y a plusieurs détails qui t'échappent roy-mustang. Il faut que tu revois les résultats de tes requêtes dans un premier temps avant d'essayer de les afficher dans une table HTML.

    Il faut bien vérifier que pour chaque produit de la requête 1, tu aies le nombre correspondant de résultat dans ta requête 2. C'est à dire si tu obtiens 25 produits avec la requête 1 et que tu as 10 colonnes d'informations correspondantes, ta requête 2 doit te retourner d'une façon ou d'une autre 250 valeurs.

    Je ne sais pas si je le fais bien comprendre ?

    Je te conseil donc de mettre au point tes requêtes et ensuite de mettre au point les boucles d'affichage simplement en faisant des echo ou de print, et seulement une fois que tu sera certain que cela fonctionne, tu pourra le mettre en forme en HTML. A voir ton code, il me semble que tu as quelques difficultés avec les tables.
    Je te joint un petit code pédagogique
    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
    <?php
    $case = array();
    for( $i=0 ; $i<16 ; $i++) $case[$i] = "c".$i;
     
    print_r($case);
     
    $col = array("A","B","C","D");
     
    $taille_ligne = count($col);
     
    echo "<table border=1>";
     
    // Titre colonne
    echo "<tr><td></td>";
    for( $i=0; $i<$taille_ligne; $i++) echo "<td>".$col[$i]."</td>";
    echo "</tr>";
     
    $c = 0;
     
    for( $ligne = 0 ; $ligne < $taille_ligne; $ligne++ ){
     
    	echo "<tr>";
     
    	echo "<td>ligne".$ligne."</td>";
     
    	for( $i=0; $i<$taille_ligne; $i++){
     
    		echo "<td>".$case[$c]."</td>";
     
    		$c++;
    	}	
     
    	echo "<tr>";
    }
     
    echo "</table>";
    ?>
    ----
    L'avenir appartient à ceux dont les salariés se lèvent tôt.

  9. #9
    Membre du Club
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    108
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 108
    Points : 47
    Points
    47
    Par défaut
    Citation Envoyé par riete Voir le message
    Je pense qu'il y a plusieurs détails qui t'échappent roy-mustang. Il faut que tu revois les résultats de tes requêtes dans un premier temps avant d'essayer de les afficher dans une table HTML.

    Il faut bien vérifier que pour chaque produit de la requête 1, tu aies le nombre correspondant de résultat dans ta requête 2. C'est à dire si tu obtiens 25 produits avec la requête 1 et que tu as 10 colonnes d'informations correspondantes, ta requête 2 doit te retourner d'une façon ou d'une autre 250 valeurs.

    Je ne sais pas si je le fais bien comprendre ?

    Je te conseil donc de mettre au point tes requêtes et ensuite de mettre au point les boucles d'affichage simplement en faisant des echo ou de print, et seulement une fois que tu sera certain que cela fonctionne, tu pourra le mettre en forme en HTML. A voir ton code, il me semble que tu as quelques difficultés avec les tables.
    Je te joint un petit code pédagogique
    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
    <?php
    $case = array();
    for( $i=0 ; $i<16 ; $i++) $case[$i] = "c".$i;
     
    print_r($case);
     
    $col = array("A","B","C","D");
     
    $taille_ligne = count($col);
     
    echo "<table border=1>";
     
    // Titre colonne
    echo "<tr><td></td>";
    for( $i=0; $i<$taille_ligne; $i++) echo "<td>".$col[$i]."</td>";
    echo "</tr>";
     
    $c = 0;
     
    for( $ligne = 0 ; $ligne < $taille_ligne; $ligne++ ){
     
    	echo "<tr>";
     
    	echo "<td>ligne".$ligne."</td>";
     
    	for( $i=0; $i<$taille_ligne; $i++){
     
    		echo "<td>".$case[$c]."</td>";
     
    		$c++;
    	}	
     
    	echo "<tr>";
    }
     
    echo "</table>";
    ?>
    salut riete
    dans le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $col = array("A","B","C","D");
    qu'es ce que je dois y mettre??
    et que doit je mettre dans le c du ??
    et es ce que j'aurais pas du utiliser un $ avec le c???

  10. #10
    Membre expérimenté Avatar de riete
    Homme Profil pro
    DevWeb - Oléiculteur
    Inscrit en
    Avril 2006
    Messages
    1 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : DevWeb - Oléiculteur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 193
    Points : 1 414
    Points
    1 414
    Par défaut
    Roy,

    Pour ta première question:le code
    $col = array("A","B","C","D");
    n'est là que pour montrer un exemple de tableau, car ton code
    $ligne1=mysql_fetch_assoc($result1)
    retourne la variable $ligne qui est un tableau !!

    Pour la deuxième question:
    $case[$i] = "c".$i;
    Si tu as testé le code, tu as du remarquer que le contenu des cases du tableau porte le nom c1, c2, c3 ... voilà le seul but de la lettre 'c'.

    Je te conseil de prendre le temps de bien lire le code et pour mieux comprendre comment il fonctionne, éventuellement de le réduire le plus possible, afin de mieux comprendre ce qu'il s'y passe.
    ----
    L'avenir appartient à ceux dont les salariés se lèvent tôt.

Discussions similaires

  1. [MySQL] Requete avec affichage dans un tableau
    Par runner77 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 22/01/2009, 15h55
  2. [XSLT] probleme d'affichage dans un tableau
    Par Invité dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 05/01/2009, 15h22
  3. [MySQL] affichage des données dans un tableau avec mysql et php
    Par fofina dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 19/10/2007, 14h00
  4. probleme de blanc dans un tableau avec les positionnements en css
    Par rich25200 dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 06/02/2007, 23h50
  5. Probleme affichage dans tableau selon requête
    Par moulette85 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 01/03/2005, 15h44

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