Probleme script moteur de recherche [Résolu]

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

Votre réponse

5 réponses

Meilleure réponse
Messages postés
1660
Date d'inscription
dimanche 7 septembre 2008
Dernière intervention
11 septembre 2013
- 17 janv. 2012 à 13:31
3
Merci
ok

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

merci

Bonne programmation !

Merci cod57 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de cod57
Messages postés
1660
Date d'inscription
dimanche 7 septembre 2008
Dernière intervention
11 septembre 2013
- 17 janv. 2012 à 10:38
0
Merci
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
Messages postés
26
Date d'inscription
vendredi 20 novembre 2009
Dernière intervention
1 décembre 2013
- 17 janv. 2012 à 11:21
0
Merci
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
Messages postés
26
Date d'inscription
vendredi 20 novembre 2009
Dernière intervention
1 décembre 2013
- 17 janv. 2012 à 19:56
0
Merci
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
Messages postés
26
Date d'inscription
vendredi 20 novembre 2009
Dernière intervention
1 décembre 2013
- 17 janv. 2012 à 20:57
0
Merci
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.