Jump to content
×
×
  • Create New...

Sujet à réécrire : HTML RIP [PHP] Les boucles imbriquées.


Nyx
 Share

Recommended Posts

Bonjour à tous,

 

Nous allons étudier les boucles imbriquées en PHP.Je suis actuellement en train de coder un ItemShop en PHP, et voici un petit tuto qui pourra peut-être vous aider.On va essayer de comprendre le fonctionnement d'une boucle imbriquée (ma foi simple), pour lister les catégories de l'ItemShop et les objets de chaque catégorie, avec une mise en page minime.Le but:Faire une liste de type :

CATEGORIE1

  • ITEM 1
  • ITEM 2

 

Par rapport à un ItemShop stocké dans une base de donnée.Attention, les codes qui vont suivre ne seront pas codés en PDO, mais je vous proposerai plus-tard une version alternative avec PDO. Donc, premièrement, on ouvre un document PHP, et à l'endroit où vous voulez afficher votre ItemShop on va commencer par se connecter à la base de donnée.

<?php// Configurez les variables de connexion ci dessous.$host = ""; // Plus souvent lolcalhost.$user = ""; // Plus souvent root.$pwd = ""; // Si vous êtes en local laissez vide.$dbname="nombasededonnée";   $connexion = mysql_connect($host, $user, $pwd); // La on teste la connexion if ( ! $connexion )   die ("Erreur: Connexion Impossible!");   // Si c'est bon, on se connecte  mysql_select_db($dbname) or die ("Erreur SQL");   
 

Jusque là, rien de bien compliqué.On va maintenant lancer une requête qui va lister toutes les catégories d'items.

$sql = 'SELECT * FROM cat_is ORDER BY id ';$req = mysql_query($sql) or die('Erreur SQL :'.$sql.'
'.mysql_error());
Toujours vivant ? J'espère car c'est loin d'être finit. On va ensuite assigner un tableau avec les résultats de la requête SQL. Ensuite on lance une boucle qui va afficher les catégories comme on l'avait souhaité dit plus haut, c'est à dire dans les balises. Voilà ce que ça donne :
while($data = mysql_fetch_assoc($req)) {$catid = $data['id'];$catname = $data['nom'];    echo ''.$catname.'
';}
Jusque là c'est plutôt facile à comprendre, et c'est ici que ça se complique car la boucle est bien jolie, mais c'est pas ce qu'on veut.Voici la base de notre départ :
>while($data = mysql_fetch_assoc($req)) {$catid = $data['id'];$catname = $data['nom'];    echo ''.$catname.'';    echo '</pre>
<ul>';// C'est ici qu'on va insérer la deuxième boucle    echo '</
Vous commencez à comprendre comment on va procéder ?C'est partit pour écrire la deuxième requête SQL et la deuxième boucle qui vont lister les items !
$sql2 = 'SELECT * FROM itemshop WHERE cat='.$catid.' AND actif=1 ';//On choisit les objets de la catégorie listée dans la premiere boucle// Et on prend que les actifs.$req2 = mysql_query($sql2) or die('Erreur SQL :'.$sql2.'
'.mysql_error());// Puis on refait une boucle qui liste les objets triés.    while($data2 = mysql_fetch_assoc($req2)) {$itemname = $data2['name_item'];$itemid = $data2['id'];	     echo ''.$itemname.''; // La on les met aussi sous forme de liens.    }
Voilà, c'est quasiment finit! Reste plus qu'à imbriquer la boucle qui liste les objets dans celle qui lise les catégories. Pas compliqué !
>$sql = 'SELECT * FROM cat_is ORDER BY id ';$req = mysql_query($sql) or die('Erreur SQL :'.$sql.'
'.mysql_error());[b]while($data = mysql_fetch_assoc($req)) { // Première boucle$catid = $data['id'];$catname = $data['nom'];    echo ''.$catname.'';    echo '</pre>
<ul>';$sql2 = 'SELECT * FROM itemshop WHERE cat='.$catid.' AND actif=1 ';$req2 = mysql_query($sql2) or die('Erreur SQL :'.$sql2.'
'.mysql_error());    while($data2 = mysql_fetch_assoc($req2)) { //Deuxième boucle$itemname = $data2['name_item'];$itemid = $data2['id'];	     echo ''.$itemname.'';	    } // On referme la deuxième boucle  echo '</ul>'; } // On referme la première 
Mais il manque encore un truc: A la fin il faut fermer la connexion à la base de donnée :
mysql_close($connexion);
Voici un récapitulatif :
<?php// Configurez les variables de connexion ci dessous.$host = ""; // Plus souvent lolcalhost.$user = ""; // Plus souvent root.$pwd = ""; // Si vous êtes en local laissez vide.$dbname="nombasededonnée";   $connexion = mysql_connect($host, $user, $pwd); // La on teste la connexion if ( ! $connexion )   die ("Erreur: Connexion Impossible!");   // Si c'est bon, on se connecte  mysql_select_db($dbname) or die ("Erreur SQL");$sql = 'SELECT * FROM cat_is ORDER BY id ';$req = mysql_query($sql) or die('Erreur SQL :'.$sql.'
'.mysql_error());while($data = mysql_fetch_assoc($req)) { // Première boucle$catid = $data['id'];$catname = $data['nom'];    echo ''.$catname.'';    echo '</pre>
<ul>';$sql2 = 'SELECT * FROM itemshop WHERE cat='.$catid.' AND actif=1 ';$req2 = mysql_query($sql2) or die('Erreur SQL :'.$sql2.'
'.mysql_error());    while($data2 = mysql_fetch_assoc($req2)) { //Deuxième boucle$itemname = $data2['name_item'];$itemid = $data2['id'];	     echo ''.$itemname.'';	    } // On referme la deuxième boucle  echo '</ul>'; } // On referme la première bouclemysql_close($connexion); // On se déco de MySQL.
Et oui, c'est finit ! J'espère que vous copie/collerez pas bêtement ces petites portions de codes et que vous ferez un effort pour le comprendre et l'améliorer de votre coté.Bien entendu, je tiens à préciser que c'est mon premier tutoriel, alors soyez indulgent. Et, respectez mon travail, ne vous amusez pas à copier/coller ceci sur d'autres forums.En espérant que ça vous ait été utile.
Link to comment
Share on other sites

  • Replies 4
  • Created
  • Last Reply

Top Posters In This Topic

  • 8 years later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share



Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.