begin process at 2012 05 31 16:49:11
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Divers

 > 

Général

 > 

Recherche dans bdd


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Recherche dans bdd

jeudi 15 février 2007 à 10:54:43 | Recherche dans bdd

flopad

Bonjour tout le monde,

j'avais sur mon intranet un moteur de recherche interne qui fonctionnait parfaitement.
J'ai changé le mode de fonctionnement, le contenu de mes pages s'affiche via une bdd. Mon ancien moteur ne fonctionne donc plus puiqu'il indexait mes pages lorsque le contenu était en dur dans les pages.

Est ce que qq'un pourrait m'aider pour adapter mon moteur à ce nouveau fonctionnement...?

Voici mon code actuel :

Il faudrait peut être modifier la valeur de la variable textedocument..?
Je ne sais pas comment m'y prendre.
Ma bdd est structurée de la manière suivante :
une table correspond à une page intranet avec un champ id, un champ texte1 et il faudrait surement que je rejoute aussi un champ adresse avec le chemin d'accès à la page?

// *******************************************************************************
// Localisation de l'index dans lequel doit être effectuée la recherche
// *******************************************************************************

$fichierIndex="indexsite.dat";

// *******************************************************************************
// Liste des "mots vides", dont les valeurs ne doivent pas être prises en compte
// lors des recherches dans l'index
// *******************************************************************************

$motsVides=" and or et ou le la les un une du de des a à au aux son sa ses ne ni non sauf ce ces cet je tu il elle on nous vous ils elles etc mon ma ton ta vos se y en ";

// *******************************************************************************
// Affichage d'un message d'avertissement dans le cas où  le site n'a pas encore
// été indexé
// *******************************************************************************

$requete = isset($_POST['requete']) ? $_POST['requete'] : false;
if(!file_exists("indexsite.dat")) {
  print("Le site Web n'a pas encore été indexé : veuillez exécuter le <b>script d'indexation</b> avant d'effectuer votre première recherche.\n");
  exit;
}

// *******************************************************************************
// Affichage d'un message d'avertissement dans le cas de figure où l'utilisateur
// a activé la recherche sans avoir préalablement saisi de requête ($requete est nul)
// *******************************************************************************

if(!$requete) {
  print("<center>\n");
  print("<font face=\"$policeResultats\" size=\"-1\" color=\"$couleurPoliceResultats\">\n");
  print("Vous avez activé la recherche sans avoir préalablement saisi votre requête.<br>");
  print("<a href=\"recherche.php\">Cliquez ici</a> pour effectuer une nouvelle recherche.<br>\n");
  print("</font>\n");
  print("</center>\n");
}

else {

// *******************************************************************************
// Cas de figure où l'utilisateur a bien saisi une requête
// *******************************************************************************

  // *******************************************************************************
  // Analyse de la requête et préparation de la recherche. La requête (entrée par
  // l'utilisateur dans la valeur $requete) est décomposée en une série de mots clés,
  // stockés dans les tableaux $expressions et $motsCles
  // *******************************************************************************

  // === Premier nettoyage de la requête formulée par l'utilisateur ===

  $requete=trim(stripslashes($requete));

  // ***************************************************
  // === Extraction des expressions entre guillemets ===
  // ***************************************************

  $requete1=$requete;

  $expressions[]="Liste des expressions";

  while($testExpress=ereg("[\"]([^\"]+)[\"]",$requete1,$corresExpress)) {
    $exp=$corresExpress[1];
    $expressions[]=$exp;
    $requete1=ereg_replace($corresExpress[0],"",$requete1);
  }

  $nombreExpressions=count($expressions)-1; // Nombre d'expressions à analyser
 
  // ********************************
  // === Extraction des mots-clés ===
  // ********************************
 

 

  // ********************************
  // === Extraction des mots-clés ===
  // ********************************

  // === Définition de la fonction netGuil,
  // utilisée pour le nettoyage des termes
  // isolés compris entre guillemets ===

  function netGuil($term) {
    if(ereg("^[\"]*([^\"]+)[\"]*$",$term,$corres)) {
      $reps=$corres[1];
      return $reps;
    }
    else {
      return($term);
    }
  }

  // === Stockage des valeurs dans le tableau $motsCles ===

  $requete2=$requete;

  $motsCles[]="Liste des mots-clés";

  $mot=trim(stripslashes(strtok($requete2," ")));
  if(!(ereg("[ ]".$mot."[ ]",$motsVides))) {
    $motsCles[]=netGuil($mot);
  }
  while($mot=trim(stripslashes(strtok(" ")))) {
    if($mot and (!(ereg("[ ]".$mot."[ ]",$motsVides)))) {
      $motsCles[]=netGuil($mot);
    }
  }

  $nombreMotsCles=count($motsCles)-1;       // Nombre de mots-clés à analyser


  // ************************************************************************************
  // Ouverture du fichier indexsite.dat et stockage des lignes dans le tableau $contenuIndex
  // ************************************************************************************

  $contenuIndex=file($fichierIndex);

  $nlignesIndex=count($contenuIndex);
  $nombreDocumentsIndexes=($nlignesIndex-1)/4;

  // ************************************************************************************
  // Stockage des données dans les tableaux $cheminDocument, $titreDocument,
  // $descriptionDocument, $texteDocument
  // ************************************************************************************

  for($compt=1;$compt<=$nombreDocumentsIndexes;$compt++) {
    $cheminDocument[$compt]=trim(stripslashes($contenuIndex[(4*($compt-1))+1]));
    $titreDocument[$compt]=trim(stripslashes($contenuIndex[(4*($compt-1))+2]));
    $descriptionDocument[$compt]=trim(stripslashes($contenuIndex[(4*($compt-1))+3]));
    $texteDocument[$compt]=trim(stripslashes($contenuIndex[(4*($compt-1))+4]));
  }

    // Liste des codes htmls spéciaux
$caractere_special=array(
"&agrave;"=>"à",
"&aacute;"=>"á",
"&acirc;"=>"â",
"&atilde;"=>"ã",
"&auml;"=>"ä",
"&aring;"=>"å",
"&aelig;"=>"æ",
"&ccedil;"=>"ç",
"&egrave;"=>"è",
"&eacute;"=>"é",
"&ecirc;"=>"ê",
"&euml;"=>"ë",
"&icirc;"=>"î",
"&iuml;"=>"ï",
"&ocirc;"=>"ô",
"&ouml;"=>"ö",
"&ugrave;"=>"ù",
"&uacute;"=>"ú",
"&ucirc;"=>"û",
"&uuml;"=>"ü",
"&amp;"=>"&",
);


foreach($caractere_special as $caractere_code=>$caractere_traduction){
$titreDocument = str_replace("$caractere_code","$caractere_traduction",$titreDocument);
$texteDocument = str_replace("$caractere_code","$caractere_traduction",$texteDocument);
 }
  // ***************************************************************************
  //          ========================================================
  //          === Lancement de la procédure d'évaluation des pages ===
  //          ========================================================
  //
  // Chaque page est passée en revue et se voit attribuer des points
  // selon les règles suivantes :
  //
  // - 2 point si la requête (considérée comme expression) est présente dans le titre
  // - 1 point si la requête (considérée comme expression) est présente dans le texte indexé
  //
  // - 2 point par expression présente dans le titre
  // - 2 point par mot-clé présent dans le titre
  //
  // - 1 point par expression présente dans le texte indexé
  // - 1 point par mot-clé présent dans le texte indexé
  //
  // Note : une ou plusieurs expressions présentes donnent naturellement un meilleur
  // score à la page
  //
  // ***************************************************************************

  // Les différents documents indexés spnt passés en revue et analysés

  for($compt=1;$compt<=$nombreDocumentsIndexes;$compt++) {

    $score[$compt]=0;

    // === Recherche de la requête (considérée comme expression) dans le titre du document : 2 points
    //if(eregi("(^|[ .,:;!?'()])".$requete."([ .,:;!?'()]|$)",$titreDocument[$compt])) $score[$compt]=$score[$compt]+2;

    // === Recherche de la requête (considérée comme expression) dans le texte indexé : 1 points
    if(eregi("(^|[ .,:;!?'()])".$requete."([ .,:;!?'()]|$)",$texteDocument[$compt])) $score[$compt]=$score[$compt]+1;


    for($a=1;$a<=$nombreExpressions;$a++) {
    // ===== Recherche des expressions =====

      // === Recherche de l'expression dans le titre du document : 2 points s'il y a correspondance
      if(eregi("(^|[ .,:;!?'()])".$expressions[$a]."([ .,:;!?'()]|$)",$titreDocument[$compt])) $score[$compt]=$score[$compt]+2;

      // === Recherche de l'expression dans le texte indexé : 1 point s'il y a correspondance
      if(eregi("(^|[ .,:;!?'()])".$expressions[$a]."([ .,:;!?'()]|$)",$texteDocument[$compt])) $score[$compt]=$score[$compt]+1;

    }

    for($b=1;$b<=$nombreMotsCles;$b++) {
    // ===== Recherche des mots-clés =====

      if(eregi("([^*]*)[*]",$motsCles[$b],$corMotCle)) {

      // l'utilisateur a fait suivre le mot-clé d'une astérisque (il faut donc étendre la recherche)

        // === Recherche du mot-clé dans le titre du document : 2 points s'il y a correspondance
        if(eregi("(^|[ .,:;!?'()])".$corMotCle[1],$titreDocument[$compt])) $score[$compt]=$score[$compt]+2;

        // === Recherche du mot-clé dans le texte indexé : 1 point s'il y a correspondance
        if(eregi("(^|[ .,:;!?'()])".$corMotCle[1],$texteDocument[$compt])) $score[$compt]=$score[$compt]+1;

      }

      else {
       // le mot-clé ne comporte pas d'astérisque

        // === Recherche du mot-clé dans le titre du document : 2 points s'il y a correspondance
        if(eregi("(^|[ .,:;!?'()])".$motsCles[$b]."([ .,:;!?'()]|$)",$titreDocument[$compt])) $score[$compt]=$score[$compt]+2;

        // === Recherche du mot-clé dans le texte indexé : 1 point s'il y a correspondance
        if(eregi("(^|[ .,:;!?'()])".$motsCles[$b]."([ .,:;!?'()]|$)",$texteDocument[$compt])) $score[$compt]=$score[$compt]+1;

      }
    }
  }

  // ************************************************************************************
  // Tri des résultats en vue de leur affichage :
  // Les pages seront affichées de la plus pertinente à la moins pertinente
  // ************************************************************************************

  // Détermination du score le plus élevé parmi toutes les pages analysées

  $HiScore=max($score);


  // TRI du tableau à l'aide de la fonction asort

  arsort($score);

  // Création du tableau $documentsCorrespondantsOrd
  $documentsCorrespondantsOrd[]=0;

  for(reset($score);$cle=key($score);next($score)) {
    if(current($score)>0) {
      $documentsCorrespondantsOrd[]=$cle;
    }
  }

  $nombreCorrespondances=count($documentsCorrespondantsOrd)-1;


  // ************************************************************************************
  // Les résultats sont affichés dans un tableau, dont les caractéristiques ont été
  // précisées en début de script.
  // Note : les pages sont affichées dans l'ordre décroissant de leur pertinence
  // ************************************************************************************

  print("<table width=\"$largeurTableau\" border=\"0\" align=\"center\"> \n");  // Début du code pour l'affichage du tableau
  print("<tr><td> \n");

  if($nombreCorrespondances<1) {
    print("<center> \n");
    print("<font face=\"$policeResultats\" color=\"$couleurPoliceResultats\" size=\"-1\"> \n");
    print("Désolé, aucune page ne correspond à la recherche : '<b>$requete</b>'. <br><br> \n");
    print("</font> \n");
    print("</center> \n");
  }

  else {
    if(@ !$p) $p=1;

    if($nombreCorrespondances==1) {
      print("<font face=\"$policeResultats\" color=\"$couleurPoliceResultats\" size=\"-1\"> \n");
      print("La requête '<b>$requete</b>' a donné <b>1</b> résultat. <br>\n");
      print("</font> \n");
    }

    else {
      if($nombreCorrespondances>=$NombreRepMax) {
        print("<font face=\"$policeResultats\" color=\"$couleurPoliceResultats\" size=\"-1\"> \n");
        print("La requête '<b>$requete</b>' a donné plus de $NombreRepMax résultats. <br>\n");
        print("</font> \n");
        $nombreCorrespondances=$NombreRepMax;
      }

      else {
        print("<font face=\"$policeResultats\" color=\"$couleurPoliceResultats\" size=\"-1\"> \n");
        print("La requête '<b>$requete</b>' a donné <b>$nombreCorrespondances</b> résultats. <br>\n");
        print("</font> \n");
      }
    }

    print("<font face=\"$policeResultats\" color=\"$couleurPoliceResultats\" size=\"-1\"> \n");
    print("Liste des pages <b>".$p."</b> à <b>".(min(($p+$NombreRepPages-1),$nombreCorrespondances))."</b> :<br><br>");
    print("</font> \n");

 

    for($compt=$p;$compt<=min(($p+$NombreRepPages-1),$nombreCorrespondances);$compt++) {
      print("<font face=\"$policeResultats\" color=\"$couleurPoliceResultats\" size=\"-1\"> \n");
      print("<b>$compt</b>. <a href=\"".$cheminDocument[$documentsCorrespondantsOrd[$compt]]."\"><b>".$titreDocument[$documentsCorrespondantsOrd[$compt]]."</b></a><br> \n");
      print($descriptionDocument[$documentsCorrespondantsOrd[$compt]]."<br><br> \n");
      print("</font> \n");
    }

    print("<center> \n");

    if(($p-$NombreRepPages)>0) {
      print("<font face=\"$policeResultats\" color=\"$couleurPoliceResultats\" size=\"-1\"> \n");
      print("<a href=\"resultats.php?requete=".rawurlencode($requete)."&p=".($p-$NombreRepPages)."\">&lt;&lt; page précédente</a> &nbsp; \n");
      print("</font> \n");
    }

    if($nombreCorrespondances>$NombreRepPages) {
      print("<font face=\"$policeResultats\" color=\"$couleurPoliceResultats\" size=\"-1\"> \n");
      for($a=1;$a<=(floor(($nombreCorrespondances-1)/$NombreRepPages)+1);$a++) {
        if((floor($p/$NombreRepPages)+1)==$a) {
          print("$a &nbsp; \n");
        }
        else {
          @ print("<a href=\"resultats.php?requete=".rawurlencode($requete)."&p=".(($a-1)*$NombreRepPages+1)."\">$a</a> &nbsp; \n");
        }
      }
      print("</font> \n");
    }

    if(($p+$NombreRepPages)<=$nombreCorrespondances) {
      print("<font face=\"$policeResultats\" color=\"$couleurPoliceResultats\" size=\"-1\"> \n");
      @ print(" &nbsp; <a href=\"resultats.php?requete=".rawurlencode($requete)."&p=".($p+$NombreRepPages)."\">page suivante &gt;&gt;</a> \n");
      print("</font> \n");
    }

    print("</center> \n");
  }

  // **************************************************************************
  // Sauvegarde de la requête dans le fichier req.txt
  // **************************************************************************

  $idFiqReq=fopen("req.txt","a+");
  fputs($idFiqReq,$requete."\n");
  fclose($idFiqReq);
}

jeudi 15 février 2007 à 11:06:19 | Re : Recherche dans bdd

Teclis01

Mon dieu des expression régulières de partout au secourssssss
Euh tu veux adapter ce truc à une bdd ?

Cette url t'explique comment te connecter a une bdd MySQL et je te laisse "découvrir le reste"

http://fr.php.net/manual/fr/function.mysql-connect.php

--------------------------------------------------------------------------------------------------
         Il vaut mieux poser une question et passer pour bête que le rester toute sa vie

jeudi 15 février 2007 à 11:12:43 | Re : Recherche dans bdd

flopad

Aie....désolé, on fait ce qu'on peut ;-)

En fait, ce n'est pas le fait de me connecter à ma bdd qui me pose problème, c'est la manière de fonctionner.
Je ne sais pas comment m'y prendre pour aller remonter la bonne page correspondant à la recherche...
jeudi 15 février 2007 à 11:17:11 | Re : Recherche dans bdd

Teclis01

fais un echo de $_POST['requete']

--------------------------------------------------------------------------------------------------
         Ilvaut mieux poser une question et passer pour bête que le rester toutesa vie

jeudi 15 février 2007 à 11:24:32 | Re : Recherche dans bdd

flopad

Ben le $_POST['requete'] devrait me donner ce qui est à rechercher.
Après, il suffit que je cherche ça dans ma base via un select * from table1, table2,etc... like $_POST['requete'].
Ensuite, je dois pouvoir récupérer l'adresse de la page sans soucis.

Je vais essayer de voir ça, j'aurais aimé garder le fonctionnement d'affichage des résultats que j'avais avant qui se faisait selon le nombre d'occurences...
Il faudrait aussi que je conserve la lecture des pages et des keywords, c'est pourquoi j'aimerais intégrer cette nouvelle recherche à celle existante...


Cette discussion est classée dans : recherche, requete, print, score, compt


Répondre à ce message

Sujets en rapport avec ce message

Moteur de recherche [ par flopad ] Bonjour tout le monde,j'ai récupéré puis adapté un script de moteur de recherche pour mon intranet.Mon soucis est que lorsqu'il y a plusieurs pages de Tableau données apres requete sql [ par flopad ] Bonjour,J'ai une base de données que j'utilise pour gérer le cms de mon intranet.Elle est composée d'une table, elle même composée de 4 champs : nom_p Probleme avec recherche de plusieurs mots-clés [ par cyse ] Bonsoir,J'essai de faire un moteur de recherche en interne pour un site.Je ne suis pas super doué en php encore et je n'arrive pas à cerner quelquecho Requete sur moteur de recherche [ par sana72 ] Bonjour, Je voudrais creer un script qui me permettrait de savoir a quelle position se trouve mon site sur un ou des moteur de recherche, Voila l'idée Recherche dans MySQL impossible !! [ par freddy1787 ] Salut,Sa fait 2jours que je me prend la tete sur 10lignes de code et j'arrive pas a voir la faute!!!Function recherchet($id,$search){require("conf1.ph recherche un mot dans une base de donnee [ par maxelpiratos ] bonjour a tous!, je voudrais faire une requete qui recherche un mot dans une table. seulement c un champ text donc il faudrait que la requete reco texte avec image (+formulaire) [ par JackNUMBER ] bonjour à tous !!je suis novice dans le PHP et je voudrai savoir comment "combiner" 2 scripts que j'ai trouvé: un pour uploader des fichiers et un pou Moteur recherche [ par ghostkill77 ] Bonsoir tout le monde , j'ai repris une des sources qui se trouvais sur ce site mais je n'arrive pas la faire marchée . En effet je pense que le probl Un petit moteur de recherche :-) [ par grignote1 ] Bonjour à tous ! Je cherche à intégrer un moteur de recherche à mon site, mais malgré toutes mes tentatives je ne parvi REQUETE AVEC WHERE SUR UN CHAMPS NUMERIQUE [ par romualdj02 ] Bonjour, Je souhaite faire une recherche dans une base de donnée access avec comme critère de recherche un champs numérique : WHERE CODE=$code Si je f


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,515 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales