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

Ext JS / Sencha Discussion :

Remplir une combobox à partir d'une base de données


Sujet :

Ext JS / Sencha

  1. #1
    Membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2012
    Messages : 49
    Points : 42
    Points
    42
    Par défaut Remplir une combobox à partir d'une base de données
    Bonjour,

    Je travaille actuellement sur une appli codé avec extjs, se n'est pas moi qui l'ai faite, je le précise.

    Je doit remplir une combobox a l'aide d'information que je récupère dans une base de donnée.

    J'ai farfouiller sur internet, et j'ai trouvé ça

    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
     
    var combo = new Ext.form.ComboBox({
      typeAhead: true, // Késako ?
      triggerAction: 'all', // Késako ?
      store: new Ext.data.JsonStore({
        reader: new Ext.data.JsonReader ( { // Lit les donnée de la bdd ?
           fields: [ 'myId', 'displayText' ], // Champs de la combobox ? 
           root: 'rows'
         }),
         proxy: new Ext.data.HttpProxy ( {
           url: 'path/to/your/script.php' // Peut être le lien où je fait m'a requête sql pour remplir la combobox ? Ce qui veut dire que je doit faire un fichier php pour chaque combobox différente créer ?
         } ),
      valueField: 'myId',
      displayField: 'displayText'
    });
     
    //where /path/to/your/script.aspx returns data like this:
     
    {"success":true,"total":4,"rows":[ // rows correspond surement au root plus haut ? total = le nombre de ligne trouvé dans la requete sql ? 
      {"myId":"1","displayText":"Option 1"}, // Les options de mon combo avec valeur
      {"myId":"2","displayText":"Option 2"},
      {"myId":"3","displayText":"Option 3"},
      {"myId":"4","displayText":"Option 4"}
    ]}
    Cependant je suis vraiment débutante en extjs, donc il y a des partie de ce code qui m'échappe, j'ai mis des question aux ligne que je ne comprenait pas, j'ai besoin d'aide help. C'est vraiment compliqué, j'ai chercher sur internet mais je n'ai pas trouvé de réponse très cohérente

    Merci

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Citation Envoyé par July171292 Voir le message
    // Peut être le lien où je fait m'a requête sql pour remplir la combobox ? Ce qui veut dire que je doit faire un fichier php pour chaque combobox différente créer ?
    si c'est le fichier PHP qui s'occupe de chercher les informations de la base de données, tu peux utiliser le même fichier PHP pour tout ton site et ce fichier s'occupera de retourner les informations en fonction des paramètres qui lui sont envoyés

  3. #3
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Citation Envoyé par July171292 Voir le message
    Bonjour,

    Je travaille actuellement sur une appli codé avec extjs, se n'est pas moi qui l'ai faite, je le précise.

    Je doit remplir une combobox a l'aide d'information que je récupère dans une base de donnée.

    J'ai farfouiller sur internet, et j'ai trouvé ça

    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
     
    var combo = new Ext.form.ComboBox({
      typeAhead: true, // Késako ?
      triggerAction: 'all', // Késako ?
      store: new Ext.data.JsonStore({
        reader: new Ext.data.JsonReader ( { // Lit les donnée de la bdd ? NON lit les donnée via le proxy voir ligne plus bas
           fields: [ 'myId', 'displayText' ], // Champs de la combobox ? Oui champ valeur et champ affiché
           root: 'rows'
         }),
         proxy: new Ext.data.HttpProxy ( {
           url: 'path/to/your/script.php' // Peut être le lien où je fait m'a requête sql pour remplir la combobox ? Ce qui veut dire que je doit faire un fichier php pour chaque combobox différente créer ? Il s'agin d'une url à toi de choisir sa forme toto.php?param=test est acceptable
         } ),
      valueField: 'myId',
      displayField: 'displayText'
    });
     
    //where /path/to/your/script.aspx returns data like this: Je suppose que tu parle du php 
     
    {"success":true,"total":4,"rows":[ // rows correspond surement au root plus haut ? OUI total = le nombre de ligne trouvé dans la requete sql ? NON le nombre de ligne retournées par le php
      {"myId":"1","displayText":"Option 1"}, // Les options de mon combo avec valeur Exact
      {"myId":"2","displayText":"Option 2"},
      {"myId":"3","displayText":"Option 3"},
      {"myId":"4","displayText":"Option 4"}
    ]}
    Cependant je suis vraiment débutante en extjs, donc il y a des partie de ce code qui m'échappe, j'ai mis des question aux ligne que je ne comprenait pas, j'ai besoin d'aide help. C'est vraiment compliqué, j'ai chercher sur internet mais je n'ai pas trouvé de réponse très cohérente

    Merci
    Réponses as tes question dans ton code

    pour le php faire une hashmap pour la réponse (Tableau associatif) contenant 'succes', 'total' et 'rows'compléter les élément par les valeur de la base.

    pour cela fair eune requête qui remonte les colonnes recherchées en les nommant avec les nom des champs attendus
    SELECT id AS myId, label AS displayTextparcourir le resultat de la requête récuprérer chaque ligne dans un tableeau associatif mysql_fetch_assoc et placer chaque ligne dans un tableau php. array_push($sqlData , $row);.

    retourner le tout en utilisant json echo json_encode.

    en cas d'erreur retourner la même structure avec success à false total à 0 pas de rows et un message d'erreur. toujour en json
    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
    15
    16
    17
    18
    19
    20
    21
    <?php
    try {
      $result = mysql_query("SELECT id AS myId, label AS displayText FROM ....");
      $sqlData = Array();
      while($row = mysql_fetch_assoc($result)){//get row as hashmap with myId and displayText member (look the Query)
         array_push($sqlData , $row);
      }
      $data = Array(
        'success' => true,
        'total' => count($sqlData), //ici le nombre d'éléments retournés on peut dans le while au dessus ne pas tous les prendres
        'rows' => $sqlData
      );
    } catch (Exception $e) {
      $data = Array(
        'success' => false,
        'total' => 0,
        'rows' => null,
        'error' => $e->getMessage()
      );
    }
    echo json_encode($data);
    Attention ne rien mettre avant le <?php ne pas faire d'echo dans le code php autre que le final PHP préconisse de ne pas mettre le ?> en fin de fichier.
    il est simple sur un script de ce type de gérer un parametre table qui est le nom de la table dans la quelle chercher les valeurs (il suffit d'adapter le sql à la structure de la table



    A+JYT

  4. #4
    Membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2012
    Messages : 49
    Points : 42
    Points
    42
    Par défaut
    Merci de votre réponse, mais malheureusement je rencontre encore des problèmes

    Voici mon store :
    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
    var remplirComboGrVar = new Ext.data.JsonStore({       
            autoload: true,
            reader: new Ext.data.JsonReader({
                fields: ['GVar_Id', 'GVar_Lib'],
                root: 'rows'
            }),
            proxy: new Ext.data.HttpProxy({
                url: urlAjax, // Ma page php, voir plus bas
                method : 'POST',
                params: {
                    method: 'comboGrVar' // VOIR PHP PLUS BAS, CORRESPOND A LA FONCTION A EXECUTER DANS LE PHP
                }
            }),
            valueField: 'GVar_Id',
            displayField: 'GVar_Lib'
    });
    Ma combobox où j'appelle mon store, elle fait partie de nombreux item dans un panel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    {
    xtype: 'combo',
    store: remplirComboGrVar
    },
    Mon php, l'url est dans la variable urlAjax :
    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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    function comboGrVar(){
        $DB = new DB();
        $result = $DB->query("SELECT GVar_Id, GVar_Lib FROM Var_Groupe ORDER BY GVar_Lib");
        $sql = array();
         try{
            while ($row = $DB->fetch_assoc($result)){
                 array_push($sql , $row);
            }
            $data = array(
            'success' => true,
            'total' => count($sql),
            'rows' => $sql
            );
        }
        catch(Exception $e){
             $data = array(
             'success' => false,
             'total' => 0,
             'rows' => null,
             'error' => $e->getMessage()
             );
        }
        echo json_encode($data);
    }

    La combobox ne se remplis pas

    il y a t-il quelque chose que j'ai mal fait ? Comment est ce que je pourrais affiché une alerte contenant le "error" de mon json ?

    C'est assez complexe, j'ai encore du mal a cerner la chose :p

  5. #5
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    ce qui est important c'est le contenu de la réponse JSON
    pas le code PHP

  6. #6
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    A priori, si tout se passe bien ça se passera mal et il n'y aura rien tout court dans la réponse puisque le script PHP se contente de définir une fonction qui n'est jamais appelée !
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  7. #7
    Membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2012
    Messages : 49
    Points : 42
    Points
    42
    Par défaut
    Haha ma requête s’exécute normalement, je ne l'ai pas mis mais plus bas j'ai ça :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    switch($_POST['method'])
    {
    	case 'comboGrVar': comboGrVar(); break;
        case 'addGrVar': addGrVar(); break;
        case 'supVar': supVar(); break;
        case 'gridPanelVar' : gridPanelVar(); break;
    }

    Selon la valeur de $_POST['method'], ça exécute tel fonction, ici $_POST['method'] = 'comboGrVar' donc ça devrait exécuter la fonction comboGrVar().
    Peut être mon passage de paramètre est faux ? Je ne sais pas .
    Et je précise que j'utilise ce procédé pour addGrVar() et supVar(), est ça marche très bien.

    Mon json donne ça
    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
     
    {"success":true,"total":23,
        "rows":[
            {"GVar_Id":"17","GVar_Lib":"Conformit\u00e9"},
            {"GVar_Id":"11","GVar_Lib":"Exploitation clarifloculation"},
            {"GVar_Id":"9","GVar_Lib":"Exploitation UPBD"},
            {"GVar_Id":"7","GVar_Lib":"Exploitation UPEI"},
            {"GVar_Id":"25","GVar_Lib":"fdgsfd"},
            {"GVar_Id":"24","GVar_Lib":"fgfsf"},
            {"GVar_Id":"12","GVar_Lib":"Laboratoire Nit-D\u00e9nit"},
            {"GVar_Id":"8","GVar_Lib":"Laboratoire UPBD"},
            {"GVar_Id":"16","GVar_Lib":"Laboratoire UPBD - exploitation"},
            {"GVar_Id":"2","GVar_Lib":"Laboratoire UPEI - analyses azotes et phosphore"},
            {"GVar_Id":"3","GVar_Lib":"Laboratoire UPEI - analyses NSD"},
            {"GVar_Id":"1","GVar_Lib":"Laboratoire UPEI - analyses organique"},
            {"GVar_Id":"15","GVar_Lib":"Laboratoire UPEI - RSDE"},
            {"GVar_Id":"4","GVar_Lib":"Laboratoire UPEI - TAC, Chlorures, Eaux industrielles, pH"},
            {"GVar_Id":"22","GVar_Lib":"Maintenance m\u00e9canique"},
            {"GVar_Id":"14","GVar_Lib":"R\u00e9actifs Nit-D\u00e9nit"},  
            {"GVar_Id":"23","GVar_Lib":"test"},
            {"GVar_Id":"26","GVar_Lib":"test"},
            {"GVar_Id":"19","GVar_Lib":"UP Biogaz"},
            {"GVar_Id":"18","GVar_Lib":"UP Biologie"},
            {"GVar_Id":"20","GVar_Lib":"UP Clarif"},
            {"GVar_Id":"21","GVar_Lib":"UP NitDenit"},
            {"GVar_Id":"13","GVar_Lib":"UP pr\u00e9traitement"} 
          ]
    }

  8. #8
    Membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2012
    Messages : 49
    Points : 42
    Points
    42
    Par défaut
    Miracle ça marche enfin, j'ai déplacer des éléments de code et sa marche enfin, je mes le code final pour ce que ça intéresse !!

    Mon store :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    var remplirComboGrVar = new Ext.data.JsonStore({
        proxy: new Ext.data.HttpProxy({
            url: urlAjaxGrVar,
            method: 'POST'
        }),
        baseParams: { method: 'comboGrVar' },
        autoLoad: true,
        fields: ["GVar_Id", "GVar_Lib"],
        root: "rows",
        totalProperty: "total",
        successProperty: "success"
    });
    Ma combobox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    {
        xtype: 'combo',
        store: remplirComboGrVar,
        valueField: "GVar_Id",
        displayField: "GVar_Lib",
        triggerAction: 'all',
        mode: 'local'
    },
    Mon php n'a pas changé

    Merci pour votre aide

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

Discussions similaires

  1. Remplir un combobox à partir d'une base de données
    Par walid kh dans le forum VB.NET
    Réponses: 4
    Dernier message: 17/04/2019, 13h50
  2. Réponses: 1
    Dernier message: 14/05/2014, 07h58
  3. Remplir une comboBox à partir d'une autre combobox
    Par karnass dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 13/03/2013, 15h22
  4. Réponses: 2
    Dernier message: 21/03/2012, 10h21
  5. Remplir une JTable à partir de la base de données
    Par L'aigle de Carthage dans le forum Composants
    Réponses: 1
    Dernier message: 13/03/2012, 17h28

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