[PHP/MySQL] Parser le résultat d'une BDD

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics

Msieurduss
Nouveau WRInaute
 
Messages: 11
Inscription: Mar Mai 30, 2006 16:30

[PHP/MySQL] Parser le résultat d'une BDD

Message le Jeu Juin 08, 2006 9:54

Bonjour à tous !

Voilà, j'ai une base de données avec, dedans, un champ "theme". Parfois, ce champ contient plusieurs mots. Les thèmes sont classés comme suit : theme1,theme2,theme3,... etc.

Je précise bien qu'ils sont comme cela dans la base...

Je voudrais les extraire et en faire une liste sur une page. S'il n'y avait qu'un seul thème à chaque fois, ça ne poserait aucun souci ! Mais là, je voudrais non seulement qu'il me les sépare s'il y en a plusieurs dans un même champ, et en plus qu'il ne me les répète pas (si par exemple j'ai un champ Theme1,Theme2 et un autre champ Theme2, j'aimerais qu'il ne me répète pas ce dernier puisqu'il est présent dans Theme1,Theme2).

Je ne sais pas du tout comment m'y prendre... J'ai bien essayé quelques petites manipulations avec les fonctions ereg (pour vérifier s'il y a ou non une virgule), explode pour parser le résultat... Mais rien à faire, je n'obtiens pas ce que je veux :( .

Voici le code que j'ai bricolé, mais j'ai l'impression que je ne m'y prends pas du tout comme il faut ;)
Code: Tout sélectionner
         $req=mysql_query("SELECT DISTINCT theme FROM table ORDER BY theme") or die ("Erreur de connexion a la BDD : ".mysql_error());
         echo "<ul>";
         $j=0;
         while ($resultat=mysql_fetch_array($req)) {
         $string[$j]=ereg(",",$resultat["theme"]);
            if ($string[$j]) {
               $resultat["theme"]=explode(",",$resultat["theme"]);
               $i=0;
               while($resultat["theme"][$i]) {
                  echo "<li><a href='carte.php?theme=".$resultat["theme"][$i]."'>".$resultat["theme"][$i]."</a></li>";
               $i++;
               }
            } else {
               echo "<li><a href='carte.php?theme=".$resultat["theme"][$i]."'>".$resultat["theme"][$i]."</a></li>";
            }
         }
         echo "</ul>";


Merci d'avance !! :)

Msieurduss
Nouveau WRInaute
 
Messages: 11
Inscription: Mar Mai 30, 2006 16:30

Message le Jeu Juin 08, 2006 10:52

Personne ne sait m'aider :cry: :cry: ?


Malaiac
WRInaute impliqué
WRInaute impliqué
 
Messages: 357
Inscription: Mer Mai 04, 2005 21:42

Message le Jeu Juin 08, 2006 12:00

Je te conseille de séparer l'extraction et homogénéisation des données de la partie affichage.

Avec des if !in_array , tu devrais t'en sortir

Msieurduss
Nouveau WRInaute
 
Messages: 11
Inscription: Mar Mai 30, 2006 16:30

Message le Jeu Juin 08, 2006 13:40

Merci pour ta réponse :) !
Alors, en faisant un test (avec un seul tableau, sans base de données pour commencer) avec ceci :

Code: Tout sélectionner
$var="theme1,theme2,theme3,theme4,theme1";
$var=explode(",",$var);

$tabl=array();

$i=0;
while ($var[$i]) {
   if (!in_array($var[$i],$tabl)) {
      array_push($tabl,$var[$i]);
      echo $var[$i];
   }
$i++;
}


J'obtiens effectivement ce que je veux.
Sauf que j'ai droit à un "Notice: Undefined offset: 5 in c:\program files\easyphp1-8\www\api googlemap\test.php on line 29" (normal me direz-vous ;) ).
Je ne vois pas comment ne pas l'avoir... Comment écrire la même chose avec foreach ?

(le code suivant ne me renvoie que la première entrée du tableau :
Code: Tout sélectionner
foreach ($var as $value) {
   if (!in_array($var,$tabl)) {
      array_push($tabl,$var);
      echo $value;
   }
$i++;
}


Edit : en rajoutant un "isset" devant ma variable, dans le while, ça marche... Mouais, mais j'ai pas l'impression de faire les choses proprement ;) je suis toujours ouvert à tout éclairage de PHP possible ;)

gomoz
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 230
Inscription: Mer Déc 29, 2004 18:21

Message le Jeu Juin 08, 2006 21:17

moi je ferai

$data1="theme1,theme2,theme3";
$data2="theme5,theme2";

$tab_of_themes = array_unique(array_merge(explode(',',$data1),explode(',',$data2)));


Normalement c'est juste mais ca depend de comment tu traite les données ensuite.


Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités