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 :

Barre de recherche SGBD PHP [MySQL]


Sujet :

PHP & Base de données

  1. #21
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Attention à la logique (2 le retour ) en général, 2 possibilités de recherche ça veut plutôt dire que l'utilisateur va renseigner soit le 1er, soit le 2e champ.
    Il faut donc adapter la requête pour faire la recherche uniquement par rapport au champ qui est renseigné.
    Sinon, tu vas te retrouver avec une condition du genre matricule_employe LIKE '%%' ce qui revient à ne pas faire de filtre du tout
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  2. #22
    Membre du Club Avatar de IamKanagawa
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2018
    Messages : 114
    Points : 54
    Points
    54
    Par défaut
    Bon voilà ton code doit marcher mais le prob quand je fais une recherche par matricule cela me donne tout la bdd pareil pour nom et prenom

    et quand je mets un matricule et un nom et prenom ça marche et quand je mets aussi un matricule différent du nom et prenom cela m'affiche les deux tables

    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
    <?php
    $sql='SELECT * FROM employe_table WHERE (matricule_employe LIKE ?) OR (nom_employe LIKE ? AND prenom_employe LIKE ?)';
    $data=array();
    $db = include 'connect_bdd.php';
    try { 
      $matricule_search= $_POST['matricule_search'];
      $nom_search= $_POST['nom_search'];
      $prenom_search= $_POST['prenom_search'];
     
     
      $stmt = $db->prepare($sql);
      $stmt->execute(array('%'.$matricule_search.'%' ,'%'.$nom_search.'%' ,'%'.$prenom_search.'%'));
      while($row= $stmt->fetch(PDO::FETCH_ASSOC)){
        $data[]=$row;
      }
      unset($db);
      if(count($data)>0){
        echo '<pre>';
        print_r($data);
        echo '</pre>';
      }
      else{
        echo 'Aucun resultat pour cette requete';
      }
    } catch (Exception $e) {
      echo "Erreur ! " . $e->getMessage() . "<br/>";
    }
    ?>
    Il faut se tromper dans la vie, pour apprendre et s'améliorer.

    Etudiant BTS-SIO option SLAM

  3. #23
    Invité
    Invité(e)
    Par défaut
    Celira à raison.
    D'autant qu'ici, tu as un OR. (un AND ne poserait pas ce problème)

    Une recherche multi-critères nécessite de construire la requête en fonction des données reçues.

    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
    <?php
    // 1- récupération
      $matricule_search = ( !empty($_POST['matricule_search']) )? $_POST['matricule_search'] : '';
      $nom_search = ( !empty($_POST['nom_search']) )? $_POST['nom_search'] : '';
      $prenom_search = ( !empty($_POST['prenom_search']) )? $_POST['prenom_search'] : '';
     
    // 2- initialisation 
    $where = array();
    $params = array();
     
    // 3- construction de la requête 
    if( !empty($matricule_search) )
    {
      $where[] = " (matricule_employe LIKE ?) ";
      $params[] = '%'.$matricule_search.'%';
    }
     
    if( !empty($nom_search) && !empty($prenom_search) )
    {
      $where[] = " (nom_employe LIKE ? AND prenom_employe LIKE ?) ";
      $params[] = '%'.$nom_search.'%';
      $params[] = '%'.$prenom_search.'%';
    }
     
    // 4- clause WHERE
      $where = ( !empty($where) )? " WHERE " . implode( " OR ", $where ) : ""; // OR : l'un OU l'autre
     
    // 5- finalisation :
    $sql = "SELECT * FROM employe_table" . $where . "";
     
    $data=array();
    $db = include 'connect_bdd.php';
    try { 
      $stmt = $db->prepare( $sql );
      $stmt->execute( $params );
    ...

  4. #24
    Membre du Club Avatar de IamKanagawa
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2018
    Messages : 114
    Points : 54
    Points
    54
    Par défaut


    Enfin je me douté bien que ça venait du OR mais je pensé pas que c'était pas aussi compliqué mais ça va encore LOL

    Merci pour vos aides précieuses

    Le meilleur forum ^^
    Il faut se tromper dans la vie, pour apprendre et s'améliorer.

    Etudiant BTS-SIO option SLAM

  5. #25
    Membre du Club Avatar de IamKanagawa
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2018
    Messages : 114
    Points : 54
    Points
    54
    Par défaut
    Bonjour,

    je viens de rajouter quelques valeurs et je me suis aperçus que quand je m'étais "1" dans le module de recherche cela m'affiche tout les matricules qui contiennent un "1"
    je voudrais juste montrer les données qui sont exactement égale au matricule ou prenom et nom
    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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
     
     
    <!-- Table
    ==================================================  -->
    <fieldset class="tableau">
    <legend class="ttr1"><h4>Salarié recherché</h4></legend>
     
    <?php
    // 1- récupération
        $matricule_search = ( !empty($_POST['matricule_search']) )? $_POST['matricule_search'] : '';
        $nom_search = ( !empty($_POST['nom_search']) )? $_POST['nom_search'] : '';
        $prenom_search = ( !empty($_POST['prenom_search']) )? $_POST['prenom_search'] : '';
     
    // 2- initialisation 
        $where = array();
        $params = array();
     
     
    // 3- construction de la requête 
    if( !empty($matricule_search) )
      {
        $where[] = " (matricule_employe LIKE ?) ";
        $params[] = '%'.$matricule_search.'%';
      }
     
     
    if( !empty($nom_search) && !empty($prenom_search) )
      {
        $where[] = " (nom_employe LIKE ? AND prenom_employe LIKE ?) ";
        $params[] = '%'.$nom_search.'%';
        $params[] = '%'.$prenom_search.'%';
      }
     
     
    // 4- clause WHERE
      $where = ( !empty($where) )? " WHERE " . implode( " OR ", $where ) : ""; // OR : l'un OU l'autre
     
    // 5- finalisation :
      $sql = "SELECT * FROM employe_table" . $where . "";
     
      $data=array();  
      $db = include 'includes/connect_bdd.php';
    try { 
      $stmt = $db->prepare( $sql );
      $stmt->execute( $params );
     
     
      while($row= $stmt->fetch(PDO::FETCH_ASSOC)){
        $data[]=$row;
      }
      unset($db);
      if(count($data)>0){
     
          $table ='<table>'."\n";
          $table.='<thead>'."\n";
          $table.='<tr><th>Matricule</th>
                  <th>Nom</th>
                  <th>Prenom</th>
                  <th>Date de naissance</th>
                  <th>Date d embauche</th>
                  <th>Photo</th>
                  <th>Contrat</th>
                  <th>Fonction</th>
                  <th>Statut</th>
                  <th>Carte d identite</th>
                  <th>Carte BTP</th></tr>'."\n";
          $table.='</thead>'."\n";
          $table.='<tbody>'."\n";
        foreach($data as $donnee){
          $table.='<tr><td>'.$donnee['matricule_employe'].'</td>
                  <td>'.$donnee['nom_employe'].'</td>
                  <td>'.$donnee['prenom_employe'].'</td>
                  <td>'.$donnee['datenaiss_employe'].'</td>
                  <td>'.$donnee['date_embauche_employe'].'</td>
                  <td>'.$donnee['photo_employe'].'</td>
                  <td>'.$donnee['contrat_employe'].'</td>
                  <td>'.$donnee['fonction_employe'].'</td>
                  <td>'.$donnee['statut_employe'].'</td>
                  <td>'.$donnee['carte_identite_employe'].'</td>
                  <td>'.$donnee['carte_btp_employe'].'</td></tr>'."\n";
        }
          $table.='</tbody>'."\n";
          $table.='</table>'."\n";
        echo $table;
        }
        else{
        echo 'Aucun resultat pour cette requete';
        }
        } catch (Exception $e) {
          echo "Erreur ! " . $e->getMessage() . "<br/>";
        }
    ?>
    Comment faire ?
    Il faut se tromper dans la vie, pour apprendre et s'améliorer.

    Etudiant BTS-SIO option SLAM

  6. #26
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    C'est parce que tu utilises like au lieu de =.
    Et n'oublie pas que l'utilisation de like '%...%' pénalise fortement le temps de la requête. Au pire, utilise like '...%'.

    A+.

  7. #27
    Membre du Club Avatar de IamKanagawa
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2018
    Messages : 114
    Points : 54
    Points
    54
    Par défaut
    Citation Envoyé par andry.aime Voir le message
    C'est parce que tu utilises like au lieu de =.
    Et n'oublie pas que l'utilisation de like '%...%' pénalise fortement le temps de la requête. Au pire, utilise like '...%'.

    A+.
    Merci
    Il faut se tromper dans la vie, pour apprendre et s'améliorer.

    Etudiant BTS-SIO option SLAM

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [MySQL] Problème avec ma Barre de Recherche PHP
    Par moinamkomori dans le forum PHP & Base de données
    Réponses: 16
    Dernier message: 07/06/2016, 09h38
  2. barre de recherche dans les fonctions php pour firefox
    Par titoumimi dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 03/02/2006, 10h16
  3. [SGBD] PHP et mysqli - MySQL 4.1
    Par meda dans le forum Outils
    Réponses: 5
    Dernier message: 09/01/2005, 17h56
  4. Débutant recherche SGBD ... (mylittlebase ?)
    Par Phil39 dans le forum Débuter
    Réponses: 1
    Dernier message: 10/10/2004, 10h25
  5. Recherche SGBD légère et gratuite
    Par jab dans le forum Décisions SGBD
    Réponses: 7
    Dernier message: 23/09/2004, 08h52

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