1. #1
    Invité de passage
    Inscrit en
    avril 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : avril 2007
    Messages : 8
    Points : 1
    Points
    1

    Par défaut boucles imbriquées avec requêtes SQL, impossible à comprendre

    Bonjour à tous

    Je suis actuellement désespéré par un problème qui me hante depuis des jours.

    Je recode un nouveau forum mais cette fois ci j'aimerais le faire avec un system template, j'ai choisi Smarty et j'ai trouvé que toute la documentation au niveau des boucles était nul car il n'y en avait pas enfaite.

    j'aimerais savoir faire un affichage des catégories et des forums en boucle imbriquées bien sur mais je ne vois pas du tout comment faire avec les templates et les requete SQL ... je suis totalement perdu.

    j'ai déja fait ceci mais ça ne m'a pas fait grand chose

    Partie .tpl
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    {foreach from=$custid item=curr_id}
    	  {foreach from=$curr_id item=curr_id2}
    	   -> : {$curr_id} | {$curr_id}<br />
    	 ---> : {$curr_id2}<br />
    	  {/foreach}
    {/foreach}
    Partie PHP

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $sql = mysql_query("SELECT * FROM qualif_categorie");
    while($req = mysql_fetch_array($sql))
    {
    	$tpl->append('custid', array( $req['id'], $req['titre']));
     
    	$sqla = mysql_query("SELECT * FROM qualif_forum WHERE categorie = '".$req['id']."'");
    	while( $reqa = mysql_fetch_array($sqla))
    	{
    		$tpl->append('curr_id', array( $reqa['titre']));
    	}
    }
    J'espère que vous pourrez m'aider car la je suis vraiment désespéré.

    Merci d'avance pour votre aide qui m'est précieuse.

    Cordialement dexxter

  2. #2
    Invité de passage
    Inscrit en
    avril 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : avril 2007
    Messages : 8
    Points : 1
    Points
    1

    Par défaut

    J'ai oublié de préciser, j'aimerais juste enfaite que quelqu'un qui maitrise les Template Smarty puisse me donner un exmple simple pour que je puisse comprendre ... Merci beaucoup

  3. #3
    Membre Expert
    Avatar de eric.pommereau
    Homme Profil pro
    Ingénieur, pôle cartographie
    Inscrit en
    décembre 2004
    Messages
    715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur, pôle cartographie
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : décembre 2004
    Messages : 715
    Points : 1 822
    Points
    1 822

    Par défaut

    Peux tu mettre {debug output="html"} dans ta page TPL et nous dire si tes données y figurent bien (éventuellement d'en poster le résultat).

    @+

  4. #4
    Invité de passage
    Inscrit en
    avril 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : avril 2007
    Messages : 8
    Points : 1
    Points
    1

    Par défaut

    Seul la premiere lettre apparai ... enfaite mes codes totalement faut et comme je n'ai aucun exemple c'est se que j'aimerais bien avoir ...

    un simple exemple avec des requete SQL imbriquer

    1° affiche les categorie
    2° affiche les forums appartenant au categorie

    c'est tout se que je demande ...

    Merci beaucoup de votre aide

  5. #5
    Invité de passage
    Inscrit en
    avril 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : avril 2007
    Messages : 8
    Points : 1
    Points
    1

    Par défaut [Smarty] Affichage quand il ne faut pas : boucle imbriquées

    Bonjour à tous

    Pour mon nouveau forum j'ai voulu le faire avec les templates Smarty mais j'ai un petit problème.

    J'ai fait mes deux boucles imbriquées pour l'affichage des catégories et des forums sur l'index mais le problèmes c'est que dans ma requete SQL j'ai bien dit d'afficher QUE les forums appartenant a cette catégorie mais malheureusement tout les forums de la table s'affiche dans TOUTE les catégories

    Voici le code PHP
    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
    $categorie 	= array();
    $forum 		= array();
    $i 			= 0;
    $j 			= 0;
     
    $sql_1 = mysql_query("SELECT * FROM qualif_categorie ORDER BY id ASC");
    while( $cat = mysql_fetch_array( $sql_1 ) )
    {
    	$categorie_donnee = array( 
    						"id"	=> $cat['id'], 
    						"titre" => $cat['titre'] 
    							);
     
    	$categorie[$i++] = $categorie_donnee;
     
    	$sql_2 = mysql_query("SELECT * FROM qualif_forum WHERE categorie = '".$cat['id']."'");
    	while( $for = mysql_fetch_array( $sql_2 ) )
    	{
    		$forum_donnee = array(
    						"id" 	=> $for['id'], 
    						"titre" => $for['titre'] 
    							);
     
    		$forum[$j++] = $forum_donnee;
     
    	}
    }
     
    $tpl->assign("categorie", $categorie);
    $tpl->assign("forum", $forum);

    et voici coté .tpl
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    {section name=categorie loop=$categorie}
    	<a href="lien.php?id={$categorie[categorie].id}">{$categorie[categorie].titre}</a><br />
    		{section name=forum loop=$forum}
    		---><a href="lien2.php?id={$forum[forum].id}">{$forum[forum].titre}</a><br />
    	{/section} 
    {/section}

    et Voici le résultat obtenu
    Catégorie 1
    --->Forum 1
    Catégorie 2
    --->Forum 1
    Catégorie 3
    --->Forum 1
    Alors que ça devrais afficher
    Catégorie 1
    --->Forum 1
    Catégorie 2
    Catégorie 3
    Car le forum 1 appartient a Catégorie 1

    Merci beaucoup de votre aide !

    Merci d'avance

    Cordialement DexteR

  6. #6
    Membre Expert
    Avatar de eric.pommereau
    Homme Profil pro
    Ingénieur, pôle cartographie
    Inscrit en
    décembre 2004
    Messages
    715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur, pôle cartographie
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : décembre 2004
    Messages : 715
    Points : 1 822
    Points
    1 822

    Par défaut

    Bonjour,

    Après avoir regardé ton code il semble que les tableaux 'catégories' et 'forums' sont indépendants l'un de l'autre.

    En effet pour réaliser une boucle imbriquée il te faut impérativement utiliser le même tableau / objet. Il faut récupérer la liste des catégories et pour chaque catégorie faire correspondre les forums.

    Je t'ai fait un petit exemple qui pourra peut être t'aider:

    Le fichier PHP:

    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
    	require_once('../../smarty/Smarty.class.php');
       $oSmarty = new Smarty();
     
       $aBoucle = array();
     
       // Liste des catégories *****************
    	for ($i=0;$i<5;$i++){	
          array_push(
          	$aBoucle,
             array(
             	'Catégorie'. $i,
    				'ID_' . $i,
                array(
                )
             )
          );
     
          // Liste des forums pour chaque catégorie ************
       	for ($j=0;$j<5;$j++) {
          	array_push(
             	$aBoucle[$i][2],
                array(
                	'Forum_' . $i.$j,
                   'ID_' . $j
                )  
             );
          }
       }
     
       // D'abord je vérifie que mes données sont bien dans mon tableau
       //printf('<pre>%s</pre>', print_r($aBoucle,1));
     
       $oSmarty->assign('categories', $aBoucle);
     
    	$oSmarty->display('boucle.tpl');   
    ?>
    Le fichier BOUCLE.TPL

    Code HTML : 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
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
     "http://www.w3.org/TR/html4/loose.dtd">
     
    <html>
    <head>
    <title></title>
    </head>
    <body>
     
    <!-- debogage avec la fonction debug dans le template pour voir si mes données sont bien dans le template --> 
     
    {section name=index loop=$categories}
    	{$categories[index][0]} <br />
       {section name=idx loop=$categories[index][2]}
    	   &nbsp;&nbsp;{$categories[index][2][idx][0]}<br />
       {/section}
    {/section}
     
    </body>
    </html>

    Le résultat:

    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
    Catégorie0
      Forum_00
      Forum_01
      Forum_02
      Forum_03
      Forum_04
    Catégorie1
      Forum_10
      Forum_11
      Forum_12
      Forum_13
      Forum_14
    Catégorie2
      Forum_20
      Forum_21
      Forum_22
      Forum_23
      Forum_24
    Catégorie3
      Forum_30
      Forum_31
      Forum_32
      Forum_33
      Forum_34
    Catégorie4
      Forum_40
      Forum_41
      Forum_42
      Forum_43
      Forum_44
    En éspérant que cela puisse t'aider.

    @+

  7. #7
    Invité de passage
    Inscrit en
    avril 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : avril 2007
    Messages : 8
    Points : 1
    Points
    1

    Par défaut

    C'est bien gentil de me donner un exemple, mais sans etre désagréable c'est pas avec des boucles for que j'utilise, mais des while pour faire mes requete ... c'est avec les requete qu'il me faudrait un exemple car encore maintenant j'ai essayer et j'y arrive pas ... c'est vraiment énerver

    Merci quand meme de votre part pour votre aide !

  8. #8
    Membre Expert
    Avatar de eric.pommereau
    Homme Profil pro
    Ingénieur, pôle cartographie
    Inscrit en
    décembre 2004
    Messages
    715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur, pôle cartographie
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : décembre 2004
    Messages : 715
    Points : 1 822
    Points
    1 822

    Par défaut

    C'était juste un exemple pour montrer le principe...

    Le fait que ce soit avec une boucle 'while' ou 'for' ne change en rien ton affaire, ton problème est de trouver une méthode pour mettre les valeurs dans une structure (tableau ou objet) et les réutiliser dans ton template.

    Ce que j'ai proposé dans l'exemple ci dessus est tout à fait transposable dans ton cas (pour chaque section associer un tableau de valeurs: les forums).

    @+

  9. #9
    Membre chevronné Avatar de Hervé Saladin
    Développeur Web
    Inscrit en
    décembre 2004
    Messages
    634
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : décembre 2004
    Messages : 634
    Points : 734
    Points
    734

    Par défaut

    Citation Envoyé par dexxter
    j'ai choisi Smarty et j'ai trouvé que toute la documentation au niveau des boucles était nul car il n'y en avait pas enfaite
    Ah bon ? Moi je trouve, au contraire, que la doc de Smarty est tout à fait correcte, c'est même une des raisons pour lesquelles j'ai choisi ce moteur pour plusieurs projets.
    Les boucles {foreach} et {section} sont bien décrites dans la doc que j'ai (chopée sur le site de smarty).
    Citation Envoyé par dexxter
    sans etre désagréable c'est pas avec des boucles for que j'utilise, mais des while pour faire mes requete ...
    Sans vouloir être désagréable, si tu n'arrives pas a faire la correspondance entre une boucle for aussi simple et une boucle while, tu devrais peut être d'abord acquérir les bases minimum d'algorithmique avant de te plonger dans Smarty.

    Je crois que ton problème vient en partie du fait que tu confonds les boucles qui te servent à parcourir le résultat de ta requête (PHP) et celles qui te servent à l'afficher (Smarty).
    Coté Smarty, des boucles imbriquées n'ont de sens que si tu parcoure un tableau à deux dimensions au moins ...

    Voici la façon de procéder :
    - 1 : tu exécutes tes requêtes SQL
    - 2 : tu construit un tableau à deux dimensions qui contient tes forums regroupés par catégories
    - 3 : dans ton template smarty, tu parcoure le tableau construit au 2

    Exemple :
    Coté PHP :
    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
    $categories = array();
     
    $sql_1 = mysql_query("SELECT * FROM qualif_categorie ORDER BY id ASC");
    while($cat = mysql_fetch_array($sql_1) )
    {
    	$uneCategorie = array();
    	$uneCategorie['id'] = $cat['id'];
    	$uneCategorie['titre'] = $cat['titre'];
     
    	$sql_2 = mysql_query("SELECT * FROM qualif_forum WHERE categorie = '".$cat['id']."'");
     
    	$forumsCategorie = array();
     
    	while($for = mysql_fetch_array($sql_2) )
    	{
    		$unForum = array();
    		$unForum['id'] = $for['id'];
    		$unForum['titre'] = $for['titre'];
     
    		array_push($forumsCategorie,$unForum);
    	}
     
    	$uneCategorie['forums'] = $forumsCategorie;
     
    	array_push($categories,$uneCategorie);
    }
     
    $tpl->assign("categories", $categories);

    Puis, le template Smarty Correspondant :
    Code HTML : 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
    {foreach from=$categories item=uneCategorie}
     
    	<a href="pageCategorie.php?idCateg={$uneCategorie.id}">
    		{$uneCategorie.titre}
    	</a>
     
    	{foreach from=$uneCategorie.forums item=unForum}
     
    		<a href="pageForum.php?idForum={$unForum.id}">
    			{$unForum.titre}
    		</a>
     
    	{foreachelse}
    		Il n'y a aucun forum dans cette catégorie !
    	{/foreach}
     
    {foreachelse}
    	Aucune catégorie n'est définie !
    {/foreach}

    Franchement, là j'ai fait tout le boulot à ta place, alors tu devrais y arriver !

  10. #10
    Invité
    Invité(e)

    Par défaut

    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
    <?php
    require_once('common.php');
    require_once('header.php');															
     
    // Affichons les 5 derniers folders pour chaque categorie.
     
    $sql_newest = $db->sql_query("SELECT cat_id, cat_name FROM categories ORDER BY cat_name"); // Récupérons les différentes catégories.
     
    $categories_listing = array(); // On initialise un tableau.
     
    while($categorie_listing = $db->sql_fetchrow($sql_newest))
    {
     
    	$oneCategorie = array();
    	$oneCategorie['cat_id'] = $categorie_listing['cat_id'];
    	$oneCategorie['cat_name'] = $categorie_listing['cat_name'];
     
    	// Listons les fichiers.
     
    	$sql_listing = $db->sql_query("SELECT sub_id, cat_id, sub_name, sub_img 
    		FROM sub_categories 
    		WHERE cat_id=".$categorie_listing['cat_id']." 
    		AND sub_status=1 
    		ORDER BY sub_date 
    		DESC LIMIT 5");
     
    	$foldersCategorie = array();
     
    	while($folder = $db->sql_fetchrow($sql_listing)){
     
    		// Comptons le nombre d'entrées.
     
    		$sql_count = $db->sql_query("SELECT COUNT(*) AS total 
    			FROM videos 
    			WHERE sub_id=".$folder['sub_id']);
     
    		$count = $db->sql_fetchrow($sql_count);
     
    		$oneFolder = array();
    		$oneFolder['sub_id'] = $folder['sub_id'];
    		$oneFolder['sub_name'] = $folder['sub_name'];
    		$oneFolder['sub_img'] = $folder['sub_img'];
    		$oneFolder['total'] = $count['total'];
     
    		array_push($foldersCategorie,$oneFolder);	
     
    	}
     
    	$oneCategorie["folders"] = $foldersCategorie; 
     
    	array_push($categories_listing,$foldersCategorie);
     
    } 
     
    $smarty->assign('categories_listing',$categories_listing);		
     
    $smarty->display('index.tpl');
    ?>
    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
            <!-- BEGIN CATEGORIE_LISTING -->
            {foreach from="$categories_listing" item="OneCategorie"}
            <td><table>
                <tr>
                  <td><b>{$OneCategorie.cat_name}</b></td>
                </tr>
                <!-- BEGIN FOLDER_LISTING -->
                {foreach from="$OneCategorie.folders" item="oneFolder"}
                <tr>
                  <td>&nbsp;&nbsp;<img src="images/folder.gif" /><a href="videos.php?id={$oneFolder.sub_id}">{$oneFolder.sub_name}</a> ({$oneFolder.count_files})</td>
                </tr>
                {/foreach}
                <!-- END FOLDER_LISTING -->
                <tr>
                  <td>&nbsp;&nbsp;&nbsp;<img src="images/play.png" /><a href="main.php?id={$OneCategorie.cat_id}"><em>more</em></a></td>
                </tr>
              </table></td>
            NEW_TR
            {/foreach}
            <!-- END CATEGORIE_LISTING -->
    Bonjour,

    J'ai essayé mais ça ne marche pas.

Discussions similaires

  1. Boucle for avec requête SQL
    Par yurispy dans le forum PHP & MySQL
    Réponses: 6
    Dernier message: 12/05/2015, 23h02
  2. [XL-2003] Requête SQL impossible avec objet QueryTable
    Par Sclarckone dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 16/09/2011, 16h09
  3. Problème de listes déroulantes liées avec requêtes sql
    Par richton95 dans le forum PHP & MySQL
    Réponses: 5
    Dernier message: 21/12/2005, 16h04
  4. [Débutant]Boucle imbriquée avec des bornes différentes
    Par Hayato dans le forum Général Algorithmique
    Réponses: 2
    Dernier message: 29/08/2005, 16h23
  5. [XSL]boucle imbriquée avec condition
    Par kor dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 11/01/2005, 14h19

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