Tableau données apres requete sql

flopad Messages postés 528 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 6 mars 2009 - 15 mars 2007 à 15:05
kishkaya Messages postés 365 Date d'inscription samedi 26 juin 2004 Statut Membre Dernière intervention 17 avril 2008 - 20 mars 2007 à 13:00
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_page,chemin,titre,contenu.

Je voudrais mettre en place un moteur de recherche sur mon intranet.
J'ai donc une requete qui se fait du type :
$sql= "SELECT * FROM cms WHERE nom_page OR titre OR contenu LIKE '%".$requete."%'";

$req = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());

je voudrais à partir de là isoler le résultat de chaque champ et l'affecter à 4 variables $nom_page, $titre, $chemin et $contenu.
Ensuite, il faudrait que j'affecte tout ce qui a été trouvé suite à la requete dans un tableau dans lequel je vais pouvoir retraiter les infos stockées genre supprimer tous les caractères HTML etc...

Comment faire cela...?

MERCI!!!

Pour info, j'avais avant un moteur du style suivant et donc le résultat me convennait mais qui ne fonctionne bien sur plus maintenant que le contenu des pages est stocké dans une bdd :

$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 script d'indexation 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("\n");
  print("Vous avez activé la recherche sans avoir préalablement saisi votre requête.
");
  print("Cliquez ici pour effectuer une nouvelle recherche.
\n");
  print("\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;

1 réponse

kishkaya Messages postés 365 Date d'inscription samedi 26 juin 2004 Statut Membre Dernière intervention 17 avril 2008
20 mars 2007 à 13:00
Ca fait pas mal de lecture.
A quand la coloration syntaxique

_Marikou
0
Rejoignez-nous