Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > Templates > Smarty
Smarty Forum d'entraide sur le moteur de templates Smarty. Avant de poster -> FAQ Smarty et Cours Smarty
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/04/2007, 16h35   #1
Invité de passage
 
Inscription : décembre 2006
Messages : 4
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 4
Points : 3
Points : 3
Par défaut Problème de boucle MySQL sous Smarty

Bonjour à tous,

Je cherche manifestement un moyen pour afficher les 3 derniers résultats d'une requête MySQL dans une template Smarty mais je n'y parviens pas.

Voici le code se trouvant dans le fichier index.tpl :

Code :
1
2
3
4
5
6
 
{section name=ID_MEMBRE loop=3}
ID utilisateur : {$ID_MEMBRE}<br />
Pseudonyme : {$PSEUDO_MEMBRE}<br />
Adresse complète :   {$ADRESSE_MEMBRE}<br /><br />
{/section}
Et, le code du fichier index.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
 
<?php
 
	require '../libs/Smarty.class.php';
 
	$smarty = new Smarty;
 
	$smarty->compile_check = true;
	$smarty->debugging = false;
 
	$connexion = mysql_connect("srvdev01.3suisses.fr", "Administrator", "HQvxD31v2");
	mysql_select_db("template", $connexion);
 
	$resultat = mysql_query("SELECT * FROM utilisateurs ORDER BY id_utilisateur");
 
	while($utilisateurs = mysql_fetch_array($resultat))
	{
		$smarty->assign("ID_MEMBRE",$utilisateurs[0]);
		$smarty->assign("PSEUDO_MEMBRE",$utilisateurs[1]);
		$smarty->assign("ADRESSE_MEMBRE",$utilisateurs[3]);
		$i++;
	}
 
	$smarty->display('index.tpl');
 
?>
Merci d'avance pour vos corrections et votre aide
slaxsystem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2007, 17h28   #2
Membre expérimenté
 
Développeur Web
Inscription : avril 2006
Messages : 430
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2006
Messages : 430
Points : 538
Points : 538
Salut,

ta boucle php est le premier problème:
Code :
1
2
3
4
5
6
7
8
9
10
 
$resultat = mysql_query("SELECT * FROM utilisateurs ORDER BY id_utilisateur");
 
	while($utilisateurs = mysql_fetch_array($resultat))
	{
		$smarty->assign("ID_MEMBRE",$utilisateurs[0]);
		$smarty->assign("PSEUDO_MEMBRE",$utilisateurs[1]);
		$smarty->assign("ADRESSE_MEMBRE",$utilisateurs[3]);
		$i++;
	}
Donc tu récupères tous les users, ensuite tu boucle, et à chaque fois tu mets l'utilisateur en cours dans les variables smarty. Enfin, tu affiches ton template, donc tu n'auras que le dernier user dans tes variables smarty...

Je procèderais donc comme suit, en remplacant la requete pour ne récupérer que 3 résultats (les 3 premiers par exemple), et en assignant le résultat:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
$resultat = mysql_query("SELECT * FROM utilisateurs ORDER BY id_utilisateur LIMIT 3");
$utilisateurs = array();
 
	while($temp = mysql_fetch_array($resultat))
	{
          $utilisateurs[] = array( 
            'ID_MEMBRE' => $temp[0],
            'PSEUDO_MEMBRE' => $temp[1],
            'ADRESSE_MEMBRE' => $temp[2]
          );
        }
        $smarty->assign('UTILISATEURS', $utilisateurs);
Puis dans smarty, pour afficher:

Code :
1
2
3
4
5
6
 
  {foreach from=$UTILISATEURS item=utilisateur}
    ID utilisateur : {$utilisateur.ID_MEMBRE}<br />
    Pseudonyme : {$utilisateur.PSEUDO_MEMBRE}<br />
    Adresse complète :   {$utilisateur.ADRESSE_MEMBRE}<br /><br />
  {/foreach}
Voila, avec tout ca, un peu de lecture de doc smarty, un peu de lecture de doc php, et un peu de logique, et c'est parti
__________________
Merci à Microsoft pour avoir transformé un métier relativement terne et basé sur une approche bêtement technique et rigoureuse des faits, en challenge quotidien, nécessitant une remise en question permanente à l'échelle du quart d'heure
bkill est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h52.


 
 
 
 
Partenaires

Hébergement Web