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

  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 : 37
    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 ?

  7. #7
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut
    Citation Envoyé par IGstaff Voir le message
    Pourquoi utiliser UNION ?
    From table1, table2, table3
    Soit une jointure simple, ne te convient pas ?
    Je ne veux pas faire une recherche sur une table qui n'est pas selectionnee

  8. #8
    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
    Ce n'est pas vraiment un problème...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $tablesQuery = '';
    if( !empty($_POST['table']) ) {
        foreach( $_POST['table'] as $TableInd => $On)
           {
               $tablesQuery .= ( ($TableInd) ? ', '  : '').'table'.($TableInd+1); //on ajoute le nom de la table à la liste, on aurait pu utiliser un autre tableau avec les correspondance index/nomdetable.
            }
        $query = "SELECT description, keys from '{$tablesQuery}' WHERE description LIKE '%{$word}%'";
        echo $query.'<br>';
        $result=mysql_query($query) or die (mysql_error());
    }

  9. #9
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut
    Citation Envoyé par IGstaff Voir le message
    Ce n'est pas vraiment un problème...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $tablesQuery = '';
    if( !empty($_POST['table']) ) {
        foreach( $_POST['table'] as $TableInd => $On)
           {
               $tablesQuery .= ( ($TableInd) ? ', '  : '').'table'.($TableInd+1); //on ajoute le nom de la table à la liste, on aurait pu utiliser un autre tableau avec les correspondance index/nomdetable.
            }
        $query = "SELECT description, keys from '{$tablesQuery}' WHERE description LIKE '%{$word}%'";
        echo $query.'<br>';
        $result=mysql_query($query) or die (mysql_error());
    }
    voila le resultat si je selectionne la table3 seulement:

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

  10. #10
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut
    j'ai essaye plusieurs methodes mais ca marche toujours pas, soit il bug ou bien il me donne le resultat de table1

  11. #11
    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
    Le code HTML est toujours le même.
    en gardant le bout de script que je t'ai donné précédemment, qu'affiche ta page si tu met:
    echo '<pre>'.print($_POST['table'], 1).'</pre>';
    juste avant le FOREACH, de façon à avoir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if( !empty($_POST['table']) ) {
            echo '<pre>'.print($_POST['table'], 1).'</pre>';
            foreach( $_POST['table'] as $TableInd => $On)

  12. #12
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut
    Citation Envoyé par IGstaff Voir le message
    Le code HTML est toujours le même.
    en gardant le bout de script que je t'ai donné précédemment, qu'affiche ta page si tu met:
    echo '<pre>'.print($_POST['table'], 1).'</pre>';
    juste avant le FOREACH, de façon à avoir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if( !empty($_POST['table']) ) {
            echo '<pre>'.print($_POST['table'], 1).'</pre>';
            foreach( $_POST['table'] as $TableInd => $On)
    Je pense qu'il y ait une erreur de "," a cote de 1:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Parse error: syntax error, unexpected ',' in recherche.php on line 32

  13. #13
    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
    Bin forcément que si, c'est le séparateur de paramètres...
    C'est juste que la fonction c'est print_r() et non print() qui est une structure de langage.

  14. #14
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut
    Citation Envoyé par IGstaff Voir le message
    Bin forcément que si, c'est le séparateur de paramètres...
    C'est juste que la fonction c'est print_r() et non print() qui est une structure de langage.
    voila le resultat:

    Array
    (
    [0] => on
    [1] => on
    [2] => on
    )

    SELECT description, keyword from 'table1, table2, table3' WHERE description LIKE '%xx%'
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''table1, table2, table3' WHERE description LIKE '%xx%'' at line 1

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