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 :

Recherche sur des categories (Moteur de recherche)


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut Recherche sur des categories (Moteur de recherche)
    Bonjour,

    Je voudrais mettre un moteur de recherche qui cherche sur des categories:

    formulaire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <form name="recherche" action="recherche.php" method="POST">
    <input type="text" name="word" /><br />
    table1: <input type="checkbox" name="table[]" value="table1" />
    &nbsp;&nbsp;&nbsp;
    table2: <input type="checkbox" name="table[]" value="table2" />
    &nbsp;&nbsp;&nbsp;
    table3: <input type="checkbox" name="table[]" value="table3" />
     
    <br />
    <input type="submit" value="Chercher" />
    </form>
    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
     
    $word = $_POST['word'];
     
    $table = $_POST['table'];
     
    $a = '';
    $x = '';
     
    foreach ($table as $value =>$key)
    {
    	$a .= $value.'<br>';
    	$x .= $key.'<br>';
     
    }
     
    echo 'le x:'.$x[$value].'<br>';
    //echo 'le a:'.$a.'<br>';
     
    echo sizeof($table).'<br>';
     
     
     
    for($i=0;$i<sizeof($table);$i++) // tant que $i est inferieur au nombre d'éléments du tableau...
        {
    $query = "select description, keys from '$x' Where description LIKE '%$word%'";
    echo $query.'<br>';
    $result=mysql_query($query) or die (mysql_error());
    $total = mysql_num_rows($result);
        }
    Comment puis je mettre a recherche sur la table1, apres table2 et table3, selon les tables selectionnees, un petit coup de pouce.

    Merci

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 121
    Par défaut
    Je doute que mettre une value à tes checkbox t'aidera vraiment, ca ne fera pas ce que ut souhaites, n'en met donc pas.
    Quand une checkbox est cochée, la variable _POST existe et contient 'on' sinon elle n'existe pas.

    Donc dans ton cas, il te suffit de vérifier que la variable $_POST[table][0] existe (avec empty() ou isset()) et tu sais que la case pour la table 1 a été cochée, $_POST[table][1] pour la table 2 etc...
    Mais je peux te conseiller une jointure des 3 tables ou au moins les tables sélectionnées.

    Conseils supplémentaires:
    - Ecris toujours tes requêtes avec une syntaxe MySQL en MAJUSCULE.
    - Dans le code que tu nous as donné, $total sert à rien... est ce normal ?
    - On est pas en C, sizeof() n'est donc pas approprié, utilise plutot count(), comme tout le monde.

  3. #3
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut
    J'ai mis ce que vous m'avez dit:

    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
     
    if (IsSet($_POST['table'][0]))
    {
    $query = "SELECT keyword, description from table1 Where keyword LIKE '%$word%'";
    $query .= " UNION ";
    }
     
    if (IsSet($_POST['table'][1]))
    {
    $query .= "SELECT keyword, description from table2 Where keyword LIKE '%$word%'";
    $query .= " UNION ";
    }
     
    if (IsSet($_POST['table'][2]))
    {
    $query .= "SELECT keyword, description from table3 Where keyword LIKE '%$word%'";
    }
    echo $query.'<br>';
    $result=mysql_query($query) or die (mysql_error());
    $total = mysql_num_rows($result);
    echo $total.'<br>';
    Le petit probleme maintenant est UNION, si par exemple une table n'est selectionnee, je peux pas mettre UNION, par exemple, si je selectionne table1 SEULEMENT, et sa requete contient UNION, j'aurais une erreur SQL.

  4. #4
    Membre expérimenté Avatar de firehist
    Homme Profil pro
    Intégrateur Web Freelance
    Inscrit en
    Février 2008
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Intégrateur Web Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2008
    Messages : 151
    Par défaut
    Bonjour,

    Voici deux méthodes :

    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
     
    $next = false;
     
    if (isset($_POST['table'][0]))
    {
       $query = "SELECT keyword, description from table1 Where keyword LIKE '%$word%'";
       $next = true; // on passe la valeur à vrai
    }
     
    if (isset($_POST['table'][1]))
    {
       if($next)
          $query .= " UNION ";
       $query .= "SELECT keyword, description from table2 Where keyword LIKE '%$word%'";
       $next = true;
    }
     
    if (isset($_POST['table'][2]))
    {
       if($next)
          $query .= " UNION ";
       $query .= "SELECT keyword, description from table3 Where keyword LIKE '%$word%'";
    }
     
    unset($next);
    echo $query.'<br>';
    $result =mysql_query($query) or die (mysql_error());
    $total  = mysql_num_rows($result);
    echo $total.'<br>';
    OU

    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
     
     
    if (IsSet($_POST['table'][0]))
    {
       $query = "SELECT keyword, description from table1 Where keyword LIKE '%$word%'";
       if(isset($_POST['table'][1]) || isset($_POST['table'][2]))
          $query .= " UNION ";
    }
     
    if (IsSet($_POST['table'][1]))
    {
       $query .= "SELECT keyword, description from table2 Where keyword LIKE '%$word%'";
       if(isset($_POST['table'][2]))
          $query .= " UNION ";
    }
     
    if (IsSet($_POST['table'][2]))
    {
       $query .= "SELECT keyword, description from table3 Where keyword LIKE '%$word%'";
    }
     
    echo $query.'<br>';
    $result =mysql_query($query) or die (mysql_error());
    $total  = mysql_num_rows($result);
    echo $total.'<br>';

  5. #5
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut
    Pour les 2 methodes, voila le resultat donne si je selectionne la table3 SEULEMENT:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT keyword, description from table1 Where keyword LIKE '%ok%'

  6. #6
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 121
    Par défaut
    Pourquoi utiliser UNION ?
    From table1, table2, table3
    Soit une jointure simple, ne te convient pas ?

Discussions similaires

  1. Moteur de recherche sur des sites externes
    Par PsyKtra dans le forum Services
    Réponses: 0
    Dernier message: 25/02/2013, 17h56
  2. Parts de marché des moteurs de recherche sur décembre 2008
    Par Kerod dans le forum Référencement
    Réponses: 1
    Dernier message: 14/01/2009, 15h54
  3. Recherche sur les différents moteurs rpg/mmorpg
    Par Phomos dans le forum Moteurs 3D
    Réponses: 5
    Dernier message: 08/10/2005, 16h57

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