PHP - code moteur de recherche : ça coince!

PHP - code moteur de recherche : ça coince! - PHP - Programmation

Marsh Posté le 06-09-2006 à 15:50:22    

Bonjour à tous,
 
j'ai récupéré un modèle de code pour moteur de recherche sur les keywords des balises meta des pages du site concerné.
le script suivant sert à recenser toutes les pages d'un site et en récupérer le contenu des balises meta pour les intégrer dans une table créée auparavant.
Le pbm est qu'il n'insère que le prmier fichier sur lequel il tombe, les autres.......capout!
 
je ne vois pas d'où vient le problème et bien que je ne comprenne pas trop ce qu'est le "." et le ".." en bas de code, je ne pense pas que ça ait un rapport.
voici le code enquestion:

Code :
  1. function ScanDir($Directory){
  2. $MyDirectory = opendir($Directory);
  3.  while($Entry = readdir($MyDirectory)) {
  4.   echo "<br>entry= $Entry<br>";
  5.   echo "repertoire= $Directory<br>";
  6.   echo "chemin= $Directory/$Entry<br>";
  7.  
  8.    /*  vérifie que le fichier n'est pas un répertoire  */
  9.   if(is_dir($Entry)&& $Entry != "." && $Entry != ".." ) {
  10.     echo "<b><font color=\"red\">$Entry</font></b> est un repertoire<br>";
  11.     ScanDir("$Entry" );
  12.   }
  13.   else {
  14.     /*  type de fichiers qui seront indexés  */
  15.     if (eregi(".htm",$Entry) || eregi(".html",$Entry) || eregi(".php",$Entry)) { //
  16.       $MetaTags = get_meta_tags($Directory."/".$Entry);
  17.       /*  requete d'insertion du fichier dans la table  */
  18.       if ($MetaTags["robots"] == "all" ) {
  19.         $MetaKey = $MetaTags["keywords"];
  20.         //$MetaKey = strtoupper($MetaKey);   est-ce utile?
  21.         echo "Meta($Directory/$Entry): $MetaKey <br>";
  22.         $MetaTitre = $MetaTags["description"];
  23.         echo "Meta($Directory/$Entry): $MetaTitre <br>";
  24.         $query = "INSERT INTO recherche (lien,keyword,titre)
  25.                   VALUES(\"$Directory/$Entry\",\"$MetaKey\",\"$MetaTitre\" )";
  26.         $mysql_result = mysql_query($query) or die ("<br><br><b>Erreur de modification de la table par la requete</b><br> \"$query\"" );
  27.       }
  28.     }
  29.   }
  30.  }
  31. closedir($MyDirectory);
  32. }
  33. $open_basedir="..";
  34. ScanDir("." );


 
le message d'erreur est :

Code :
  1. Erreur de modification de la table par la requete
  2. "INSERT INTO recherche (lien,keyword,titre) VALUES("dossier/page01.htm","mots, clés, un, deux, trois, ....","titre de la page" )"


 
merci beaucoup par avance, parce que là je rame...  :)

Reply

Marsh Posté le 06-09-2006 à 15:50:22   

Reply

Marsh Posté le 06-09-2006 à 16:21:30    

avec le vrai message d'erreur mysql ça serait mieux, modifie ton code :

$mysql_result = mysql_query($query) or die (mysql_error());


EDIT: tag


Message édité par soju le 06-09-2006 à 16:22:02
Reply

Marsh Posté le 06-09-2006 à 16:27:52    

salut Soju,
 
ça me rajote ceci en fin de page :

Code :
  1. Duplicata du champ '0' pour la clef 1


 
faut-il incrémenter quelque chose?

Reply

Marsh Posté le 07-09-2006 à 10:34:09    

bonjour, :)
je tourne en rond.....quelqu'un a une idée d'où peut venir le problème?
merci

Reply

Marsh Posté le 07-09-2006 à 10:35:30    

T'as oublié de mettre la clé en auto_increment ?.

Reply

Marsh Posté le 07-09-2006 à 10:50:16    

la clé de ta table est bien définie en auto-increment?
edit:waouhh over-grilled de 15mins :o


Message édité par anapajari le 07-09-2006 à 10:50:43
Reply

Marsh Posté le 07-09-2006 à 11:07:03    

ça parait tellement évident après-coup.......
c'est bien ça et merci de vos réponses
 
le problème maintenant est que la boucle indexe deux fois les mêmes données dans la table....contraignant!
je regarde ce qui ne va pas
a++

Reply

Marsh Posté le 07-09-2006 à 14:38:10    

j'ai trouvé, et si ça peut servir à quelq'un..... :
il falliat mettre

Code :
  1. ScanDir("$Entry/$Directory" );


au lieu de  

Code :
  1. ScanDir("$Entry" );


 
voilà, merci encore de votre aide  :)

Reply

Marsh Posté le 14-10-2008 à 12:19:41    

Parfait , mais attention à Scandir je pense que c'est un mot réservé en php.
j'ai été personnellement confronté au probléme.
 
Comme c'est une fonction déclarée , on peut lui donner le nom que l'on veut.
Moi je l'ai transformé en PGScandir  parmi un millier d'autres solutions possibles.
 
Attention avec l'id , il faut le reseter à  0 avant chaque scan
 
en faisant :
 
$query      = " ALTER TABLE search AUTO_INCREMENT=0";
$mysql_result = mysql_query($query) or die (" Erreur de modification de la table par la requete \"$query\"" );
                                                                     
$query     = " INSERT INTO search (lien,keyword,titre)  
                    VALUES(\"$Directory/$Entry\",\"$MetaKey\",\"$MetaTitre\" )" ;
 
$mysql_result = mysql_query($query) or die (" Erreur de modification de la table par la requete \"$query\"" );  
 
 
Mais moi j'ai aussi un petit probléme.
 
D'abord une mise en situation :
 
le script d'indexation scanne toutes les pages et  affiche l'ensemble des fichiers du répertoire , en affichant  en lettres rouges les répertoires.
 
la requête suivante :"query     = " INSERT INTO search (lien,keyword,titre)  
                                                             VALUES(\"$Directory/$Entry\",\"$MetaKey\",\"$MetaTitre\" )" ;
 
insére dans la table les valeurs de lien .
 
Mais chose étrange , malgré que le code n'affiche aucune erreur .
Les champs correspondant aux  "keyword" et "titre"
restents  vides à chaque ligne de la table .
 
Seule les champs correspondant à la  valeur  \"$Directory/$Entry\" se remplissent
à l'éxécution du script.
 
Comment expliquer qu'un insert laisse des champs vides ?
 
y aurait- il un probléme avec les expressions de \"$MetaKey\" et \"$MetaTitre\" ?
 
faut - il  inverser les barres obliques ?
 
j'ai  essayer en faisant '$MetaKey' , '$MetaTitre'.
 
Rien y fait les champs restent indefectiblement vides.
 
Quelqu'un peut-il venir à ma rescousse.
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed