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

Langage PHP Discussion :

Récupération et traitement Json dans une api rest [PHP 7]


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2018
    Messages : 15
    Points : 15
    Points
    15
    Par défaut Récupération et traitement Json dans une api rest
    Bonjour, je reposte à nouveau un sujet car je suis bloqué depuis hier sur une problématique que je ne comprend pas bien. Voila j'ai un tableau de données alimenté par des données en base récupérées par le biais d'une API REST le tout codé en php entièrement. Mon problème se situe quand je souhaite envoyer des données depuis mon interface utilisateur vers l'API pour insérer ces données en base. Voilà se que je fait pour envoyer mes données du tableau vers l'API :
    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
     
    <?php
     
    function console_log( $data ){
      echo '<script>';
      echo 'console.log('. json_encode( $data ) .')';
      echo '</script>';
    }
     
    $url = 'localhost/api/prendreEnvir.php';
     
    $ch = curl_init($url);
     
    if (!empty($_POST['version']) && !empty($_POST['quadri']))
    {
    $json = array('application' => $_POST['application'], 'envir' => $_POST['environnement'], 'compte' => $_POST['compte'], 'base' => $_POST['base'], 'version' => $_POST['version'], 'utilisateur' => $_POST['quadri']);
     
        //$jsonPrise = json_encode($json);
        //echo $jsonPrise;
        console_log($json);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json'));
        $result = curl_exec($ch);
        //header('Location: http://localhost/ihm_env/tableau.php');*/
    }
    ?>
    Voilà se que m'affiche ma variable "$json" dans ma console (c'est la première ligne de mon tableau avec une nouvelle valeur pour "version" et "utilisateur" pour l'exemple):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Object { application: "SGG", envir: "HOMOLOGATION", compte: "user12", base: "SGGTRT", version: "1902", utilisateur: "ANBO" }
    Maintenant du côté de l'API REST voilà le code que j'ai juste pour récupérer mon json et l'affiche tout d'abord :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php
    include 'header.php';
     
    $content = file_get_contents("php://input");
    $decod = json_decode($content, true);
    echo "json non décodé :".$content;
    echo "<br>";
    echo "json décodé :".$decod;
    ?>
    Sans oublier le header.php qui ne fait qu'initialiser la connexion à la base de donnée :
    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
     
    header('Content-Type: application/json');
     
    try
    {	//Connexion à la base de donnée
    	$pdo = new PDO('mysql:host=localhost;dbname=ihm_env', 'root', '');
     
    }catch(Exception $e)
    {
    	return_json(false, "Connexion à la base donnée impossible");
    }
    function return_json($success=NULL, $msg=NULL, $compteurs=NULL, $envir=NULL)
    {
    	$retour["success"] = $success;
    	$retour["message"] = $msg;
    	$retour["compteur"] = $compteurs;
    	$retour["environnement"] = $envir;
     
    	echo json_encode($retour);
    }
    ?>
    Et donc finalement voila se que me renvoi mon API :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    json non décodé :--------------------------ca8dba819ce2884a Content-Disposition: form-data; name="application" SGG --------------------------ca8dba819ce2884a Content-Disposition: form-data; name="envir" HOMOLOGATION --------------------------ca8dba819ce2884a Content-Disposition: form-data; name="compte" user12 --------------------------ca8dba819ce2884a Content-Disposition: form-data; name="base" SGGTRT --------------------------ca8dba819ce2884a Content-Disposition: form-data; name="version" 1902 --------------------------ca8dba819ce2884a Content-Disposition: form-data; name="utilisateur" ANBO --------------------------ca8dba819ce2884a--
    json décodé :
    Je ne comprend pas pourquoi mon json_decode ne me renvoi rien du tout et donc à cause de ça je ne peux pas exploiter mon json pour insérer les données qu'il contient en base.
    Quelqu'un aurait-il une idée de se qui cloche ??

    Merci d'avance

  2. #2
    Membre chevronné

    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2013
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 576
    Points : 1 989
    Points
    1 989
    Par défaut
    Salut,

    Peut-être car ta chaîne n'est pas un json valide cela ne ressemble pas à un json, regarde l'erreur http://php.net/manual/fr/function.json-last-error.php cela vient peut-être du fait que tu récupères avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    file_get_contents("php://input");

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2018
    Messages : 15
    Points : 15
    Points
    15
    Par défaut
    Tout d'abord merci pour ta réponse Kevin, j'ai donc utilisé la fonction json_last_error pour identifier mon problème, il semblerait que tu es raison en se qui concerne le fait que que le format de mon json ne soit pas bon, le souci c'est que ce n'ai pas le cas pour l'entièreté du json car voilà se que me retourne la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Décodage : SGG1 - Erreur de syntaxe ; JSON malformé Décodage : PRODUCTION - Erreur de syntaxe ; JSON malformé Décodage : guide - Erreur de syntaxe ; JSON malformé Décodage : SGGTRT - Erreur de syntaxe ; JSON malformé Décodage : 1902 - Aucune erreur Décodage : ANBO - Erreur de syntaxe ; JSON malformé
    Du coup pourquoi 1902 serait-il au bon format et pas le reste alors qu'il est formé de la même manière que les autres (je rappel la formation de mon tableau qui sert à créer le json ensuite) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $json = array('application' => $_POST['application'], 'envir' => $_POST['environnement'], 'compte' => $_POST['compte'], 'base' => $_POST['base'], 'version' => $_POST['version'], 'utilisateur' => $_POST['quadri']);
    Du coup je suis un peu perdu, je comprend pas pourquoi mon json ne se forme pas en totalité correctement !

    Help please ! !

    Merci d'avance

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2018
    Messages : 15
    Points : 15
    Points
    15
    Par défaut
    Bonjour, après vérification il semblerait que mon problème vienne du content-type, en fait pour envoyé mon json j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        console_log($json);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json'));
        $result = curl_exec($ch);
    Avec $json étant un array, hors lorsque je submit mon tableau voilà se que me renvoi mon navigateur au niveau de l'onglet réseau sur le header de la réponse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Content-Type : text/html; charset=UTF-8
    Pourquoi mon HTTPHEADER ne s'applique pas, quelqu'un à une idée ??

    Merci d'avance

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2018
    Messages : 15
    Points : 15
    Points
    15
    Par défaut
    Bon finalement j'ai réussi à faire fonctionner mon appli, pour le problème exposé ici qui me bloquais j'ai du ajouter sur ma page qui contenait la déclaration cURL la ligne suivante en début de page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    header('Content-Type: application/json');
    Car le problème était le Content-Type.

    Voilà

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

Discussions similaires

  1. Format d'un JSON pour une API REST
    Par pierapi dans le forum Langage
    Réponses: 2
    Dernier message: 17/09/2015, 15h15
  2. Réponses: 4
    Dernier message: 28/09/2014, 20h41
  3. Récupération JSON dans une page HTML
    Par pikamo dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 10/09/2014, 17h08
  4. Impossibilité d'utiliser l'API JSON dans une servlet
    Par SpeedOverflow dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 21/12/2011, 09h40
  5. Récupération de données validées dans une pop-up
    Par hdd dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 01/12/2004, 16h47

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