Voir le flux RSS

autran

[Actualité] [Tutoriel] Produire des données au format JSON en PHP

Note : 3 votes pour une moyenne de 5,00.
par , 01/01/2017 à 10h59 (1788 Affichages)
Comme annoncé dans le billet précédant, montrons comment notre serveur PHP peut renvoyer des objets JSON.

1/ Le serveur web et base de données
Pour ce faire le seul pré-requis est de disposer d'un serveur Apache avec le module PHP et d'une base de données. De nombreux hébergeurs du Cloud en proposent. L'objet de ce billet n'étant pas de faire de la pub pour les hosters, je vous laisse le choix de l’hébergeur.
Afin que ce que je montre soit parfaitement reproductible pour le lecteur je m'affranchirai de la problématique d'hébergement en utilisant un serveur que j'héberge sur mon PC. J'ai opté pour le serveur Apache + PHP + MySQL tout en un. Comme mon PC est sous linux, j'ai choisi XAMP. Mais quel que soit votre système d’exploitation vous pourrez télécharger une version XAMP idoine.


2/ Le cahier des charges
Rappelons que notre client attend une liste d'outils sous la forme d'un tableau d'objets au format JSON.
Nous stockerons donc les outils dans une base de données (MySQL). Le serveur PHP devra donc permettre d'extraire les données de la base et les envoyer au client au format JSON. Il faudra changer une seule donnée sur le serveur.
Pour tester notre serveur nous changerons dans le client xhr.open("GET", "data.json", true); par xhr.open("GET", "jsonfactory.php", true); jsonfactory.php étant le fichier PHP qui nous restera à développer dans ce tuto.


3/ La base de données
L'utilitaire d'administration PhpMyAdmin permet de configurer la table outils et de la remplir aisément. Si vous gérez à la main votre base de donnée, voici le script de création de la table et de peuplement

Code sql : 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
--
-- Création de la table `outils`
–
 
CREATE TABLE `outils` (
  `id` int(11) NOT NULL,
  `nom` varchar(255) NOT NULL,
  `description` varchar(255) NOT NULL,
  `qte` int(11) NOT NULL,
  `prix` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
 
--
-- Contenu de la table `outils`
--
 
INSERT INTO `outils` (`id`, `nom`, `description`, `qte`, `prix`) VALUES
(1, 'marteau', 'pour enfoncer des clous', 5, 22),
(2, 'tournevis', 'pour ouvrir le pot de peinture', 6, 30),
(3, 'tenailles', 'pour arracher les dents', 8, 11),
(4, 'pinces multiples', 'pour bricoler le dimanche', 22, 35),
(5, 'cle de 12', 'pour reparer le tracteur', 2, 85);

Comme on le remarquera dans le script PHP cette table est chez moi localisée dans la base user et j'ai créé un utilisateur user (mot de passe «user») ayant l'autorisation de manipuler en lecture les données de cette table.

4/ Développement PHP
Ce sera en réalité très simple car il suffit de :
  • Lire (via l'objet standard du langage PDO) toute les données de la table outils
  • Mettre ces données dans un tableaux d'objets
  • Encoder le tableau au format JSON
  • Envoyer la chaine JSON comme réponse au client

Voici le script de la page jsonfactory.php
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
<?php
  try {
    $bdd = new PDO('mysql:host=localhost;dbname=user;charset=utf8', 'user', 'user');
  }
  catch (Exception $e) {
    die('Erreur : ' . $e->getMessage());
  }
  $query = $bdd->query("Select * from outils");
  $outils = array();
  while ($outil = $query->fetch())
    array_push($outils, array("nom" => $outil["nom"],
                              "desc" => $outil["description"],
                              "qte" => $outil["qte"],
                              "prix" => $outil["prix"]));
  echo(json_encode($outils));
?>
5/ Conclusions
On a vu qu'il est aisé de produire des données JSON au profit d'un client JavaScript à partir d'un serveur PHP. Mais je vous rassure, Java – C# - JavaScript sont des langages cotés serveur qui permettent de produire du JSON aussi facilement.
JSON étant le format utilisé pour 90% des Web Services (REST), on imagine bien que l'étape suivante est la production de web services.

Envoyer le billet « [Tutoriel] Produire des données au format JSON en PHP » dans le blog Viadeo Envoyer le billet « [Tutoriel] Produire des données au format JSON en PHP » dans le blog Twitter Envoyer le billet « [Tutoriel] Produire des données au format JSON en PHP » dans le blog Google Envoyer le billet « [Tutoriel] Produire des données au format JSON en PHP » dans le blog Facebook Envoyer le billet « [Tutoriel] Produire des données au format JSON en PHP » dans le blog Digg Envoyer le billet « [Tutoriel] Produire des données au format JSON en PHP » dans le blog Delicious Envoyer le billet « [Tutoriel] Produire des données au format JSON en PHP » dans le blog MySpace Envoyer le billet « [Tutoriel] Produire des données au format JSON en PHP » dans le blog Yahoo

Tags: json, php
Catégories
PHP , Développement Web

Commentaires

  1. Avatar de Jcpan
    • |
    • permalink
    En générale si c'est du JSON on pense directement à une requête préparée vu sa réutilisation fréquente.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $statement=$pdo->prepare("Select * from outils");
    $statement->execute();
    $results=$statement->fetchAll(PDO::FETCH_ASSOC);
  2. Avatar de autran
    • |
    • permalink
    Merci Jcpan pour ce retour.
    Oui tu as parfaitement raison c'est bien comme cela que ferait un vrai développeur PHP.
    Je ne voulais juste pas rentrer dans les détails de la foultitudes de modes de fetchAll() et rester le plus général possible pour produire du JSON avec un langage coté serveur. Je souhaitais que mon code soit compréhensible pour un développeur Java ou JavaScript qui n'aurait jamais fait de PHP. Pour ce billet j'ai choisi PHP pour toucher une cible plus large.
    Pour un prochain tuto sur les WS, si je choisi encore PHP, j'utiliserai des prepared statements.