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 interne


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
    Octobre 2008
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 125
    Par défaut Moteur de recherche interne
    bonjour a tous

    voila mon souçi , j'ai une base de données avec une table membre , j'aimerai créer un moteur de recherche qui m'affiche les membres selon leur sexe , age , departement ! comment m'y prendre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $sql= 'SELECT pseudo FROM inscri WHERE sexe in("homme","femme")';
     
        $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());  
     
    			   // on recupere le resultat sous forme d'un tableau  
                   $data = mysql_fetch_array($req);  
     
                  // on libère l'espace mémoire alloué pour cette interrogation de la base  
                 mysql_free_result ($req);
    est ce que ce début de code est bon ?

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Salut,

    Tu peux t'inspirer des réponses fournies ici :
    http://www.developpez.net/forums/d73...eur-recherche/

    Pense à utiliser la fonction recherche du forum.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 125
    Par défaut
    je te remercie sabotage , je pense avoir pas mal de taf pour ce genre de moteur . je te tiens au courant

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 138
    Par défaut
    Salut,

    Je te conseille de jeter un gros coup d'oeil entre SQL et les expressions régulières... Voici un bout de script tout bête comme exemple :

    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
    public function Recherche($mot){
    		if(strlen($mot)<3){
    			$this->Rapport("Mot trop court pour convenir à une recherche.");
    			return false;
    		}
    		$mo = str_replace(" ","&&",$mot);
    		$reg = "REGEXP '(".$mo.")'";	
    		$sql = "SELECT DISTINCT ref FROM image 
    		WHERE mot_clef ".$reg;
    		if($res=mysql_query($sql)){
    			$total=mysql_num_rows($res);
    			if($total>0){
    				$i=0;
    				while($data=mysql_fetch_assoc($res)){
    					$recherche[$i] = "<a href=\"images/".$data['ref'].".jpeg\" rel=\"lightbox\" title=\"".$data['ref']."\"><img src=\"mini/".$data['ref'].".jpeg\" /></a>"; 
    					$i++;
    				}
    				return $recherche;
    			}
    			else{
    				$mo = str_replace(" ","|",$mot);
    				$reg = "REGEXP '(".$mo.")'";	
    				$sql2 = "SELECT DISTINCT ref FROM image 
    				WHERE mot_clef ".$reg;
    				if($res2=mysql_query($sql2)){
    					$total=mysql_num_rows($res2);
    					if($total>0){
    						$i=0;
    						while($data2=mysql_fetch_assoc($res2)){
    							$recherche[$i] = "<a href=\"images/".$data2['ref'].".jpeg\" rel=\"lightbox\" title=\"".$data2['ref']."\"><img src=\"mini/".$data2['ref'].".jpeg\" /></a>"; 
    							$i++;
    						}
    						return $recherche;
    					}
    					else{
    						$this->Rapport("Aucun résultat ne correspond à votre recherche");
    						return false;
    					}
    				}
    				else{
    					$this->Rapport("Echec de la requête.");
    					return false;
    				}
    			}
    		}
    		else{
    			$this->Rapport("Echec de la requête.");
    			return false;
    		}
    	}
    Bon c'est un peu tout moche, mais ca permet aussi une recherche a deux degrés dans ce cas la.

    J'espère que ca t'aidera un peu.

    Tschuss

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Si je puis me permettre, je ne pense pas qu'il y ait besoin d'expressions regulières pour filtrer l'age, le sexe ou le departement

    Sinon j'ai lu en diagonal ton code, quel est l'avantage par rapport a un recherche fulltext ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 138
    Par défaut
    Les expressions régulières sont très pratiques lors des recherches à cause des fautes d'orthographe de certains internautes... Tout du moins c'est ma vision des choses. Enfin ca reste utile pour les input de type text, forcément pour des formulaires où le choix n'est pas donné à l'utilisateur, il est plus simple de faire une recherche "normale".

  7. #7
    Membre éclairé Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Amateur passionné

    Informations forums :
    Inscription : Octobre 2006
    Messages : 496
    Par défaut
    Oui, c'est dans ta requête

    WHERE (sexe='homme') or (sexe='femme') veut dire ou sexe = homme OU femme

    Donc tous les sexes

    Quel filtre veux tu ?


    PS :
    j'ai fais comme tu m'a dis
    Malheureusement non... Tu as copié collé ....
    Puisque Sabotage t'avais déjà dit la même chose ....
    As tu saisis pourquoi ton code ne fonctionnai pas avant ?

  8. #8
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 125
    Par défaut
    voiçi ma page recherche.php
    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
    52
    53
    54
    55
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
       <head>
           <title>recherche</title>
           <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    	   <link rel="stylesheet" media="screen" type="text/css" title="Design" href="design.css" />
       </head>
       <body>
     
       <div id="en_tete">
       <!-- Ici on mettra la bannière -->
       </div>
     
       <div id="menu">
       <div class="element_menu">
           <ul><? if(isset($_COOKIE["id"])) { ?>
               <li><a href="index.php">acceuil</a></li>
               <li><a href="profile.php">mon profil</a></li>
               <li><a href="deconn.php">deconnexion</a></li>
    		   <? } else { ?>
    	       <li><a href="index.php">acceuil</a></li>
               <li><a href="inscri.php">inscription</a></li>
               <li><a href="connex.php">connexion</a></li>
     
           </ul><? } ?>
       </div>
     
     
       </div>
     
       <div id="corps">
       <DIV ALIGN="CENTER"><H2>Site de chat et de rencontres</H2><BR>
       <form method="post" action="traitement.php">
     
    <p>
             <label for="sexe">vous cherchez</label>
    	<select name="sexe">
    	  <option value="homme">un homme</option>
    	  <option value="femme">une femme</option>
        </select>	
    </p><BR>
     
    <p>
              <input type="submit" name="BT_Envoyer" value="Envoyer" />
    </p>
     
    </form>
     
     
       </div>
     
     
     
       </body>
    </html>
    et ma page traitement.php
    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    <?php
     mysql_connect("localhost", "xxxxxx", "xxxxx");// connexion a la base
     mysql_select_db("xxxxxxxx");
     
    // On est connectés, on peut travailler sur la BDD
    $reponse = mysql_query("SELECT pseudo,sexe FROM inscri WHERE (sexe='homme') or (sexe='femme') ");// requete SQL
    ?>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
       <head>
           <title>traitement</title>
           <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
           <link rel="stylesheet" media="screen" type="text/css" title="Design" href="design.css" />
       </head>
       <body>
     
       <div id="en_tete">
       <!-- Ici on mettra la bannière -->
       </div>
     
       <div id="menu">
       <div class="element_menu">
           <ul>
    	       <? if(isset($_COOKIE["id"])) { ?>
               <li><a href="index.php">acceuil</a></li>
               <li><a href="profile.php">mon profil</a></li>
               <li><a href="deconn.php">deconnexion</a></li>
    		   <? } else { ?>
    		    <li><a href="index.php">accueil</a></li>
    		   <li><a href="inscri.php">inscription</a></li>
               <li><a href="connex.php">connexion</a></li>
    		   </ul><? } ?>
       </div>
     
     
       </div>
     
       <div id="corps">
       <DIV ALIGN="CENTER"><H2>Site de chat et de rencontres</H2><BR>
       <p>
       <?php
       while ($donnees = mysql_fetch_array($reponse) )
    {
       ?>
        pseudo : <?php echo $donnees['pseudo']; ?><br>
     
     
       <?php
       }
           ?>
        </p>
    <?php
       mysql_close(); // Déconnexion de MySQL
       ?>
     
     
       </div>
     
     
     
       </body>
    </html>
    j'aimerai mettre un filtre que sur les pseudo homme ou les pseudo femme , j'aimerai aussi faire une recherche par tranche d'age et par département ! pourrais tu m'aider ? nb : tu a placé la boucle juste au dessus du resultat pour que ça n'enveloppe pas le reste

  9. #9
    Membre éclairé Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Amateur passionné

    Informations forums :
    Inscription : Octobre 2006
    Messages : 496
    Par défaut
    Remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $reponse = mysql_query("SELECT pseudo,sexe FROM inscri WHERE (sexe='homme') or (sexe='femme') ");
    Par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $reponse = mysql_query("SELECT pseudo,sexe FROM inscri WHERE sexe = '".$_POST['sexe']."'");

  10. #10
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 125
    Par défaut
    super ça fonctionne , je me demandais aussi si tu pouvais m'aiguiller sur la façon de mettre plusieurs filtres ?

  11. #11
    Membre éclairé Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Amateur passionné

    Informations forums :
    Inscription : Octobre 2006
    Messages : 496
    Par défaut
    Là, je décroche car tu part de trop loin ....
    Tu veux faire des choses trop compliqué par rapport à ton niveau en PHP/MYSQL.
    Je te conseil de lire des tutos qui pullulent sur google

Discussions similaires

  1. Moteur de recherche interne sans pubs
    Par oc_alex86 dans le forum Services
    Réponses: 5
    Dernier message: 29/01/2008, 04h10
  2. Moteur de recherche interne
    Par wasim dans le forum Services
    Réponses: 2
    Dernier message: 23/09/2007, 01h02
  3. [Tableaux] Moteur de recherche interne
    Par mchev dans le forum Langage
    Réponses: 3
    Dernier message: 01/02/2007, 01h20
  4. Moteur de recherche interne avec zope/python
    Par tunix dans le forum Zope
    Réponses: 3
    Dernier message: 01/05/2006, 15h45
  5. Un moteur de recherche interne
    Par kibodio dans le forum Langage SQL
    Réponses: 2
    Dernier message: 08/02/2005, 18h47

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