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 :

comment je peux transformer ma requete en json ? [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 191
    Points : 595
    Points
    595
    Par défaut comment je peux transformer ma requete en json ?
    Bonjour, je dois récupérer des données pour les afficher en json
    voici mon script de test:

    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
     
    <?php
     
    try {
        // On se connecte à MySQL
        $bdd = new PDO('mysql:host=localhost;dbname=moodle_prod', 'root', 'test');
    } catch (Exception $e) {
        // En cas d'erreur, on affiche un message et on arrête tout
        die('Erreur : ' . $e->getMessage());
    }
     
    $sql = "SELECT id,email FROM prod_user WHERE id=2681";
    echo $sql;
    $users = $bdd->query($sql);
    echo "<br/>";
    foreach ($users as $U) {
        $id = $U['id'];
        $email = $U['email'];
    }
     
    $k1 = array('id' => $id, 'name' => $email);
    $K2 = array($id => $k1);
    $K3 = array('Matching not enrolled users' => $K2);
     
    echo json_encode(array('results' => $K3));
    ceci fonctionne mais si j'ai 2 réponses comment je fais ? il y a t'il plus simple ?
    mon but est d'avoir ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    {"results":{"Matching not enrolled users":{"1490":{"id":"1490","name":"Admin -sup.fr)"},"2":{"id":"2","name":"ds@lf.fr)"},"4372":{"id":"4372","name":"Admin)"}}}}
    je vous remercie beaucoup de votre réponse

  2. #2
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 51
    Points : 44
    Points
    44
    Par défaut
    tu peux transformer n'importe quel tableau php en json grâce à la fonction json_encode. Pour plus d'information la doc php.


  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 191
    Points : 595
    Points
    595
    Par défaut
    merci de ta réponse j'ai essayer ceci mais cela ne fontionne pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        $sql = "SELECT id,email FROM prod_user WHERE id=2682 OR id=2680";
     
        $users = $bdd->query($sql)->fetchAll();
     
     
        print_r($users);
     
       // $k1 = array('id' => $id, 'name' => $email);
        //$K2 = array($id => $k1);
     
     
        echo json_encode(array('results' => $users));

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 51
    Points : 44
    Points
    44
    Par défaut
    tu as un message d'erreur ?

  5. #5
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 191
    Points : 595
    Points
    595
    Par défaut
    Je n'ai pas de message d'erreur car c'est un retour d'ajax

    sinon je redonne le modèle qui fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $test='
        {"results":
            {"Matching not enrolled users":
                {
                    "1490":{"id":"1490","name":"Admin -sup.fr)"},
                    "2":{"id":"2","name":"ds@lf.fr)"},
                    "4372":{"id":"4372","name":"Admin)"}}
            }
        }';
    voici l'envoir du json avec firebug
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    {"results":
       [{"id":"2680","0":"2680","email":"mai@mail.fr","1":"mai@mail.fr"},    
     
       {"id":"2682","0":"2682","email":"caroline.r","1":"caroline."}]
    }
    ça ne resemble pas bien au modèle

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 51
    Points : 44
    Points
    44
    Par défaut
    Donne nous ta réponse AJAX .

    Pour que ta réponse puisse être correct pour l'interprétation du json tu ne dois avoir que du json dans ta réponse php (pas de print_r()).

  7. #7
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 191
    Points : 595
    Points
    595
    Par défaut
    Comment je fait pour te donner la réponse ajax ?

    je travaillle sur ce code
    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
     
     
    // Do the search and output the results.
    $users = $userselector->find_users($search);
     
    foreach ($users as &$group) {
        foreach ($group as $user) {
            $output = new stdClass;
            $output->id = $user->id;
            $output->name = $userselector->output_user($user);
            if (!empty($user->disabled)) {
                $output->disabled = true;
            }
            $group[$user->id] = $output;
        }
    }
    echo json_encode(array('results' => $users));

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 51
    Points : 44
    Points
    44
    Par défaut
    Citation Envoyé par keokaz Voir le message
    Comment je fait pour te donner la réponse ajax ?
    Avec firebug comme tu viens de me montrer sur l'exemple qui marche. Tu as un onglet 'réponse' quand tu cliques sur ta requête.

  9. #9
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 191
    Points : 595
    Points
    595
    Par défaut
    tu veux toute la ligne?

    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
     
    Array
    (
        [0] => Array
            (
                [id] => 2680
                [0] => 2680
                [email] => xxxx
                [1] => xxx
            )
     
        [1] => Array
            (
                [id] => 2682
                [0] => 2682
                [email] => xxxx
                [1] => xxx
            )
     
    )
    {"results":[{"id":"2680","0":"2680","email":"xxxx","1":"xxxx"},{"id":"2682","0":"2682","email":"caroline.","1":"xxxx"}]}

  10. #10
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 51
    Points : 44
    Points
    44
    Par défaut
    ça marche bien, non ?

    Il te suffit juste d'enlever le print_r() et la réponse ajax sera prête à interpréter .

  11. #11
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 191
    Points : 595
    Points
    595
    Par défaut
    je n'avais pas mis de print_r

    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
     
    if ($search == '1A') {
     
     $sql = "SELECT id,email FROM prod_user WHERE id=2682 OR id=2680";
     
        $users = $bdd->query($sql)->fetchAll();
     
     
     
       // $k1 = array('id' => $id, 'name' => $email);
        //$K2 = array($id => $k1);
     
     
        echo json_encode(array('results' => $users));
    }
    else
    {
    echo json_encode(array('results' => $users));
    }
    c'est peut êrtre à cause du cache j'ai redémarrer firefox, mes résutat sont vide (undéfine) mais j'ai bien 2 utilisateurs
    il faut que je travaille le tableau ?
    resultat de l'ajax
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    {"results":[{"id":"2680","0":"2680","email":"mai@mail.fr","1":"mai@mail.fr"},{"id":"2682","0":"2682","email":"mai@mail.fr","1":"mai@mail.fr"}]}

  12. #12
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 191
    Points : 595
    Points
    595
    Par défaut
    Bon j'ai une idée mais je sais pas si c'est faisable:
    si je fait ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     $tete = ' {"results": {"Matching not enrolled users": {';
     $tb='"1490":{"id":"1490","name":"Admin -sup.fr)"},
                    "2":{"id":"2","name":"ds@lf.fr)"},
                    "4372":{"id":"4372","name":"Admin)"}}';
     $fin='   }}';
     echo $tete.$tb.$fin;
    ici ça fonctionne bien, d'ailleur je ne savais pas que la fonctionne json permettais que d'ajouter des acolade et des points deux point ....je pensais que qu'il faisait beaucoup de chose pour pourvoir afficher le résultat.

    j'ai donc essayer de faire ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     $tete = ' {"results": {"Matching not enrolled users": {';
     $tb='[{"id":"2680","0":"2680","email":"mai@mail.fr","1":"mai@mail.fr"},{"id":"2682","0":"2682","email":"mai@mail.fr","1":"mai@mail.fr"}]';
     $fin='   }}';
     echo $tete.$tb.$fin;
    si je fait ceci ca ne fonctionne pas(c'est le résultat même résultat que ci dessous),
    comment faire pour supprimer les crochets?

  13. #13
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 191
    Points : 595
    Points
    595
    Par défaut
    pour le moment je n'ai trouver que ceci:

    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
     
     $sql = "SELECT id,email FROM prod_user WHERE id=2682 OR id=2680";
     
        $users = $bdd->query($sql);
     
                $ap= '"';//apostrphe
            $openacol=' ":{"id":"';//
            $closeacol='"},';
            $virgule='","name":"';
            $tete = ' {"results": {"Matching not enrolled users": {';
     
     
     
     
             echo $tete; 
        foreach($users as $U)
        {
            $id =$U['id']; 
            $email=$U['email'];
            echo $ap.$id.$openacol.$id.$virgule.$email.$closeacol;
        }
     
        echo ' "4372":{"id":"4372","name":"Admin)"}} } }';

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

Discussions similaires

  1. comment je peux passer un parametre a une sous requete
    Par boulhous dans le forum Requêtes
    Réponses: 5
    Dernier message: 20/01/2010, 11h10
  2. [SQL] Comment je peux mettre les résultat d'une requete dans un fichier
    Par Maria1505 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 10/12/2006, 21h44
  3. Comment je peux changer nom de 'Table' avec la phrase sql
    Par YEK dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 01/10/2004, 08h38
  4. Transformation de requete sql
    Par Spiderben dans le forum Requêtes
    Réponses: 5
    Dernier message: 11/02/2004, 21h49
  5. Réponses: 3
    Dernier message: 25/07/2002, 10h42

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