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

MySQL Discussion :

Entrée utilisateur dans une requête SQL


Sujet :

MySQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mars 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2015
    Messages : 23
    Points : 12
    Points
    12
    Par défaut Entrée utilisateur dans une requête SQL
    Bonjour à tous,

    Je suis actuellement en train de développer une application de recherche.
    J'aimerais qu'une entrée de l'utilisateur soit prise en compte dans ma requête SQL.

    Elle est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT technical_item.TI, OBJECT, ENTITY_IN_CHARGE
    FROM technical_item, technical_item_object 
    WHERE technical_item.TI = technical_item_object.TI 
    AND technical_item.TI LIKE '%[entrez un nom de machine]%';
    Je voudrais que la saisie de l'utilisateur entre à la place de "[entrez un nom de machine]", avez vous des pistes ?

    Merci de votre aide,
    Corentin.

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par CocoFlouq Voir le message
    Bonjour à tous,

    Je suis actuellement en train de développer une application de recherche.
    Donc dans un certain langage et cette application se connecte à la base de données pour l'interroger et/ou mettre à jour ses données.

    J'aimerais qu'une entrée de l'utilisateur soit prise en compte dans ma requête SQL.

    Elle est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT technical_item.TI, OBJECT, ENTITY_IN_CHARGE
    FROM technical_item, technical_item_object 
    WHERE technical_item.TI = technical_item_object.TI 
    AND technical_item.TI LIKE '%[entrez un nom de machine]%';
    Je voudrais que la saisie de l'utilisateur entre à la place de "[entrez un nom de machine]", avez vous des pistes ?
    Les jointures s'écrivent depuis plus de 20 ans avec l'opérateur JOIN ; il serait temps de s'y mettre !

    L'utilisation d'alias pour les tables est fortement recommandé dès qu'il y a plus d'une table dans la requête. Cela facilite l'écriture et la lecture de celle-ci. Il faut ensuite utiliser systématiquement ces alias devant chaque colonne nommée pour savoir facilement de quelle table elle vient.

    C'est à l'application de paramétrer la requête pour envoyer au SGBD une requête syntaxiquement juste au SGBD.

    Exemple en PHP avec PDO :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $ti = $_GET['nom_machine'];
     
    $sql = "
    	SELECT i.TI, OBJECT, ENTITY_IN_CHARGE -- De quelle table proviennent les deux dernières colonnes ?
    	FROM technical_item i
    	INNER JOIN technical_item_object o ON o.TI = i.TI
    	WHERE i.TI LIKE :ti
    ";
     
    // en supposant que la connexion à la BDD est déjà lancée et est stockée dans l'objet $pdo
    $stmt = $pdo->prepare($sql);
    $stmt->bindparam(':ti', '%'.$ti.'%', PDO::PARAM_STR);
    $stmt->execute;
    $result = $stmt->fetchall();

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mars 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2015
    Messages : 23
    Points : 12
    Points
    12
    Par défaut
    Merci CinePhil, je débute avec tous ces langages et ton exemple m'aide beaucoup.
    Je vais me former sur les jointures, apparemment gain de temps et optimisation des requêtes par rapport à ma méthode.
    Je vais tenter de l'adapter pour mon application.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mars 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2015
    Messages : 23
    Points : 12
    Points
    12
    Par défaut
    Re Bonjour,

    J'ai tenté d'adapter le code à mon application (j'ai simplifié un peu la requête afin de faire des tests).
    Le code est le suivant :
    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
     
     
    <FORM method="get" action="index.php" class="tableau"> <!--Création du formulaire-->
                    </br></br>Quel TI recherchez vous ?</br></br>
                    <TABLE BORDER=0>
                    <TR>
                            <TD>Nom du TI</TD>
                            <TD>
                            <INPUT type="text" name="nom_TI">
                            </TD>
                    </TR>
     
                    <TR>
                            <TD COLSPAN=1>
                            <INPUT type="submit" value="Go">
                            </TD>
                    </TR>
                    </TABLE></br>
     
    <?php
     
         $pdo = new PDO('mysql:host='.$DB_HOST.';port='.$DB_PORT.';dbname='.$DB_NAME, $DB_USER, $DB_PASS);
         $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     
         if (isset($_GET['nom_TI'])){
     
            $ti = $_GET['nom_TI'];
     
            $sql = "
                    SELECT ti.TI
                    FROM technical_item ti
                    WHERE ti.TI LIKE :ti;
                    ";
     
            $sth = $pdo->prepare($sql);
            $sth->bindparam(':ti',$ti, PDO::PARAM_STR);
            $sth->execute();
            $result = $sth->fetchall();
     
          if($result){
            while($donnees = mysql_fetch_array($result,MYSQL_ASSOC)){
            echo $donnees['TI'];
            echo '<br>';
            } //end while
            } //end if
     
          else {
            echo 'Invalid query: ' . mysql_error() . "\n";
            }
    }//end if
     ?>
    Le message "mysql_fetch_array() expects parameter 1 to be resource, array given" apparaît. Après des recherches, il m'est indiqué que ce message provient d'une erreur dans la requête, qui me semble pourtant correcte.
    Avez vous des idées ?

    Merci de votre aide,
    Corentin.

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Tu mélanges les fonctions mysql_ et PDO ! Normal que PHP ne s'y retrouve pas !

    fetchAll retourne un tableau contenant toutes les lignes du résultat de la requête. Il suffit donc de parcourir le tableau $result avec foreach.

    Doc de fetchall : http://php.net/manual/fr/pdostatement.fetchall.php
    Doc de foreach : http://php.net/manual/fr/control-structures.foreach.php

  6. #6
    Membre à l'essai
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mars 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2015
    Messages : 23
    Points : 12
    Points
    12
    Par défaut
    En effet, un simple foreach sur le tableau et une suppression du mysql_fetch_array() et j'ai les résultats voulus
    Merci encore !

  7. #7
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Ton problème est donc ?

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

Discussions similaires

  1. [AC-2007] Récupérer nom de l'utilisateur windows dans une requête SQL
    Par Dallemg dans le forum VBA Access
    Réponses: 3
    Dernier message: 02/02/2015, 16h04
  2. [PHP 5.4] Insérer des valeurs saisies par l'utilisateur dans une requête SQL
    Par B.Berthod dans le forum Langage
    Réponses: 1
    Dernier message: 22/01/2015, 09h28
  3. Plusieurs jointures dans une requête sql
    Par Pero dans le forum Langage SQL
    Réponses: 3
    Dernier message: 21/09/2005, 20h59
  4. Nom de champ variable dans une requête SQL
    Par stip dans le forum ASP
    Réponses: 2
    Dernier message: 30/09/2004, 18h02
  5. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38

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