moteur de recherche

moteur de recherche - PHP - Programmation

Marsh Posté le 25-02-2008 à 12:57:13    

bonjour, je voudrais mettre un petit moteur de recherche en php pour mes pages html, mais mon code ne fonctionne pas, pouvez vous me dire pourquoi?
 
<?php /* -------Déclaration des variables ----------*/
$i=0; //initialisation du compteur de résultat à zéro
$resultat=""; //initialisation de la chaine qui stocke les fichiers de résultats
$trouve=0; //initialisation de la vraible "drapeau"
if ($_POST['action']=="Recherche Interne" && $_POST['recherche']!="" ) {
$files = glob("*.html" ); //changer ici par l'extension voulue
foreach ($files as $filename) { //boucle qui ouvre les fichiers 1 par 1
$fichier = fopen($filename,"r" );
while (!feof ($fichier)) {
$donnees = strtolower(strip_tags(fgets($fichier, 4096)));
$pos = strpos($donnees, strtolower($_POST['recherche']));
if ($pos>0) $trouve=1;
}//fin de la boucle
if ($trouve==1) {
$resultat.="<a href='$filename'>$filename</a><br>";
$i++;
}
fclose($fichier);
$trouve=0;
}
}
?>
 
<html>
 
<head>
</head>
 
<body>
 <!-- formulaire de recherche -->
 <form name="moteur" method="post">
 <input type="text" name="recherche">
 <input type="submit" name="action" value="Recherche Interne">
 </form>
 <!--fin du formulaire -->
 
 <?
 //affichage des resultats
 echo "<h4>$i Résultat(s) pour l'occurence : $recherche </h4>";
 echo $resultat;
 if ($resultat=="" ) echo "pas de résultat trouvé";
 ?>
</body>
</html>

Reply

Marsh Posté le 25-02-2008 à 12:57:13   

Reply

Marsh Posté le 26-02-2008 à 09:40:55    

réponse à coté, mais renseigne toi sur htdig


---------------
Du tofu en Alsace : www.tofuhong.com
Reply

Marsh Posté le 26-02-2008 à 11:03:57    

if ($_POST['action']=="Recherche Interne" && $_POST['recherche']!="" ) {
 
essayes de ne pas utiliser des espaces dans les variables en POST!!

Reply

Marsh Posté le 26-02-2008 à 12:10:30    

En fait il me met:
Warning: Invalid argument supplied for foreach() in /mnt/150/sdb/9/d/dante20007/moteur.php on line 8
 
A cette ligne:
foreach ($files as $filename) { //boucle qui ouvre les fichiers 1 par 1

Reply

Marsh Posté le 26-02-2008 à 12:39:08    

1. Merci de placer les citations de codes dans tes post entre [code ] et [/code ] (sans les espaces).
2. Merci d'indenter ton code.

 

Vraisemblablement, foreach ne reçoit pas un tableau. Sinon il gueulerait pas. Donc ce qui est renvoyé par glob ne doit pas être un tableaux...

 

Dans quel cas glob retourne autre chose qu'un tableau?

 

http://fr.php.net/glob

Citation :

glob() retourne un tableau contenant les fichiers et les dossiers trouvés, un tableau vide si aucun fichier/dossier n'est trouvé ou FALSE en cas d'erreur.

 

En cas d'erreur, c'est vague...
M'enfin on peut quand même vérifier si ça vient de là :

 
Code :
  1. $files = glob("*.html" );
  2. if(!$files) die('Erreur');
  3. foreach ($files as $filename)
 

Si ça t'affiche le message 'erreur', je dirais qu'il doit y avoir un problème dans le masque que tu donne à glob.


Message édité par dwogsi le 26-02-2008 à 12:39:40

---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 26-02-2008 à 12:53:02    

en effet cela m'affiche le message erreur

Reply

Marsh Posté le 26-02-2008 à 13:22:54    

Que dois je faire??

Reply

Marsh Posté le 26-02-2008 à 14:20:05    

Tu passes bien *.html à glob()?
Si oui je vois pas trop de raison pour que ça renvoie false.
Mais vérifie bien ce que tu lui passe comme masque.


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 26-02-2008 à 14:22:06    

oui je suis sur, regarde le code que j'ai mis:  

Code :
  1. $files = glob("*.html" );


c'est bien ca?

Reply

Marsh Posté le 26-02-2008 à 14:25:32    

Ok, mais je préfère demander, on sait jamais.
Donc le problème viendrait de glob, et je sais pas trop ce qui pourrait ne pas aller... En même temps j'aime pas trop cette fonction, je préfère les bon vieux opendir(), readdir() et closedir() que tu peux également essayer pour ton script.


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 26-02-2008 à 14:25:32   

Reply

Marsh Posté le 26-02-2008 à 14:26:30    

est ce que tu pourrais me dire comment faire par rapport au code que j'ai mis plus haut?

Reply

Marsh Posté le 26-02-2008 à 16:13:42    

Tu peux remplacer la ligne où il y a glob par :

Code :
  1. $files = array();
  2. $dir = opendir('./');
  3. while($file = readdir($dir))
  4.    if (is_file('./'.$file) && substr($file,-4,4) == '.html' )
  5.        $files[] = $file;

Ça fait exactement le même boulot que ton glob() et au moins ça te lancera des erreurs en cas de problème.
Et à la limite lire les fichiers directement dans cette boucle plutôt que d'en stocker la liste puis boucler de nouveau dessus par la suite.


Message édité par dwogsi le 26-02-2008 à 16:17:30

---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Sujets relatifs:

Leave a Replay

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