Code php de meta keywords ne s'affiche pas

WRInaute occasionnel
bonjour:

j'ai un petit bout de code qui ne marche pas et j'aimerai savoir si vous voyez le problème^^

Code:
<?php if (substr($_SERVER['REQUEST_URI'],1) == "sujet") /// s'il on est sur une page de visualisation d'un sujet

/// A modifier car c'est typique de mes urls

{
$res_meta = $db->query("SELECT message FROM posts WHERE topic_id=".$_GET['id']." ORDER BY id LIMIT 0,1"); /// je récupère le premier message de la discussion

while ($cur_mots = $db->fetch_assoc ($res_meta))
{
$tab = explode(" ",metas($cur_mots['message']));
$nb_mots = count($tab); 
$incremo = 0;
$listemots="";
$nb_max_mots="";
while ($incremo != $nb_mots && $nb_max_mots != 25) /// Je récupère les 25 premiers mots du message
{
if (strlen($tab[$incremo])>5){$listemots.=$tab[$incremo].", ";$nb_max_mots++;}
$incremo++;
}

echo '<meta name="keywords" content="'.$listemots.'" />'."\n";
}
}

?>

merci de votre aide
ps: en faite au debut j'ai mis 10337 mais je ne comprends pas ce qu'il faut mettre...
 
WRInaute occasionnel
désolé j'ai rien compris, je sais à peu prêt lire le php enfin vite fait comprendre ce qu'il fait mais après...

donc en gros j'ai un sujet

"salut, je m'appel tintin, j'ai 19ans"

si je mets, 1, il commence à S ??

et sinon il y a aucun problème?
 
WRInaute accro
sérieusement tu as lu la page de la fonction ? car là tu montre juste que tu va a la pèche a la ligne et que tu ne fait pas d'effort pour comprendre.
string substr ( string $string , int $start [, int $length ] )
Retourne le segment de string défini par start et length.
pense tu que ton expression renvoie juste "ujet" ? affiche $_SERVER['REQUEST_URI'] pour voir a quoi tu est confronté et recompose ta règle dans la condition.
 
WRInaute occasionnel
mes urls sont comme ça

/t10989-football-ligue-1-but-en-3d-le-missile-de-bastos.html

donc un t à tous mes sujets

sinon je vous donne le code tel que je l'ai pris et qui marche chez l'auteur...

Code:
<?
if (substr($_SERVER['REQUEST_URI'], 7, 5) == "sujet") /// s'il on est sur une page de visualisation d'un sujet

/// A modifier car c'est typique de mes urls

{
$res_meta = mysql_query("SELECT message FROM pun_posts WHERE topic_id=".$_GET['id']." ORDER BY id LIMIT 0,1"); /// je récupère le premier message de la discussion

while ($cur_mots = $db->fetch_assoc ($res_meta))
{
$tab = explode(" ",metas($cur_mots['message']));
$nb_mots = count($tab); 
$incremo = 0;
$listemots="";
$nb_max_mots="";
while ($incremo != $nb_mots && $nb_max_mots != 25) /// Je récupère les 25 premiers mots du message
{
if (strlen($tab[$incremo])>5){$listemots.=$tab[$incremo].", ";$nb_max_mots++;}
$incremo++;
}
print '<meta name="description" content="'.substr(metas($cur_mots['message']), 10, 300).'" />'."\n";
print '<meta name="keywords" content="'.$listemots.'" />'."\n";
}
}
elseif (substr($_SERVER['REQUEST_URI'], 7, 5) == "forum") /// S'il ont est en train de visualiser un forum 

{
$res_meta = mysql_query("SELECT subject FROM pun_topics WHERE forum_id = ".$_GET['id']." ORDER BY id DESC LIMIT 0,10"); /// je cherche les sujets des topics de ce forum
$keywords = "";
$description = "";
while ($cur_mots = $db->fetch_assoc ($res_meta))
{
$description.= $cur_mots['subject'].", ";
$tab = explode(" ",metas($description));
$nb_mots = count($tab); 
$incremo = 0;
$listemots="";
$nb_max_mots="";
while ($incremo != $nb_mots && $nb_max_mots != 25) /// Et je récupère les 25 premiers mots
{
if (strlen($tab[$incremo])>5){$listemots.=$tab[$incremo].", ";$nb_max_mots++;}
$incremo++;
}
}
print '<meta name="description" content="'.$description.'" />'."\n";
print '<meta name="keywords" content="'.$listemots.'" />'."\n";
}
else /// S'il l'on est sur l'index des forum, on créé des meta par défaut
{
?>
<meta name="description" content="Forum dédié au Cap-Sizun et à ses environs. Tous les sujets de conversation y sont les bienvenus à partir du moment ou les mots sont choisis, pesés et argumentés. A chacun son opinion et acceptons également celle des autres." />
<meta name="keywords" content="forum, cap, sizun, audierne, beuzec, cleden, confort, meilars, esquibien, goulien, mahalon, plogoff, plouhinec, pont croix, primelin, pointe, raz, van, trepasses, baie, douarnenez, ile, sein finistere, bretagne, france" />
<?
}
?>


j'ai pris uniquement le code pour les sujets car pour le reste, je l'écris manuellement
 
WRInaute occasionnel
quelqu'un entre temps à essayer de m'aider mais sans succès

Code:
if (substr($_SERVER['REQUEST_URI'],1) == "t") /// s'il on est sur une page de visualisation d'un sujet

/// A modifier car c'est typique de mes urls

{
$res_meta = $db->query("SELECT message FROM posts WHERE topic_id=".$_GET['id']." ORDER BY id LIMIT 0,1") or error('Impossible de retrouver les informations des discussions et des messages', __FILE__, __LINE__, $db->error());

while ($cur_mots = $db->fetch_assoc ($res_meta))
{
$tab = explode(" ",metas($cur_mots['message']));
$nb_mots = count($tab); 
$incremo = 0;
$listemots="";
$nb_max_mots="";
}
while($incremo <= $nb_mots){
// on prend que les 25 premier mots
   if($nb_max_mots < 25){
      if(strlen($tab[$incremo])>5 ){
         // si le mot est supérieur a 5 lettre alors on ajoute le mot a la liste et on met une virgule et on incremente le $nb_max_mots
         $listemots.=$tab[$incremo].", ";
         $nb_max_mots++;
      }else{
         // si le mot est infereieur ou egala  5 lettres on l'ajoute sans ajoute de virgules.
         $listemots.=$tab[$incrmeo]." ";
      }
   }else{
      // si on as plus de 25 mots on termine la boucle
      break;
   }
   $incremo++;
echo '<meta name="keywords" content="'.$listemots.'" />'."\n";
}
}
 
WRInaute accro
Tu peux déjà essayer de débugger de ton côté, en ajoutant des echo avant et après chaque test et boucle, de manière à savoir où cela pêche.
 
WRInaute accro
Tu as testé ton code point par point ? Ce que je te propose n'a pas pour but de t'affiche des erreurs, mais de te permettre d'identifier dans quel condition / boucle ton code ne passe pas, de manière à ce que tu puisse identifier la source du problème.
 
WRInaute discret
UsagiYojimbo a dit:
Tout ça pour une balise meta qui ne sert à rien.

C'est clair!
Requete + traitement pour une balise inutile dont le contenu ne sera pas pertinent en plus. Tu en as vraiment besoin?

Au niveau logique de programmation, tu n'as aucun moyen de savoir sur quel type de page tu es sans avoir à parser l'URL?
En javascript je peux comprendre de faire ça mais là c'est étrange.

Essaye ça :
Code:
if(strstr($_SERVER['REQUEST_URI'], 'sujet'))
{
echo 'aa';
...
}

Si tu arrives à le faire fonctionner, crée 1 fichier contenant la meta keywords et ensuite à chaque chargement de page tu commence par tester si le fichier existe. SI oui tu fais un file_get_contents, ca prendra moins de temps

Ciao
 
WRInaute accro
liens-geeks.com a dit:
Si tu arrives à le faire fonctionner, crée 1 fichier contenant la meta keywords et ensuite à chaque chargement de page tu commence par tester si le fichier existe. SI oui tu fais un file_get_contents, ca prendra moins de temps
ça c'est la méthode pas subtile le mieux reste a mon avis de créer dynamiquement un fichier php contenant une liste de variables en dur (qu'on va concaténer au fur et a mesure de leur création) puis de l'inclure pour tester l’existence de la variable. Ça évite les opération I/O du file get qui sont très gourmandes, et permet la sortie avec un simple echo.
 
WRInaute discret
C'est juste le principe de base de tous les systèmes de cache ^^
C'etait juste la manière la plus simple pour optimiser ce script (tout en sachant que le dev a déjà des difficultés sur un script de base)
Comme tu dis, ce que j'ai écris c'est orienté serveurs qui ne sont pas saturés au niveau du disque
 
Discussions similaires
Haut