Aide - Recherche - Membres - Calendrier
Version complète : moteur de recherche php mysql
Forum Développeur - Administration serveur, programmation et base de données > Programmation > PHP
nizouille
hello, J'ai mis en place un moteur de recherche pour mon site pour [url=http://www.enseignons.be/] les enseignants [/url] mais ça ne fonctionne pas dès que ça dépasse un mot. Testez-le ! D'où vient le problème ?
QUOTE
<?php ;         if (!empty([/color]))    {    [/color]//on passe en minuscule    [/color]//on remplace les + par des espaces    [/color]//idem pour \    [/color]//idem pour ,    [/color]//idem pour :    [/color]//on encode la recherche    [/color]);    [/color]);    [/color];    for([/color]++)        {        [/color];        }    [/color]//requete permettant de connaitre le nombre de résultats    [/color]// requête limitante.        [/color]);    [/color]);    [/color]);    if([/color])        {        [/color]);        [/color];        if([/color];          else            {            while([/color]))                  {                [/color];                [/color];                [/color]);                [/color]);                [/color]// a quoi sert cette variable                [/color];                [/color];                [/color];                if ([/color]) { [/color]; [/color]()); [/color]);   [/color]; } else { [/color]; [/color]()); [/color]);   [/color]; }                [/color]);                [/color]);                [/color]);                [/color]);                [/color]);                  [/color])));                  [/color]);                [/color]);                                    echo [/color]\"                                <strong>$niveau - $cours : $titre  </strong> <span class='legende center'> Envoy&eacute; le :  $date</span>                              <span class='legende'>                                $description                            </span> \"[/color];                [/color]);                            echo[/color]\"                                $fichier                            <span class='center'>                                 Plus d'informations sur ce document                            </span>                            <hr />\"[/color];                }            [/color]);                     [/color]/****************** Mise en place de la navigation. ************************************/        [/color]);        if([/color])              {            echo [/color];                }                            if ([/color])              {            for([/color]++)                {                echo [/color];                }            }        if(([/color])            {            echo [/color];            }                echo [/color];            }        }    } else    {     echo([/color]);    }     [/color]
NeRi
[/color]; for([/color]++) { [/color]; } [/quote] Il me semble que tu oublie de définir ta variable $operateur Sinon la meilleur façon de débugger ce genre de probleme est d'afficher ta requete SQL ohmy.gif
nizouille
CODE
<form action="/search.php3" method="post" class="center" style="margin:0px;">



<p class="noindent"><label for="recherche"></label><input type="text" size="12" name="recherche" id="recherche" onfocus="this.className='focus';" onblur="this.className='input';" style="margin-left: 25px; margin-top: 20px;" accesskey="4" />



<input type="submit" name="B1" value="Rechercher" style="margin-left: 20px;"/>



   <input type="hidden" name="operateur" value="OR" /></p>



</form>


j'ai oublié de signaler que l'operateur passe dans mon form, sorry
nizouille
Gné en postant ... je viens de me rendre compte que je ne récupérais pas la variable passée en post ...

gné.
NeRi
Il faut que tu précise $_POST["operateur"] c'est plus prudent et ça dépend de ton serveur qui doit surement avoir REGISTER_GLOBALS à OFF c'est mieux pour la sécurité mais ça t'oblige à appeler tes variables de formulaire avec $_POST[]

As tu essayé d'affiché ta requete ?
nizouille
Je te dis quoi ce soir, pcq là suis au boulot.
Merci de ton aide.
nizouille
Hello, J'avais fait une petite erreur dans les variables ... Voici le bon code. J'ai encore une question. Cette ligne-ci me permet de mettre les termes sélectionnés en gras, comme dans google smile.gif : $description ); [/color]); Le problème est que ça ne fonctionne que avec un seul mot, et pas avec plusieurs mots. Merci de votre aide. Voici le lien pour ceux que ça intéresse : http://gregory.kokanosky.free.fr/tutorial/moteur/
QUOTE
<?php ;         if (!empty([/color]))    {    [/color]//on passe en minuscule    [/color]//on remplace les + par des espaces    [/color]//idem pour \    [/color]//idem pour ,    [/color]//idem pour :    [/color]//on encode la recherche    [/color]);    [/color]);    [/color];    for([/color]++)        {        [/color];        }    [/color]//requete permettant de connaitre le nombre de résultats    [/color]// requête limitante.        [/color]);    [/color]);    [/color]);    if([/color])        {        [/color]);        [/color];        if([/color];          else            {            while([/color]))                  {                [/color];                [/color];                [/color]);                [/color]);                [/color]// a quoi sert cette variable                [/color];                [/color];                [/color];                if ([/color]) { [/color]; [/color]()); [/color]);   [/color]; } else { [/color]; [/color]()); [/color]);   [/color]; }                [/color]);                [/color]);                [/color]);                [/color]);                [/color]);                  [/color])));                  [/color]);                [/color]);                                    echo [/color]\"                                <strong>$niveau - $cours : $titre  </strong> <span class='legende center'> Envoy&eacute; le :  $date</span>                             <span class='legende'>                                $description                            </span> \"[/color];                [/color]);                            echo[/color]\"                                $fichier                            <span class='center'>                                 Plus d'informations sur ce document                            </span>                            <hr />\"[/color];                }            [/color]);             [/color]
NeRi
QUOTE
J'ai encore une question.   Cette ligne-ci me permet de mettre les termes sélectionnés en gras, comme dans google smile.gif  :   $description );                [/color]); Le problème est que ça ne fonctionne que avec un seul mot, et pas avec plusieurs mots.  
Pourquoi ne pas faire un: [quote]ColoringCode[/url]"]<?php $w =; for $description =; } ?>
nizouille
Probablement parce que ça ne fonctionne pas wink.gif
nizouille
Personne n'a de solution ?
J'ai probablement mal utilisé ce que m'a proposé Neri ... C'est quoi la variable w d'ailleurs ?

Merci de votre aide.
NeRi
Ce bout de code classe tous les mots séparés par un "+" dans la chaine dans un tableau.
On fait ensuite une boucle pour mettre en gras chaque élément du tableau (donc chaque élément recherché)
Voir fonction explode et structure for dans la doc wink.gif

[quote]$tab =;

for

$description =;

}
NeRi
QUOTE
$_POST[\"keywords\"]
.. est mis pour la valeur envoyée pour ton formulaire en fait c'est ..
QUOTE
$_POST[\"nom_du_champ\"]
nizouille
le code que tu m'as donné ne fonctionne qu'à partir du deuxième mot clé.
Est-ce que ça ne viendrait pas de !=

J'ai essayé avec == mais ca plante.
Merci de ton aide
Thanh
essayes avec REGEXP, pitete que ça sera plus simple.
NeRi
[quote]$tab =;

for

$description =;

}

Je crois que la ce sera définitivement bon smile.gif

Mais effectivement regarde du coté de regxp et des expressions regulieres... il y a des tutos de qwix la dessus wink.gif
Thanh
http://dev.mysql.com/doc/mysql/fr/regexp.html

smile.gif
Antoine
Vous savez que c'est plus simple à faire en javascript... Je dis ça mais je dis rien smile.gif Sinon, euh, je mettrais plutot : [quote]$tab =; $mots =; for     $mots .=; }//fin boucle [/color] $mots=; $mots .=; $chaine = Ce sera plus rapide à mon avis.
NeRi
J'imagine que ta syntaxe génere une expression reguliere AZntoine tu peux commenter un peu plus ohmy.gif La j'ai du mal à comprendre..

ça génere une expression de ce type? :
CODE
#(mot1|mot2|mot3)#i


En fait c'est surtout ce "i" qui me gene ohmy.gif et le $0 aussi ohmy.gif
Antoine
As-tu les tutos ? smile.gif

En fait je génère une expression telle que
CODE
#(mot|mot|mot|mot)#i

Le i sert à être insensible à la casse.

et le $0 sert à réutiliser toute la chaine captée dans le remplacement. J'aurais pu mettre $1 car le mot est contenu dans la première parenthèse.

Pourquoi utiliser un | à la place de plusieurs requête : c'est simple : c'est plus rapide.

Voili voilà
NeRi
Merci Antoine ! biggrin.gif
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'informations, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2009 Invision Power Services, Inc.