IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

moteur de recherche avec plusieurs mots clés


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 47
    Par défaut moteur de recherche avec plusieurs mots clés
    bonjour,
    je souhaite faire un moteur de recherche sur mon site, j'ai fait des recherches sur internet et j'ai trouvé un scripts, mais il ne gère qu'un seul mot clé!!
    alors que moi je veux faire une recherche pour plusieurs mots clé!!!
    comment faire?
    C'est très important pour moi cette recherche, merci.

  2. #2
    Membre émérite Avatar de obito
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 773
    Par défaut
    Salut !

    Pour plusieurs mots clés? Je n'ai même pas essayé avec un seul mais j'imagine que tu as une table dans ta base avec des sortes de mot clés menant vers les pages qu'il faut ?

    Enfin je sais pas comment ca marche mais sinon voila si ca marche par BDD (ce qui est surement le cas :

    tu explode la chaine de recherche sur les espaces comme ca tu récupère chaque mot clés, et après ben tu fais une requete avec des LIKE ... Déjà explique nous comment s'effectue une recherche sur un mot clé

  3. #3
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 47
    Par défaut j'ai un trouvé un script pour un seul mot clé
    oui c'est vrai il nécessite une table avec 3 champs: lien, keywords et titre, voilà le script principale qui parcours les fichiers et insère le contenue des balises méta dans la table:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    function ScanDir($Directory){
    $MyDirectory = opendir($Directory);
     while($Entry = readdir($MyDirectory)) {
       /*  vérifie que le fichier n'est pas un répertoire  */
      if(is_dir($Entry)&& $Entry != "." && $Entry != ".." ) {
        ScanDir("$Entry/$Directory" );
      }
      else {
        /*  type de fichiers qui seront indexés  */
        if (eregi(".php",$Entry)) { //
          $MetaTags = get_meta_tags($Directory."/".$Entry);
          /*  requete d'insertion du fichier dans la table  */
     
     
     
    /*if (!isset($MetaTags["robots"])) { die ($Directory."/".$Entry . ' pas de metatags robots'); }
    */ 
     
          if ($MetaTags["robots"] == "all" )
     
    	   {
            $MetaKey = $MetaTags["keywords"];
            //$MetaKey = strtoupper($MetaKey);   est-ce utile?
            $MetaTitre = $MetaTags["description"];
    		$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 ("<br><br><b>Erreur de modification de la table par la requete</b><br> \"$query\"" );
          }
        }
      }
     }
    closedir($MyDirectory);
    }
    $open_basedir="..";
    ScanDir("." );
    ensuite ya un deuxième script qui fait la recherche sur cette table pour afficher le résultat et je pense que c'est dans la requête sql qu'il modifier pour que ça traite plusieurs mots clé,
    voilà le deuxième script:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
     
    mysql_connect($host, $user, $password) or die ("Connexion au serveur impossible");
     
    // on choisit la bonne base
    mysql_select_db($bdd) or die ("Connexion a la base impossible");
     
    echo "
    <html>
    <body>";
    $Mot=$_REQUEST["Mot"];
    if (($Mot == "")||($Mot == "%")) {
    // Si aucun mot clé n'a été saisi,
    // le script demande à l'utilisateur
    // de bien vouloir préciser un mot clé
     
    	echo "
    	Veuillez entrer un mot clé s'il vous plaît!
    	<p>";
     
    }
     
    else {
    $query = "SELECT distinct count(lien) FROM search
    	WHERE keyword LIKE \"%$Mot%\"
    	OR titre LIKE \"%$Mot%\"
    	";
     
    	$result = mysql_query($query);
     
    	$row = mysql_fetch_row($result);
     
    	$Nombre = $row[0];
     
    // Si aucun enregistrement n'est retourné,
    // on affiche un message adéquat
    if ($Nombre == "0") {
    	echo "
    	<h2>Aucun résultat ne correspond à votre recherche</h2>
     
    	<p>
     
    	";
     
    }
     
    // Sinon, on affiche le nombre d'enregistrements correspondant
    // et les résultats eux-mêmes
    else {
    	$query = "SELECT distinct lien,keyword,titre FROM search
    	WHERE keyword LIKE \"%$Mot%\"
    	OR titre LIKE \"%$Mot%\" ORDER by titre ASC";
     
    	$result = mysql_query($query);
     
    	// Si un seul enregistrement est trouvé, on affiche un message au singulier
    	if ($Nombre == "1") {
    	echo "
    	<a name=\"#resultat\"><h2>Résultat: Un article trouvé</h2></a>
     
    	<p>";
     
    	}
    	// Dans le cas contraire le message est au pluriel...
    	else {
    	echo "
    	<a name=\"#resultat\"><h2>Résultat: $Nombre articles trouvés</h2></a>
     
    	<p>";
     
    	}
    	while($row = mysql_fetch_row($result))
    	{
    		echo "
    		<p>\n
    		<b>$row[2]</b>\n
    		<br><a href=\"../$row[0]\">Visualiser l'article</a>\n
    		<p>\n
    		";
     
    	}
    }
     
    }
     
    // on ferme la base
    mysql_close();
    ?>

    ça marche bien pour un seul mot clé, mais pour plusieurs!!!!!

  4. #4
    Membre émérite Avatar de obito
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 773
    Par défaut
    Salut !

    Bon je vais essayer de te proposer un script sans garanti de succès comme je n'ai jamais essayé^^:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    if (($Mot == "")||($Mot == "%")) {
    // Si aucun mot clé n'a été saisi,
    // le script demande à l'utilisateur
    // de bien vouloir préciser un mot clé
     
    	echo "
    	Veuillez entrer un mot clé s'il vous plaît!
    	<p>";
     
    }
     
    else {
    //on enleve les espaces avant et apres la chaine
    $mot=trim($mot);
    //on explose la chaine si il y a différent mot clés
    $array=explode(' ',$mot);
    $query = "SELECT distinct count(lien) FROM search
    	WHERE keyword LIKE \"%$array[0]%\"
    	OR titre LIKE \"%$array[0]%\"
    	";
     
    	for ($i=1,$i<=count($array),$i++){
     
          $query.=" OR keyword LIKE \"%$array[$i]%\"
    	OR titre LIKE \"%$array[$i]%\"";
    }
     
    // Si aucun enregistrement n'est retourné,
    // on affiche un message adéquat
    if ($Nombre == "0") {
    	echo "
    	<h2>Aucun résultat ne correspond à votre recherche</h2>
     
    	<p>
     
    	";
     
    }
     
    // Sinon, on affiche le nombre d'enregistrements correspondant
    // et les résultats eux-mêmes
    else {
    	$query = "SELECT distinct lien,keyword,titre FROM search
    	WHERE keyword LIKE \"%$Mot%\"
    	OR titre LIKE \"%$Mot%\" ORDER by titre ASC";
     for ($i=1,$i<=count($array),$i++){
     
          $query.=" OR keyword LIKE \"%$array[$i]%\"
    	OR titre LIKE \"%$array[$i]%\"";
    }
    	$result = mysql_query($query);
     
    	// Si un seul enregistrement est trouvé, on affiche un message au singulier
    	if ($Nombre == "1") {
    	echo "
    	<a name=\"#resultat\"><h2>Résultat: Un article trouvé</h2></a>
     
    	<p>";
     
    	}
    	// Dans le cas contraire le message est au pluriel...
    	else {
    	echo "
    	<a name=\"#resultat\"><h2>Résultat: $Nombre articles trouvés</h2></a>
     
    	<p>";
     
    	}
    	while($row = mysql_fetch_row($result))
    	{
    		echo "
    		<p>\n
    		<b>$row[2]</b>\n
    		<br><a href=\"../$row[0]\">Visualiser l'article</a>\n
    		<p>\n
    		";
     
    	}
    }
     
    }
     
    // on ferme la base
    mysql_close();

  5. #5
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 47
    Par défaut
    je suis entrain de tester le sript que tu m'a donné, mais je pense que le serveur a du mal à interpréter le code suivant;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $query = "SELECT distinct count(lien) FROM search
    	WHERE keyword LIKE \"%$array[0]%\"
    	OR titre LIKE \"%$array[0]%\"
    	";
     
    	for ($i=1;$i<=count($array);$i++){
     
          $query.="OR keyword LIKE \"%$array[$i]%\"
    	OR titre LIKE \"%$array[$i]%\"";
    	$result = mysql_query($query);
    il indique une erreur Notice: Undefined offset: 2 in c:\program files\easyphp1..;

    c'est dans la ligne suivante:
    $query.="OR keyword LIKE \"%$array[$i]%\"

    je sais as pour la syntaxe de concaténation des deux chaine de requête!!!

  6. #6
    Membre émérite Avatar de obito
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 773
    Par défaut
    c'est juste que l'on dépasse l'index du tableau je crois

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for ($i=1;$i<count($array);$i++){
    Ca ira surement mieux et ça pour les deux for

    EDIT : Dans tes requete aussi faut voir ce que tu souhaite donc un OR ou un AND (pour les titres par exemple)... ca je sais pas trop en revanche

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. faire une recherche avec plusieurs mot-clés
    Par jakouz dans le forum Débuter
    Réponses: 2
    Dernier message: 16/12/2010, 13h50
  2. [MySQL] recherche avec plusieurs mots dans mon moteur
    Par hadjiphp dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 25/05/2009, 08h53
  3. recherche avec plusieurs mots-clé
    Par MAMANHOU dans le forum IHM
    Réponses: 6
    Dernier message: 12/07/2007, 10h05
  4. Moteur de recherche et plusieurs mots clés
    Par jack1234 dans le forum Langage
    Réponses: 13
    Dernier message: 14/12/2005, 10h29
  5. Réponses: 6
    Dernier message: 04/11/2005, 17h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo