Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 10 sur 10
  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 :
    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 :
    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 ERIC POMMEREAU
    Ingénieur, pôle cartographie
    Inscrit en
    décembre 2004
    Messages
    715
    Détails du profil
    Informations personnelles :
    Nom : Homme ERIC POMMEREAU
    Âge : 40
    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 :
    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 :
    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 ERIC POMMEREAU
    Ingénieur, pôle cartographie
    Inscrit en
    décembre 2004
    Messages
    715
    Détails du profil
    Informations personnelles :
    Nom : Homme ERIC POMMEREAU
    Âge : 40
    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 :
    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 :
    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 :
    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 ERIC POMMEREAU
    Ingénieur, pôle cartographie
    Inscrit en
    décembre 2004
    Messages
    715
    Détails du profil
    Informations personnelles :
    Nom : Homme ERIC POMMEREAU
    Âge : 40
    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 : 32

    Informations professionnelles :
    Activité : Développeur Web

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

    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 :
    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 :
    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 :
    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 :
    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •