Probleme script moteur de recherche [Résolu]

McGyver59 26 Messages postés vendredi 20 novembre 2009Date d'inscription 1 décembre 2013 Dernière intervention - 17 janv. 2012 à 10:13 - Dernière réponse : McGyver59 26 Messages postés vendredi 20 novembre 2009Date d'inscription 1 décembre 2013 Dernière intervention
- 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
Afficher la suite 

5 réponses

Répondre au sujet
cod57 1661 Messages postés dimanche 7 septembre 2008Date d'inscription 11 septembre 2013 Dernière intervention - 17 janv. 2012 à 13:31
+3
Utile
ok

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

merci

Bonne programmation !
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cod57
cod57 1661 Messages postés dimanche 7 septembre 2008Date d'inscription 11 septembre 2013 Dernière intervention - 17 janv. 2012 à 10:38
0
Utile
bonjour

essaie

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




}




Bonne programmation !
Commenter la réponse de cod57
McGyver59 26 Messages postés vendredi 20 novembre 2009Date d'inscription 1 décembre 2013 Dernière intervention - 17 janv. 2012 à 11:21
0
Utile
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
Commenter la réponse de McGyver59
McGyver59 26 Messages postés vendredi 20 novembre 2009Date d'inscription 1 décembre 2013 Dernière intervention - 17 janv. 2012 à 19:56
0
Utile
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
Commenter la réponse de McGyver59
McGyver59 26 Messages postés vendredi 20 novembre 2009Date d'inscription 1 décembre 2013 Dernière intervention - 17 janv. 2012 à 20:57
0
Utile
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
Commenter la réponse de McGyver59

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.