Probleme script moteur de recherche

Résolu
McGyver59 Messages postés 26 Date d'inscription vendredi 20 novembre 2009 Statut Membre Dernière intervention 1 décembre 2013 - 17 janv. 2012 à 10:13
McGyver59 Messages postés 26 Date d'inscription vendredi 20 novembre 2009 Statut Membre Dernière intervention 1 décembre 2013 - 17 janv. 2012 à 20:57
Bonjour

Sur le web j'ai trouvé un moteur de recherche interne pour mon site il fonctionne trés bien mais j'ai un soucis avec.
Meme si je ne met rien dans le champs recherche il trouve quand meme. Et je trouve qu'il doit avoir un soucis car il fais bugguer firefox

la partie du code qui me gene et que je voudrais changer et celle-ci mais je sais pas comment faire
if(isset($_GET['search']))
{
        $rec =  mysql_real_escape_string(htmlspecialchars($_GET['search']));
}
else
{
        $rec = 'php MYSQL';
}


Si une personne charitable pouvez m'aider a le faire fonctionner se serais sympa voici le script
<?php
mysql_connect('localhost','users','mot de passe');
mysql_select_db('base de donnée');
//On determine l'expression a rechercher
if(isset($_GET['search']))
{
        $rec = mysql_real_escape_string(htmlspecialchars($_GET['search']));
}
else
{
        $rec = 'php MYSQL';
}
//On determine le type de recherche
if(isset($_GET['type']))
{
        if($_GET['type']=='un')//Un des mots
        {
                $type = 1;
        }
        elseif($_GET['type']=='all')//Tout les mots
        {
                $type = 2;
        }
        else//L'expression exacte
        {
                $type = 3;
        }
}
else
{
        $type = 1;//type par defaut: L'expression exacte
}
//On determine si on doit surligner les mots dans les resultats
if(!isset($_GET['surligner']) or $_GET['surligner']!='true')
{
        $surligner = false;
}
else
{
        $surligner = true;
}
//On dertermine les identifiants, les noms et les informations des utilisateur
$req = 'SELECT image1, name, keywords FROM download WHERE ';
if($type==1)
{//ayant un des mots dans leurs informations
        $mots = explode(' ',$rec);//En separre lexpression en mots cles
        foreach($mots as $mot)
        {
                $req .= ' keywords LIKE "%'.$mot.'%" OR';
        }
        $req .= ' 1=0';
}
elseif($type==2)
{//ayant tout des mots dans leurs informations
        $mots = explode(' ',$rec);//En separre lexpression en mots cles
        foreach($mots as $mot)
        {
                $req .= ' keywords LIKE "%'.$mot.'%" AND';
        }
        $req .= ' 1=1';
}
else
{//ayant l'expression exacte dans leurs informations
        $req .= 'keywords LIKE "%'.$rec.'%"';
}
//Les utilisateur seront ranges par identifiant en ordre croissant
$req .= ' order by id asc';
$requete = mysql_query($req);
//Le formulaire de recherche
?>
<form action="" method="get">
Expression à rechercher: " />

Type de recherche:  /> Un des mots  /> Tout les mots  /> Expression exacte

Mettre en gras les mots recherchés:  />


</form>
Résultats

 Affiche  |
Titre |
Mots clefs |

<?php
//On affiche les resultats
while($dnn  = mysql_fetch_array($requete))
{
?>
----

<?php echo ''; ?>,
<?php echo $dnn['name']; ?>,
<?php
if($surligner)//Si il faut surligner les mots, on les surligne
{
if($type==3)
{
echo preg_replace('#('.preg_quote($rec).')#i', '$1', $dnn['keywords']);//On surligne l'expression exacte
}
else
{
echo preg_replace('#('.str_replace(' ','|',preg_quote($rec)).')#i', '$1', $dnn['keywords']);//On surligne les mots cles de la recherche
}
}
else
{
echo $dnn['keywords'];//On ne surligne pas
}
?>,

<?php
}
?>


Ou si une personne a un script similaire se serais sympa

Je vous remercie de votre aide
Bonne année 2012 a tous et a toutes

5 réponses

cod57 Messages postés 1654 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
17 janv. 2012 à 13:31
ok

ferme le post s.t.p. 'reponse acceptée'

merci

Bonne programmation !
3
cod57 Messages postés 1654 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
17 janv. 2012 à 10:38
bonjour

essaie

if(isset($_GET['search']) && strlen($_GET['search')>2}
{
        $rec = mysql_real_escape_string(htmlspecialchars($_GET['search']));




}




Bonne programmation !
0
McGyver59 Messages postés 26 Date d'inscription vendredi 20 novembre 2009 Statut Membre Dernière intervention 1 décembre 2013
17 janv. 2012 à 11:21
Cool merci cela fonctionne.
j'ai fais comme ceci
mysql_connect('localhost','users','mot de passe');
mysql_select_db('base de donnée');
//On determine l'expression a rechercher
if(isset($_GET['search']) && strlen($_GET['search'])>2)
{
        $rec =  mysql_real_escape_string(htmlspecialchars($_GET['search']));

//On determine le type de recherche
if(isset($_GET['type']))
{
        if($_GET['type']=='un')//Un des mots
        {
                $type = 1;
        }
        elseif($_GET['type']=='all')//Tout les mots
        {
                $type = 2;
        }
        else//L'expression exacte
        {
                $type = 3;
        }
}
else
{
        $type = 1;//type par defaut: L'expression exacte
}
//On determine si on doit surligner les mots dans les resultats
if(!isset($_GET['surligner']) or $_GET['surligner']!='true')
{
        $surligner = false;
}
else
{
        $surligner = true;
}
//On dertermine les identifiants, les noms et les informations des utilisateur
$req = 'SELECT image1, name, keywords FROM download WHERE ';
if($type==1)
{//ayant un des mots dans leurs informations
        $mots = explode(' ',$rec);//En separre lexpression en mots cles
        foreach($mots as $mot)
        {
                $req .= ' keywords LIKE "%'.$mot.'%" OR';
        }
        $req .= ' 1=0';
}
elseif($type==2)
{//ayant tout des mots dans leurs informations
        $mots = explode(' ',$rec);//En separre lexpression en mots cles
        foreach($mots as $mot)
        {
                $req .= ' keywords LIKE "%'.$mot.'%" AND';
        }
        $req .= ' 1=1';
}
else
{//ayant l'expression exacte dans leurs informations
        $req .= 'keywords LIKE "%'.$rec.'%"';
}

//Les utilisateur seront ranges par identifiant en ordre croissant
$req .= ' order by id asc';
$requete = mysql_query($req);
//Le formulaire de recherche
?>
<form action="" method="get">
Expression à rechercher: " />

Type de recherche:  /> Un des mots  /> Tout les mots  /> Expression exacte

Mettre en gras les mots recherchés:  />


</form>
Résultats

 Affiche  |
Titre |
Mots clefs |

<?php
//On affiche les resultats
while($dnn  = mysql_fetch_array($requete))
{
?>
----

<?php echo ''; ?>,
<?php echo $dnn['name']; ?>,
<?php
if($surligner)//Si il faut surligner les mots, on les surligne
{
if($type==3)
{
echo preg_replace('#('.preg_quote($rec).')#i', '$1', $dnn['keywords']);//On surligne l'expression exacte
}
else
{
echo preg_replace('#('.str_replace(' ','|',preg_quote($rec)).')#i', '$1', $dnn['keywords']);//On surligne les mots cles de la recherche
}
}
else
{
echo $dnn['keywords'];//On ne surligne pas
}
?>,

<?php
}

?>

<?php
}else{
?>
<form action="" method="get">
Expression à rechercher: " />

Type de recherche:  /> Un des mots  /> Tout les mots  /> Expression exacte

Mettre en gras les mots recherchés:  />


</form>
<?php
}
?>


par contre je voudrais faire une recherche dans le titre et j'ai fais comme ceci
//On dertermine les identifiants, les noms et les informations des utilisateur
$req = 'SELECT image1, name, keywords FROM download WHERE ';
if($type==1)
{//ayant un des mots dans leurs informations
        $mots = explode(' ',$rec);//En separre lexpression en mots cles
        foreach($mots as $mot)
        {
                $req .= ' name LIKE "%'.$mot.'%" AND keywords LIKE "%'.$mot.'%" OR';
        }
        $req .= ' 1=0';
}
elseif($type==2)
{//ayant tout des mots dans leurs informations
        $mots = explode(' ',$rec);//En separre lexpression en mots cles
        foreach($mots as $mot)
        {
                $req .= ' name LIKE "%'.$mot.'%" AND keywords LIKE "%'.$mot.'%" AND';
        }
        $req .= ' 1=1';
}
else
{//ayant l'expression exacte dans leurs informations
        $req .= 'name LIKE "%'.$rec.'%" AND keywords LIKE "%'.$rec.'%"';
}


donc dans ma base j'ai mis le nom en français et dans les mots clefs il est en anglais et dans je lance la recherche soit il trouve rien soit j'ai ine page blanche ou alors il cherche pendeant des minutes et cela bug

Merci pour tout
0
McGyver59 Messages postés 26 Date d'inscription vendredi 20 novembre 2009 Statut Membre Dernière intervention 1 décembre 2013
17 janv. 2012 à 19:56
ben j'ai juste un soucis encore je comprend pas

voici le soucis repris au dessus

je voudrais faire une recherche dans le titre et j'ai fais comme ceci
//On dertermine les identifiants, les noms et les informations des utilisateur
$req = 'SELECT image1, name, keywords FROM download WHERE ';
if($type==1)
{//ayant un des mots dans leurs informations
        $mots = explode(' ',$rec);//En separre lexpression en mots cles
        foreach($mots as $mot)
        {
                $req .= ' name LIKE "%'.$mot.'%" AND keywords LIKE "%'.$mot.'%" OR';
        }
        $req .= ' 1=0';
}
elseif($type==2)
{//ayant tout des mots dans leurs informations
        $mots = explode(' ',$rec);//En separre lexpression en mots cles
        foreach($mots as $mot)
        {
                $req .= ' name LIKE "%'.$mot.'%" AND keywords LIKE "%'.$mot.'%" AND';
        }
        $req .= ' 1=1';
}
else
{//ayant l'expression exacte dans leurs informations
        $req .= 'name LIKE "%'.$rec.'%" AND keywords LIKE "%'.$rec.'%"';
}


donc dans ma base j'ai mis le nom en français et dans les mots clefs il est en anglais et dans je lance la recherche soit il trouve rien soit j'ai ine page blanche ou alors il cherche pendeant des minutes et cela bug

Merci pour tout
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
McGyver59 Messages postés 26 Date d'inscription vendredi 20 novembre 2009 Statut Membre Dernière intervention 1 décembre 2013
17 janv. 2012 à 20:57
Bon je pense avoir trouvé si on pouvait me donner confirmation ou correction

Pour la recharche dans les mots clefs et dans les titre je fais comme cela est-ce bon??
//On dertermine les identifiants, les noms et les informations des utilisateur
$req = 'SELECT image1, name, keywords FROM download WHERE ';
if($type==1)
{//ayant un des mots dans leurs informations
        $mots = explode(' ',$rec);//En separre lexpression en mots cles
        foreach($mots as $mot)
        {
              $req .= ' keywords LIKE "%'.$mot.'%" OR (name LIKE "%'.$mot.'%") OR';
        }
        $req .= ' 1=0';
}
elseif($type==2)
{//ayant tout des mots dans leurs informations
        $mots = explode(' ',$rec);//En separre lexpression en mots cles
        foreach($mots as $mot)
        {
                $req .' (online \'yes\' AND (keywords LIKE "%'.$mot.'%") OR (name LIKE "%'.$mot.'%")) AND';
        }
        $req .= ' 1=1';
}
else
{//ayant l'expression exacte dans leurs informations
$req .' (online \'yes\' AND (keywords LIKE "%'.$rec.'%") OR (name LIKE "%'.$rec.'%"))';
}


merci de vos reponses et de votre patience
0