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 :

Créer un moteur de recherche avec des conditions supplémentaires [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 7
    Par défaut Créer un moteur de recherche avec des conditions supplémentaires
    S'il vous plait cela fait 2 jours que je suis sur le problème suivant :

    J'ai deux requètes mysql qui séparément fonctionnent mais quand j'essaye de les associer la requète affiche avec un while des ligne de la BDD qui ne devrais pas apparaître car rejeté par la requète et si je fait une recherche un message d'erreur me dit que 'query is empty'.

    Voici le code du moteur de recherche (trouvé sur ce site il me semble) post requete est le input du moteur 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
     
    if (isset($_POST['requete'])){
    		$mots = $_POST['requete'];
    	}
    mysql_select_db($database_jewelry3d, $jewelry3d);
     
       $motrecherche=explode(" ",$mots);
       $WHERE = "WHERE";
       $count = 0;
       reset ($motrecherche);
     
       while(list($key, $data) = each($motrecherche))
          {
          $count = $count + 1;
          if ($count == 1)   $WHERE .= "  titre LIKE '%" . $data . "%' OR date LIKE '%" . $data . "%'  OR comment LIKE '%" . $data . "%'  OR numero_facture LIKE '%" . $data . "%' "; 
          //else               $WHERE .= " AND titre LIKE '%" . $data . "%' "; 
          }
    $query_compte_messagerie = sprintf("SELECT DISTINCT id, mail, login, titre, niveau, date, categorie, comment, afficher, numero_facture FROM `comment` $WHERE ORDER BY id DESC");
    $compte_messagerie = mysql_query($query_compte_messagerie, $jewelry3d) or die(mysql_error());
    $row_compte_messagerie = mysql_fetch_assoc($compte_messagerie);
    $totalRows_compte_messagerie = mysql_num_rows($compte_messagerie);

    code de la requète sans le moteur de recherche le but est de n'afficher que les lignes qui appartiennent au login de la session, qui sont affichés en '1' et qui sont de la catégorie 'Me to client' ou 'Demande'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $colname_compte_messagerie = "-1";
    if (isset($_SESSION['MM_Username'])) {
      $colname_compte_messagerie = $_SESSION['MM_Username'];
    }
    mysql_select_db($database_jewelry3d, $jewelry3d);
    $query_compte_messagerie = sprintf("SELECT DISTINCT id, mail, login, titre, niveau, date, categorie, comment, afficher, numero_facture FROM `comment` WHERE afficher = '1' AND login = '".$colname_compte_messagerie."' AND categorie = 'Me to client' OR categorie = 'Demande' ORDER BY id DESC");
    $compte_messagerie = mysql_query($query_compte_messagerie, $jewelry3d) or die(mysql_error());
    $row_compte_messagerie = mysql_fetch_assoc($compte_messagerie);
    $totalRows_compte_messagerie = mysql_num_rows($compte_messagerie);
    enfin voici le code qui associe les deux et qui ne fonctionne pas, j'ai essayé d'insérer les informations supplémentaire dans la requète soit dans la variable $WHERE soit après celle ci en la suivant d'un AND voici le bout de code qui pose problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    afficher = '1' AND login = '".$colname_compte_messagerie."' AND categorie = 'Me to client' OR categorie = 'Demande'
    Première version :
    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
     
     $colname_compte_messagerie = "-1";
    if (isset($_SESSION['MM_Username'])) {
      $colname_compte_messagerie = $_SESSION['MM_Username'];
    }
    if (isset($_POST['requete'])){
    		$mots = $_POST['requete'];
    	}
    mysql_select_db($database_jewelry3d, $jewelry3d);
     
       $motrecherche=explode(" ",$mots);
       $WHERE = "WHERE";
       $count = 0;
       reset ($motrecherche);
     
       while(list($key, $data) = each($motrecherche))
          {
          $count = $count + 1;
          if ($count == 1)   $WHERE .= "   afficher = '1' AND login = '".$colname_compte_messagerie."' AND categorie = 'Me to client' OR categorie = 'Demande' AND titre LIKE '%" . $data . "%' OR date LIKE '%" . $data . "%'  OR comment LIKE '%" . $data . "%'  OR numero_facture LIKE '%" . $data . "%' "; 
          //else               $WHERE .= " AND titre LIKE '%" . $data . "%' "; 
          }
    $query_compte_messagerie = sprintf("SELECT DISTINCT id, mail, login, titre, niveau, date, categorie, comment, afficher, numero_facture FROM `comment` $WHERE ORDER BY id DESC");
    $compte_messagerie = mysql_query($query_compte_messagerie, $jewelry3d) or die(mysql_error());
    $row_compte_messagerie = mysql_fetch_assoc($compte_messagerie);
    $totalRows_compte_messagerie = mysql_num_rows($compte_messagerie);
    Deuxième version :
    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
     
     $colname_compte_messagerie = "-1";
    if (isset($_SESSION['MM_Username'])) {
      $colname_compte_messagerie = $_SESSION['MM_Username'];
    }
    if (isset($_POST['requete'])){
    		$mots = $_POST['requete'];
    	}
    mysql_select_db($database_jewelry3d, $jewelry3d);
     
       $motrecherche=explode(" ",$mots);
       $WHERE = "WHERE";
       $count = 0;
       reset ($motrecherche);
     
       while(list($key, $data) = each($motrecherche))
          {
          $count = $count + 1;
          if ($count == 1)   $WHERE .= "    titre LIKE '%" . $data . "%' OR date LIKE '%" . $data . "%'  OR comment LIKE '%" . $data . "%'  OR numero_facture LIKE '%" . $data . "%' "; 
          //else               $WHERE .= " AND titre LIKE '%" . $data . "%' "; 
          }
    $query_compte_messagerie = sprintf("SELECT DISTINCT id, mail, login, titre, niveau, date, categorie, comment, afficher, numero_facture FROM `comment` $WHERE AND afficher = '1' AND login = '".$colname_compte_messagerie."' AND categorie = 'Me to client' OR categorie = 'Demande' ORDER BY id DESC");
    $compte_messagerie = mysql_query($query_compte_messagerie, $jewelry3d) or die(mysql_error());
    $row_compte_messagerie = mysql_fetch_assoc($compte_messagerie);
    $totalRows_compte_messagerie = mysql_num_rows($compte_messagerie);

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    ton problème vient d'une absence totale de parenthèses dans ton WHERE :
    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
    <?php
     
    $login = (isset($_SESSION['MM_Username'])) ? $_SESSION['MM_Username'] : '-1';
    $words = (isset($_POST['requete'])) ? explode(' ', $_POST['requete']) : array();
    $where = array();
     
    foreach($words as $word) {
       $filter  = mysql_real_escape_string($word);
       $where[] = "(titre LIKE '%$filter%' OR date LIKE '%$filter%' OR comment LIKE '%$filter%' OR numero_facture LIKE '%$filter%')";
    }
     
    $sql_where  = "(afficher = 1 AND login = '$login' AND (categorie = 'Me to client' OR categorie = 'Demande'))";
    $sql_where .= (empty($where)) ? '' : ' AND ('.implode(' OR ', $where).')';
     
    $sql = <<<SQL
    SELECT
       DISTINCT id, mail, login, titre, niveau, date, categorie, comment, afficher, numero_facture
    FROM
       `comment`
    WHERE
       $sql_where
    ORDER BY
       id DESC
    SQL;
     
    ?>

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 7
    Par défaut C'étais ça merci ça fonctionne.
    Je suis impressionné par la réactivité qu'il y a sur ce forum, c'étais la première fois que je postais et j'ai eut ma réponse en 30 min. merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Créer une vue avec des conditions
    Par jamdinhe dans le forum Langage SQL
    Réponses: 4
    Dernier message: 02/12/2012, 09h59
  2. [PHP 5.3] Créer un formulaire de recherche avec des menus déroulants
    Par lololasticot dans le forum Langage
    Réponses: 3
    Dernier message: 01/04/2012, 15h35
  3. Yahoo relance la bataille des moteurs de recherche avec Search Pad
    Par Emmanuel Chambon dans le forum Général Conception Web
    Réponses: 2
    Dernier message: 07/07/2009, 22h07
  4. Yahoo relance la bataille des moteurs de recherche avec Search Pad
    Par Emmanuel Chambon dans le forum Actualités
    Réponses: 0
    Dernier message: 07/07/2009, 10h37
  5. Moteur de recherche avec Excel dans des onglets ?
    Par jufabref dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/07/2008, 13h51

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