PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 10-11-2014 16:21:16

Nogardryu
Membre
Lieu : Yvelines
Inscription : 10-11-2014
Messages : 1
Site Web

Problème de logique sur des requêtes

Bonjour à tous !

Avant tout, merci à tous les développeurs bénévoles qui font vivre ce forum en répondant à nos questions parfois bêtes de débutant. Sans vous, on serait pas dans la m#_^~ !

Bref !
Je veux que vous sachiez qu'avant de venir, j'ai chercher, j'ai eu des résultats partiels d'autres qui donnaient de bons résultats mais dans une optique d'améliorer mon code, je pose quand même la question.

Tout se passe entre cette page et cette page.
La première indique le rendu (au niveau du contenu, peu importe le style). Il s'agit d'une page statique non issue d'une bdd
La deuxième est le début de page que je suis en train de programmer en mode dynamique. Il s'agit d'une page dynamique issue d'une bdd qui ne contient pas tout le contenu de la première (l'intérêt étant justement de l'ajouter via internet et php/mySql).
L'objectif est de générer automatiquement la deuxième page à partir d'une base de données pour afficher à terme le même contenu que la première et de pouvoir maintenir le tout en ligne (marre de modifier mon contenu HTML...).

L'idée est que dans la base de données, j'ai une table avec le titre d'une rubrique, le libellé du lien, l'url du lien, et l'image (dont une par défaut si je n'indique rien).
La table "liens"

La problématique est qu'aujourd'hui, pour appeler les liens de la rubrique, j'ai une requête par rubrique.
Exemple

$req_courrier= $bdd->query('SELECT * FROM liens WHERE rubrique= \'Courrier\'') or die(mysql_error());

Donc si j'ai 15 rubriques, ça me fait 15 requêtes...

A priori en l'état, ça pourrais marcher. J'appelle en effet chaque rubrique avec tous les liens correspondants en tapant dans l'array de la rubrique. Comme chaque rubrique est affichée séparément, à chaque fois je reproduis le schéma (Afficher "rubrique" puis boucle pour afficher "libelle" + "lien" + "image". Mais je suis persuadé qu'il est possible d'avoir une seule requête regroupant l'ensemble des liens et des rubriques et permettant ensuite avec un appel spécifique dans l'array, d'appeler uniquement le titre de la rubrique puis tous les liens correspondant à cette rubrique.

J'avoue que ce n'est pas aussi évident à expliquer que c'est clair dans ma tête, mais j'espère avoir fait comprendre le principe. J'essaye quand même de le formuler autrement.
- Plusieurs rubriques de liens
- Plusieurs liens par rubriques avec chacun une image, un libellé, une url (et donc une rubrique)
- Etat actuel : une requête par catégorie pour appeler le titre de la catégorie et toutes les informations des liens de cette catégorie
                    affichage de chaque catégorie et de ces liens par des appels spécifiques
- Objectif : avoir une seule requête pour appeler l'ensemble des liens + rubriques puis faciliter l'appel de chacune des rubriques et des liens correspondants
--> Pistes : modifier la bdd en ayant deux tables : une liste des rubriques + une liste des liens avec la rubrique comme clé

Merci de votre aide.

A disposition si besoin de précisions.

Cdt,

Nog

Hors ligne

#2 14-11-2014 18:11:14

Kaimite
Membre
Inscription : 14-11-2014
Messages : 14

Re : Problème de logique sur des requêtes

Salut,

Voici un code qui te permet d'obtenir le code HTML suivant :

<h1>Rubrique 1</h1>
<ul>
<li><a href="http://www.exemple.com">mon lien 1</a></li>
<li><a href="http://www.exemple.com">mon lien 2</a></li>
</ul>

<h1>Rubrique 2</h1>
<ul>
<li><a href="http://www.exemple.com">mon lien 3</a></li>
<li><a href="http://www.exemple.com">mon lien 4</a></li>
</ul>
 

Tu ne fais qu'on requête qui récupérer tous les liens et tu ordonne via 'rubrique' pour regrouper les liens.


<?php
$req_liens = $bdd -> query("SELECT * FROM `liens` ORDER BY `rubrique` ASC") or die(mysql_error());

$rubrique     = null;
$premier_tour = true;

while ($row = $req_liens->fetch_assoc()) {
    //--> Si la rubrique est différente de $rubrique on l'affiche
  if ( $rubrique !== $row['rubrique'] ) {
   
    //--> Si on effectue le premier tour pas besoin de fermer la liste précédente
    if ($premier_tour == false) {
      echo '<ul>';
    }
   
    echo '<h1>' . $row['rubrique'] . '</h1>';
    echo '<ul class="liste_liens">';
   
    //--> Maj de la rubrique en cours
    $rubrique     = $row['rubrique'];
    $premier_tour   = false;
  }
 
  //--> Affichage du lien dans la liste
  echo '<li><a href="' . $row['lien'] . '"><img src="' . $row['image'] . '" alt="" /> ' . $row['libelle'] . '</a></li>';
}

//--> On ferme la dernière liste
echo '</ul>';
 

Pour aller un peu plus loin (mais ça ne change rien dans la logique du code ci-dessus), il est préférable de "sortir" les rubriques dans une autre table.


Le but est d'avoir 2 tables :

- une table "liens" avec id, url, libelle, image, rub_id
- une table "rubriques" avec id, libelle

Et au lien d'enregistrer le nom de la rubrique dans le lien tu fait une référence à la rubrique via son ID (ici c'est le champ rub_id de la table liens qui va correspondre au champ id de la table rubrique).

L'avantage c'est que si tu veux changer le nom d'une rubrique il suffit de la changer dans la table rubriques et il sera automatiquement mis à jour pour tous les liens qui y sont associés.

Ensuite pour les requêtes il suffit de faire une requête jointe (sur 2 tables) pour récupérer les infos dont tu as besoin.

Si tu veux plus d'infos n'hésite pas.

Kaimite

Hors ligne

Pied de page des forums