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 :

Question Rechercher élément dans toutes les colonne d' une tables


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Février 2014
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2014
    Messages : 145
    Par défaut Question Rechercher élément dans toutes les colonne d' une tables
    Bonjour a tous,

    je souhaite mettre en place sur mon site un champs de recherche ( afin de rechercher des produits ).

    Pour cela j'aurai effectué un formulaire avec mon champs de recherche et suivant la variable envoyé en GET j'aurai parcouru une colonne de ma table.

    le problème est que ma table articles comprend 5 colonnes de références ( ref_interne, ref_constructeur, ref_grossiste1 .....),
    Je souhaiterai que lorsque je récupérè le GET cela parcours toutes les colonnes et après me retourne le résultat .

    J'aurai pu fait un champs de recherche puis un menu déroulant reprenant le nom de mes colonnes cela aurai fait une autre variable a prendre en compte pour le GET, mais cela ne m'interresse pas.


    Est t'il possible avec une valeur de rechercher dans une table parcourant l'ensemble de mes 5 Colonnes ?

    en vous remerciant par avance pour votre aide

  2. #2
    Membre averti
    Homme Profil pro
    Technicien GC
    Inscrit en
    Juillet 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien GC
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Juillet 2017
    Messages : 23
    Par défaut
    Bonjour à toi,

    Grâce à toi j'ai un code tout prêt pour les recherches pour mon projet actuel

    Oui il est possible de faire la recherche sur plusieurs colonnes dans une table, il suffit dans ta requête SQL de ajouter WHERE nomColonne LIKE ?.
    Tu trouveras ci-dessous un code fonctionnel que tu devras mettre à jour en fonction des noms de tes colonnes etc..

    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
    <!DOCTYPE html>
    <html lang="en">
     
    <head>
        <meta charset="UTF-8">
        <title>Formulaire de recherche</title>
    </head>
     
    <body>
        <form method="GET">
            <input type="search" name="terme">
            <input type="submit" name="submit" value="Rechercher">
        </form>
    </body>
     
    </html>
     
     
    <?php
     
    if (isset($_GET['submit'])) {
        if (!empty($_GET['terme'])) {
            // Connexion à la base de donnée.
            $servername = "localhost";
            $dbname = "test";
            $username = "root";
            $password = "";
     
            try {
                $con = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
                $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            } catch (PDOException $e) {
                echo "Connection failed: " . $e->getMessage();
            }
     
            $terme = htmlspecialchars($_GET['terme']);
     
            // On récupère les données de la table.
            $stmt = $con->prepare(' SELECT *
                                    FROM produits 
                                    WHERE 
                                    refInterne LIKE ? OR 
                                    refConstructeur LIKE ? OR 
                                    refGrossiste LIKE ?
                                    ');
     
            $stmt->execute(['%' . $terme . '%', '%' . $terme . '%', '%' . $terme . '%']);
     
            // Vérification que le terme recherché se trouve dans nos colonnes.
            if ($stmt->rowCount() == 1) {
                ?>
                <table>
                    <tr>
                        <th>Ref Interne</th>
                        <th>Ref Constructeur</th>
                        <th>Ref Grossiste</th>
                    </tr>
                <?php
                // On récupère toutes les références associé au terme recherché.
                while ($donnees = $stmt->fetch()) {
                    ?>
                    <tr>
                        <td><?php echo $donnees['refInterne']; ?></td>
                        <td><?php echo $donnees['refConstructeur']; ?></td>
                        <td><?php echo $donnees['refGrossiste']; ?></td>
                    </tr>
                    <?php
                }
                ?>
                </table>
                <?php
            } else {
                echo '<p>Valeur non trouvée.</p>';
            }
        } else {
            echo '<p>Vous n\'avez entrer aucune valeur de recherche.</p>';
        }
     
        $stmt = null;
    }
     
    ?>
    Comme tu pourras le comprendre, la terme ici est recherché dans 3 colonnes, et le résultat de cette recherche si elle est juste me donne les valeurs des références des 3 colonnes dont une corresponds a la recherche bien sur.

  3. #3
    Membre confirmé
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Février 2014
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2014
    Messages : 145
    Par défaut
    Merci pour ta réponse,

    je pensais faire cela en requête SQL
    tu en pense quoi, cependant un critère important qui est l'id de la categorie de client.

    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
     
    function recherche_mot_cle()
    {
    	$categorie_client = $_SESSION['id_categorie_client'];
    	$bdd = connexion_bdd();
    	$requete = $bdd->query("
    SELECT * FROM `tbl_tarif_article` 
    INNER JOIN tbl_reference_article ON tbl_tarif_article.id_reference_article = tbl_reference_article.id_reference_article
    INNER JOIN tbl_article ON tbl_reference_article.id_article = tbl_article.id_article
    WHERE tbl_tarif_article.id_categorie_client = ".intval($categorie_client)."
    OR tbl_reference_article.ref_nfr = ".$_GET['mot_cle']."
    OR tbl_reference_article.ref_niss = ".$_GET['mot_cle']."
    OR tbl_reference_article.ref_den = ".$_GET['mot_cle']."
    OR tbl_reference_article.ref_val = ".$_GET['mot_cle']."
    OR tbl_reference_article.ref_hel = ".$_GET['mot_cle']."
    OR tbl_reference_article.ref_ava = ".$_GET['mot_cle']."
    OR tbl_reference_article.ref_constructeur = ".$_GET['mot_cle']."
    ");
     
    	$resultat = $requete->fetchAll();
    	return $resultat;
    }

    le problème c 'est que ca fait totalement abstraction au l'id de la categorie de l'utilisateur.
    ( test également effectué en directe dans phpmyadmin )

  4. #4
    Membre averti
    Homme Profil pro
    Technicien GC
    Inscrit en
    Juillet 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien GC
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Juillet 2017
    Messages : 23
    Par défaut
    Je pense que ça doit être à cause des conditions dans ton WHERE, tu n'as mis que des OR, il faut tu remplaces ton premier OR par AND

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    //..
    WHERE tbl_tarif_article.id_categorie_client = ".intval($categorie_client)."
    AND tbl_reference_article.ref_nfr = ".$_GET['mot_cle']."
    OR tbl_reference_article.ref_niss = ".$_GET['mot_cle']."
    /..
    }
    PS : Tu peux créer des alias dans ta requête afin de ne pas réécrire à chaque fois le nom de ta table

  5. #5
    Membre confirmé
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Février 2014
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2014
    Messages : 145
    Par défaut
    j'ai bien tester cependant il me sort toutes les entrée comportant la référence mais pour tous les catégories de clients.
    il m'exclue totalement le filtre au niveau de la catégorie client

    Peux etre que je teste mal,

    je part du principe que la ref est : PSA1250NI
    si j'essaye cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT * FROM `tbl_tarif_article` 
    INNER JOIN tbl_reference_article ON tbl_tarif_article.id_reference_article = tbl_reference_article.id_reference_article 
    INNER JOIN tbl_article ON tbl_reference_article.id_article = tbl_article.id_article WHERE tbl_tarif_article.id_categorie_client = "1" 
    AND tbl_reference_article.ref_nfr = "PSA1250NI"
     OR tbl_reference_article.ref_niss = "PSA1250NI"
    cette référence exact est que pour la ref niss
    sinon pour la ref nfr cela est PSA1250NFR

    le résultat obtenu est toutes les lignes apparaissent mais pour toutes les catégories de clients


    les lignes

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Il manque des parenthèses, et il faut faire une requête préparée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    WHERE ...
    AND (
       ...
       OR ...
       OR ...
    )

Discussions similaires

  1. Réponses: 14
    Dernier message: 19/12/2011, 13h13
  2. Réponses: 4
    Dernier message: 04/10/2010, 19h01
  3. nom de toutes les colonnes d'une table
    Par jeorcal dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/07/2010, 22h31
  4. Recherche sur toutes les colonnes d'une table
    Par Romain_marine dans le forum Requêtes
    Réponses: 2
    Dernier message: 02/04/2010, 14h35
  5. Réponses: 6
    Dernier message: 01/08/2006, 18h12

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