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 - requête affichage sql


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2010
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 103
    Par défaut Moteur de recherche - requête affichage sql
    Bonjour à tous,
    je relance ma demande, car sur la précédente, j'ai présenté du code légèrement indigeste..
    Je souhaite donc réaliser un moteur de recherche pour mon site.
    La "form" est composée de :
    un input text "recherche"
    un select "mode" pour afficher, soit un mot, tous les mots, ou l'expression de la recherche.
    un select "categorie"
    et un select "pays"

    Je souhaite afficher tous les pays ou toutes les categories, si ceux-ci ne sont pas specifiés. Car quant la sélection reste sur le selected (par ex : tout les pays), et bien la recherche ne me donne "aucun resultat" Quelqu'un peux t-il m'aider, parce-que là je m'embourbe..

    Merci de votre aide
    Cordialement,
    K@rpe

    Partie du code concernant la requête :
    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
    if (isset($_POST['rechercher'])) //si on a validé le formulaire
    {
    $recherche = mysql_real_escape_string(htmlspecialchars($_POST['recherche'])); //sécurisation des variables
    $m = mysql_real_escape_string(htmlspecialchars($_POST['motcat']));
    $p = mysql_real_escape_string(htmlspecialchars($_POST['pays']));
    $mode = mysql_real_escape_string(htmlspecialchars($_POST['mode']));
    $valid='oui';
     
    if (empty($_POST['motcat'])) //si on a rempli le champs 
    {$motcat = "AND  souscategorie1='$m'";}// AND souscategorie1='$motcat' OR pays='$pays'
    	else //si on ne l'a pas cochée
    	{$motcat = "";}// AND valid='oui'	
     
    if (empty($_POST['pays'])) //si on a rempli le champs 
    {$pays = "AND pays='$p'";}// AND souscategorie1='$motcat' OR pays='$pays'
    	else //si on ne l'a pas cochée
    	{$pays = "";}// AND valid='oui'
     
    if ($mode == "tous_les_mots")
    {$and_ou_or = 'AND';} //on utilisera AND dans la boucle
    	else
    	{	$and_ou_or = 'OR';} //on utilisera OR dans la boucle
     
    if ($mode == "expression_exacte") //si le mode de recherche est par expression exacte
    {
    $selection_recherche = mysql_query("SELECT * FROM annonces WHERE  titre LIKE '$recherche%' AND souscategorie1='$motcat' AND pays='$pays' AND valid='oui' ORDER BY idannonce DESC LIMIT $limite,$nombre");//
    }
    	else //si le mode de recherche n'est pas par expression exacte
    	{
    	$mots = explode(" ", $recherche); //séparation des mots
    	$nombre_mots = count ($mots); //compte le nombre de mots
    	$valeur_requete = '';
    		for($nombre_mots_boucle = 0; $nombre_mots_boucle < $nombre_mots; $nombre_mots_boucle++) //tant que le nombre de mots de la recherche est supérieur à celui de la boucle, on continue en augmentant le nombre de mots de 1 à chaque fois
    		{
    		$valeur_requete .= '' . $and_ou_or . ' titre LIKE \'%' . $mots[$nombre_mots_boucle] . '%\''; //modification de la variable $valeur_requete
    		}
    		$valeur_requete = ltrim($valeur_requete,$and_ou_or); //suppression de AND ou de OR au début de la boucle
    		$selection_recherche = mysql_query("SELECT *FROM annonces WHERE $valeur_requete $pays AND valid='oui' ORDER BY idannonce DESC"); //requête avec le résultat de la boucle dedans
    		}
    		$nombre_resultats = mysql_num_rows($selection_recherche); //compte le nombre d'entrées sélectionnées par la recherche
     
    if ($nombre_resultats == 0) //s'il n'y a pas de résultat
    {
    echo '<span class="font_blanc" align="center">...aucun resultat pour votre recherche.</span>';
    }
    else //il y a au moins un résultat
    {
    echo '<div align="center" class="font_blanc">Il y a ' . $nombre_resultats . 'annonce(s) correspondant à votre recherche !</div><br /><br />'; //nombre de résultats
        while($resultats = mysql_fetch_array($selection_recherche)) 
    {
    echo
    Mon formulaire de recherche
    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
      <form action="recherche2.php#anc" method="post">
     
                <input name="recherche" type="text" id="recherche" value="<?php echo $_POST['recherche']; ?>" size="65" />
     
                <input name="rechercher" type="submit" value="rechercher"/>
     
    <a href="javascript:visibilite('critere');" class="liens_interne">Options</a>
     
     
           <input type="hidden" name="sujets_fermes"checked="checked" />
     
           >
             <br />
     
             Trouver :
     
     <select name="mode" class="contenus2">
                 <option value="tous_les_mots">Tous les mots</option>
                 <option value="un_mot">Au moins un mot</option>
                 <option value="expression_exacte">Expression</option>
    </select>
     
     Cat&eacute;gorie :
     
     <select name="motcat" class="contenus2" id="search_category" onchange="SearchCrit(false, get_radio_value(f.st));">
                  <option selected="selected">Toutes categories</option>
                  <option value="Voitures">Voitures</option>
                  <option value="Motos">Motos</option>
                  <option value="Utilitaires">Utilitaires</option>
                  <option value="Equipement Auto">Equipement Auto</option>
                  <option value="Equipement Moto">Equipement Moto</option>
                  <option value="Bateaux">Bateaux</option>
     
                </select>
     
                <select name="pays"  id="search_pays" class="contenus2">
                  <option selected="selected">Tous les pays</option>
                  <option value="Alg&eacute;rie">Alg&eacute;rie</option>
                  <option value="France">France</option>
                  <option value="Maroc">Maroc</option>
                  <option value="Tunisie">Tunisie</option>
                </select>

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    235
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 235
    Par défaut
    Tu n'utiliserais pas la fonction empty() à l'envers par hasard ?

    empty ($var) : retourne FALSE si $var a une valeur non-vide et différente de zéro.

    Au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if (empty($_POST['motcat'])) //si on a rempli le champs 
    {$motcat = "AND  souscategorie1='$m'";}// AND souscategorie1='$motcat' OR pays='$pays'
    	else //si on ne l'a pas cochée
    	{$motcat = "";}// AND valid='oui'	
     
    if (empty($_POST['pays'])) //si on a rempli le champs 
    {$pays = "AND pays='$p'";}// AND souscategorie1='$motcat' OR pays='$pays'
    	else //si on ne l'a pas cochée
    	{$pays = "";}// AND valid='oui'
    Essaye

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if (!empty($_POST['motcat'])) //si on a rempli le champs 
    {$motcat = "AND  souscategorie1='$m'";}// AND souscategorie1='$motcat' OR pays='$pays'
    	else //si on ne l'a pas cochée
    	{$motcat = "";}// AND valid='oui'	
     
    if (!empty($_POST['pays'])) //si on a rempli le champs 
    {$pays = "AND pays='$p'";}// AND souscategorie1='$motcat' OR pays='$pays'
    	else //si on ne l'a pas cochée
    	{$pays = "";}// AND valid='oui'

  3. #3
    Membre confirmé
    Inscrit en
    Février 2010
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 103
    Par défaut
    Slt Borowsky,

    merci pour ta réponse, mais l'inversion du "!empty" ne change rien à l'affaire.

    Je cherche encore ...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    235
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 235
    Par défaut
    Et en essayant de mettre des dans les options "Tous..." de tes select ?

    Ou alors tu met une value à 0 par exemple, et au lieu de faire tu fais

  5. #5
    Membre chevronné
    Avatar de hornetbzz
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Octobre 2009
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Octobre 2009
    Messages : 482
    Par défaut
    salut

    pas regardé le début mais je vois juste

    qui s'écrit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($_POST['...'] ==== 0){

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    235
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 235
    Par défaut
    ?? 4 "=" ? rien que ca ?

    La syntaxe je la connais pas par coeur, c'est surtout pour lui donner des idées...

Discussions similaires

  1. [MySQL] Défaut dans (moteur de recherche avec affichage par page)!
    Par booraq dans le forum PHP & Base de données
    Réponses: 17
    Dernier message: 13/12/2013, 12h10
  2. moteur de recherche sou pl sql oracle
    Par sirene_brune dans le forum PL/SQL
    Réponses: 4
    Dernier message: 24/05/2010, 21h52
  3. [MySQL] Moteur de recherche et affichage d'une description
    Par kstou2001 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 09/11/2007, 14h37
  4. moteur de recherche avec requete sql
    Par hottnikks_79 dans le forum ASP
    Réponses: 4
    Dernier message: 03/08/2006, 03h58
  5. [SQL] Moteur de recherche problème affichage donnée dans select
    Par vincedjs dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 07/04/2006, 20h27

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