Admin/Dev

29
Juil.
2018

Réceptionner des données JSON en POST avec PHP

Publié par sky

Nous avons récemment vu comment envoyer des données JSON en POST avec PHP, savoir comment les réceptionner peut être aussi utile.

Il n'y a rien de compliqué, seulement à savoir qu'on ne trouvera rien dans les valeurs $_POST ou $_REQUEST. Il y a donc une petite subtilité à connaître, il faut passer par un autre chemin :

$jsonData = file_get_contents("php://input");

puis le décoder pour retrouver notre objet, ou notre tableau associatif dans PHP

$data = json_decode($jsonData, true);

et voilà, rien de plus compliquer.

Si l'on veut border tout cela, on peut ajouter quelques contrôles pour mieux gérer les erreurs, à remplacer, évidemment par vos propres retours.

/* Reception du JSON */
$jsonData = file_get_contents("php://input");
        
/* Verifie si JSON est vide */
if (strlen($jsonData) > 0) {
    /* Decoder JSON */
    $data = json_decode($jsonData, true);
    /* Verifie les erreurs et le format final */
    if (!(json_last_error() == JSON_ERROR_NONE and is_array($data)))
        die('Données JSON invalides.');
} else
    die('Aucune données JSON.');
 
Sommaire de la série
 
 
Commentaires
Commentaire de Pascal le 12 Juillet 2022 à 10:02

Bonjour

Je suis en train de tester vos deux tutos et malheureusement je termine toujours avec un " Données JSON invalides."

Mon PHP qui envoie le JSON est ici : www.pascal-bourhis.com/postj... et contient :
* Creation des donnees */
$data = array(
'action' => 'put',
'objectType' => 'Produit',
'objectId' => 7,
'objectData' => array(
'type' => 'Film Blu-Ray',
'title' => 'Mon super film',
'category' => 'Action',
'length' => 92
),
);

/* Creation des options de contexte */
$options = array(
'http' => array(
'method' => 'POST',
'header' => "Content-Type: application/json",
'ignore_errors' => true,
'timeout' => 10,
'content' => json_encode($data),
),
);

/* Creation du contexte HTTP */
$context = stream_context_create($options);

/* Execution de la requete */
file_get_contents('www.pascal-bourhis.com/lives...', false, $context);


Le fichier qui reçoit contient :

/* Reception du JSON */
$jsonData = file_get_contents("php://input");

/* Verifie si JSON est vide */
if (strlen($jsonData) > 0) {
/* Decoder JSON */
$data = json_decode($jsonData, true);
/* Verifie les erreurs et le format final */
if (!(json_last_error() == JSON_ERROR_NONE and is_array($data)))
die('Données JSON invalides.');
$err= 'Données JSON invalides.';
} else {
die('Aucune données JSON.');
$err= 'Aucune données JSON.';
}

$expfile = 'livestorm-create-event.txt';
$myfile = fopen($expfile, "w") or die("Unable to open file!");
fwrite($myfile, $err);
fclose($myfile);


> Je génère donc un fichier .txt ici : www.pascal-bourhis.com/lives...

Merci de votre aide

 
Commentaire de sky le 12 Juillet 2022 à 10:57

Bonjour,
Tel quel, je ne vois pas ou peut se trouver le soucis.
Vous devriez modifier le code pour récupérer l'erreur JSON avec json_last_error().
Cela peut, peut être vous aiguiller sur le problème.

 

 

Poster un commentaire
En postant sur skymac.org, je m'engage à être courtois et à ce que mon message soit pertinent avec le sujet de l'article.
En outre, j'accepte, sans condition, que mon message soit refusé et supprimé si ces règles ne sont pas appliquées.
Ouvrir le panneau de gestion des cookies
Fermer le panneau
Ce site utilise des cookies pour assurer son bon fonctionnement. Il utilise aussi des cookies issues de services tiers permettant de proposer des fonctionnalités avancées. À tout moment, vous pouvez choisir quels services vous souhaitez activer ou refuser, afin de retirer votre consentement quant à l'utilisation des cookies.
 
Personnalisation des services
Vous êtes libre de choisir quels services vous souhaitez activer. En autorisant ces services tiers, vous acceptez le dépôt et la lecture de cookies et l'utilisation de technologies de suivi nécessaires à leur bon fonctionnement. En retirant votre consentement pour certains de ces services, certaines fonctionnalités du site peuvent ne plus fonctionner.
Navigation du site  En savoir plus
Le site écrit un cookie de session permettant son bon fonctionnement et aidant à la navigation. Il ne peut être désactivé.
Utilisation : 1 cookie, enregistre l'identifiant de la session.
Durée de vie : Le cookie est présent pendant toute la session sur le site. Il devient obsolète après 24 minutes d'inactivité.
Obligatoire
Popup Média
Afficher des vidéos depuis Yoube ou Dailymotion.
 
Tout accepter Tout refuser Gérer