Newsletter Developpez.com

Inscrivez-vous gratuitement au Club pour recevoir
la newsletter hebdomadaire des développeurs et IT pro

Tutoriel AJAX : apprendre la production de données au format JSON en PHP
Par Marc Autran

Le , par autran, Rédacteur
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
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
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.


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster un commentaire

Avatar de Jcpan Jcpan - Membre averti https://www.developpez.com
le 17/01/2017 à 13:06
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
1
2
3
4
 
$statement=$pdo->prepare("Select * from outils"); 
$statement->execute(); 
$results=$statement->fetchAll(PDO::FETCH_ASSOC);
Avatar de autran autran - Rédacteur https://www.developpez.com
le 17/01/2017 à 13:49
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.
Offres d'emploi IT
Javascript developer intern
Pulpix - Ile de France - Paris (75009)
Développeur full-stack python et javascript
Trafalgraph - Ile de France - Paris (75000)
Développeur javascript h/f
Spallian - France - Luxembourg

Voir plus d'offres Voir la carte des offres IT
Responsable bénévole de la rubrique JavaScript : Xavier Lecomte -