jer666 Posted June 17, 2007 Share Posted June 17, 2007 Bonjour, pour offrir un mode de navigation optimal pour mes utilisateurs, je desirerais creer une nuage de tags. Pour cela, j'ai creer un script pour récupérer les tags <input size="60" type="text" name="tag" tabindex="80" /> <p> Merci d'entrer 3 ou 4 termes <b>séparés par des virgules("coma") ","</b></p> <?php $post = $_POST['tag']; //liste des tags $tag = explode(",", $post); // séparation des tags $nbrtag = count ($tag); // comptage des tags $enregtag = 0; if ($post) { while ($enregtag <= $nbrtag & !empty($tag[$enregtag])) //tant qu'il reste des tags non enregistrés { $newtag = $tag[$enregtag]; mysql_query("INSERT INTO tags VALUES('', '$newtag', '$id')") or die (mysql_error()); //$id etant l'id de l'article enregistré en meme temps que les tags $enregtag++; // on incremente de 1 le nombre de tag enregistré } }//fin du if elseif ($invisible)// si on enregistre l'article sans les tags {echo'<p style="color:#ff0000">merci de mettre une paire tags!!</p>';} ?> mais cela n'enregistre pas les tags pour une raison qui me depasse un peu ... je repasse le script dans tout les sens, je ne vois pas ou ca cloche :( pourriez vous m'aider? des fois un regards exterieur... bon ben c'etait bien une petite betise j'avais pas mis la requette sql au bon endroit Link to comment Share on other sites More sharing options...
jer666 Posted June 17, 2007 Author Share Posted June 17, 2007 bon la recupération des tags est ok. ca enregistre bien dans la bdd. j'ai trouvé un script pour faire le tags clouds. et ca marche pas trop mal. par contre, j'ai un pti probleme concernant la creation de la page presentant les articles concernés par le tag. par exemple pour le tag windows, recupéré tout les articles ayant ce tag enregistré. Ma bdd est construite comme cela id => id de l'enregistrement tag => ben le tags enregistré id_article => l'idée de 'larticle concerné pour chaque article j'enregistre sur différents champs les tags associés exemple article id 1 nommé windows vs linux mes tags sont windows,linux,combat les enregistrement sont donc 1 windows 1 2 linux 1 3 combat 1 si par la suite j'enregister un article nommé windows vista ayant pour id 2 avec les tags windows,vista j'aurais 4 windows 2 5 vista 2 ....... pour afficher les articles associés a un tag je recupére le tag dans l'url par exemple http://www.monsite.com/index.php?tag=vista voici le script utilisé: if (isset($_GET['tag'])) $tags = strval($_GET['tag']); //recupération du tag dans l'url echo $tags; // test de la valeur recupéré, cette valeur est bonne $V = mysql_query('SELECT article FROM tags WHERE tag=$tags AND Activation=2 ORDER BY id DESC')or die (mysql_error()); while ($v = mysql_fetch_array($V)) { $idv = $v['article']; echo 'idv => '.$idv; } // fin de la boucle tags je me suis arretté la car j'ai une erreur, et je ne trouve pas la raison. l'erreur Vista Unknown column '$tags' in 'where clause' d'aprés mes recherches c'est du au fait que la réponse de la requette sql est présenté sous forme de tableaux. Mais je ne vois pas le probleme :) il devrait me presenter tout les id d'articles relatifs a ce tag non? si j'arrive a finir ce script, je le mettrais a disposition sur ce thread, car j'ai beaucoup chercher sur le ent, et jamais trouvé u script complet, toujours les nuages.... merci par avance de toute l'aide que vous pourriez m'apporter :) Link to comment Share on other sites More sharing options...
windu.2b Posted June 18, 2007 Share Posted June 18, 2007 par exemplehttp://www.monsite.com/index.php?tag=vista voici le script utilisé: [...] $V = mysql_query('SELECT article FROM tags WHERE tag=$tags AND Activation=2 ORDER BY id DESC')or die (mysql_error()); [...] je me suis arretté la car j'ai une erreur, et je ne trouve pas la raison. l'erreur Vista Unknown column '$tags' in 'where clause' L'erreur est tout simplement dans la requête SQL (comme te le dit le message d'erreur)! Tu as écrit: 'SELECT article FROM tags WHERE tag=$tags AND Activation=2 ORDER BY id DESC' au lieu de: "SELECT article FROM tags WHERE tag='$tags' AND Activation='2' ORDER BY id DESC" Petite explication (pour ceux qui n'auraient pas tout compris): en oubliant les simple-quotes autour de $tags, tu dis à ta requête que tu cherches non pas une valeur dans le champ tag mais la colonne dont le nom est égal à $tags, d'où le message d'erreur... PS: pour que le tout fonctionne correctement, j'ai du aussi remplacé les simple-quotes par des doubles car sinon, ça aurait merdé: l'interpréteur aurait sans doute cru qu'il avait atteint la fin de la requête SQL. Et pour éviter aussi des erreurs (même si ça doit sans doute passer correctement avec des entiers), j'ai aussi rajouté des simple-quotes autour de la valeur chiffrée. Link to comment Share on other sites More sharing options...
jer666 Posted June 18, 2007 Author Share Posted June 18, 2007 yes!!! merci ca marche trés bien! merci merci merci!!! Bon une petite question suplémentaire avant de donner le script complet et fonctionnel :) dans ma requette, je cherche donc le tags désiré. par exemple vista. dans cette requette, je vais etre obligé de refaire une requette pour chercher les info de l'article du type $V = mysql_query("SELECT article FROM tags WHERE tag='$tags' ORDER BY id DESC")or die (mysql_error()); while ($v = mysql_fetch_array($V)) { $idv = $v['article']; $a = mysql_query("SELECT * FROM article WHERE id='$idv' ORDER BY id DESC")or die (mysql_error()); while ($art = mysql_fetch_array($a)) { $id = $art['ID']; $titre = $art['Titre']; $genre = $art['Genre']; $description = $art['Description']; <div class="titre"> <a href="'.$url.'">'.$titre.'</a> </div> <div class="desc"> '.$description.' </div> } mais dans ces resumé, j'aimerais bien mettre aussi les tags associé a chaque résumé lol donc ca va me faire une requette dans une requette dans une requette a raison de 20 articles par page, et de 10 000 visiteurs par jours, ca va donner une base de donnée saturé par les requettes pour les pages de tags vous en pensez quoi? Link to comment Share on other sites More sharing options...
windu.2b Posted June 18, 2007 Share Posted June 18, 2007 J'en pense qu'en effet, 3 requêtes imbriquées comme ça (dont les 2 dernières vont être appelées en boucle) ça va vite saturer ton serveur, si tu as 10.000 visiteurs/jour! Même en ayant recours à un cache, ça n'est pas une bonne idée de faire ainsi. Ce que je te recommande, c'est de faire le tout en une seul requête: plus complexe à écrire mais plus rapide à exécuter! Ça donnerait alors quelque chose comme ceci (je suis pas tout à fait sûr de moi quand même, car j'ai rien pour tester/vérifier): "SELECT article.*FROM tags, article WHERE tags.tag='$tags' AND tags.article=article.ID ORDER BY tags.id DESC, article.id DESC"; Là, je n'ai fait que retranscrire en une seule requête les 2 déjà existantes. Le résultat devrait être (si je me suis pas merdé) ce que te donne la 2° boucle, classé selon les id de la table tags, puis de la table article. Un conseil: évite les '*' dans les requêtes! Certes, c'est bien pratique, mais ça alourdit grandement le temps d'exécution d'une requête car MySQL doit d'abord récupérer la structure de la table concernée pour connaitre les noms des champs (en gros, MySQL fait le remplacement '*' -> 'tous les champs' à chaque fois que tu appelles cette requête SQL). Privilégie au maximum de citer les champs un par un. C'est chiant à taper, mais tu y gagneras en exécution Link to comment Share on other sites More sharing options...
jer666 Posted June 20, 2007 Author Share Posted June 20, 2007 c'est possible ca? je savais pas du tout!!! merci, je vais chercher en ce sens pour comprendre un peu mieu :) merci encore! dés que j'ai inclus cette partis je donne le script final Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.