[RESOLU] lire json pour l'écrire dans base mysql

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] lire json pour l'écrire dans base mysql

Re: lire json pour l'écrire dans base mysql

par exyacc » 02 juin 2016, 11:52

merci beaucoup Naroth

ca marche tres bien

Code : Tout sélectionner

foreach($json_data['histo'] as $histo){ $ca_serv =$histo['ca_serv']; $ca_prod = $histo['ca_prod']; }
je m'acharnais a vouloir faire

Code : Tout sélectionner

foreach($json_data as $histo){ $ca_serv =$histo['histo'] ['ca_serv']; $ca_prod = $histo['histo'] ['ca_prod']; }

Re: lire json pour l'écrire dans base mysql

par Naroth » 02 juin 2016, 09:58

Bonjour exyacc,

Voici le code que j'ai utilisé pour debugger ton programme

Code : Tout sélectionner

<?php // $json_source='[{"ca_serv": 100,"ca_prod": 111},{"ca_serv": 200,"ca_prod": 222},{"ca_serv": 300,"ca_prod": 333}]'; $json_source='{"codeclient": "sc_greg1","histo":[{"ca_serv": 100,"ca_prod": 111},{"ca_serv": 200,"ca_prod": 222},{"ca_serv": 300,"ca_prod": 333}]}'; // $sql = 'insert into ca_jour (code_client, ca_serv, ca_prod) values(?, ?, ?)'; // $connexion = mysqli_connect('xxx.mysql.db', 'ma_base', 'mon_pass', 'mon_login') or die ('KO Echec de connexion'); // // Création de l'objet commande // $prepa = mysqli_stmt_init($connexion) or die ('KO Erreur SQL ( 2 )'); // // Préparation de la requête : envoi à la base // mysqli_stmt_prepare($prepa, $sql) or die ('KO Erreur SQL ( 3 )'); $json_data = json_decode($json_source, true); var_dump($json_data); foreach($json_data['histo'] as $histo){ // $code_client = 'ccc'; $ca_serv =$histo['ca_serv']; $ca_prod = $histo['ca_prod']; echo "$ca_serv $ca_prod"; // mysqli_stmt_bind_param($prepa, 'sdd', $code_client, $ca_serv, $ca_prod) or die ('KO Erreur SQL ( 4 )'); // mysqli_stmt_execute($prepa) or die('KO Erreur SQL ( 5 )'); } // mysqli_stmt_close($prepa); echo 'OK'; ?>
Dans la pratique j'ai juste enlevé tout ce qui fait intervenir la base de données.

Si tu exécute ce code tu verras que $json_data est de la forme suivante

Code : Tout sélectionner

array (size=2) 'codeclient' => string 'sc_greg1' (length=8) 'histo' => array (size=3) 0 => array (size=2) 'ca_serv' => int 100 'ca_prod' => int 111 1 => array (size=2) 'ca_serv' => int 200 'ca_prod' => int 222 2 => array (size=2) 'ca_serv' => int 300 'ca_prod' => int 333
A l'heure actuelle ton foreach ne parcours que "le niveau 1" de ton array

Re: lire json pour l'écrire dans base mysql

par exyacc » 01 juin 2016, 16:17

j'ai le message d'erreur :
string(11) "json_source"
<br />
<b>Warning</b>: Illegal string offset 'histo' in <b>/home/exyacc/cloud/exyacc/insert_ca_json.php</b> on line <b>33</b><br />
<br />
<b>Warning</b>: Illegal string offset 'ca_serv' in <b>/home/exyacc/cloud/exyacc/insert_ca_json.php</b> on line <b>33</b><br />
KO Erreur SQL ( 5 )


la ligne 33 correspond à
$ca_serv =$histo['histo']['ca_serv'];

Re: lire json pour l'écrire dans base mysql

par Ryle » 01 juin 2016, 15:55

Bonjour,

fait un print_r ou un var_dump de ta variable $histo. Tu verras ainsi le tableau constitué par php et ça te permettra de voir quels indexes tu dois appeler pour accéder à tes valeurs :)

A vue de nez $histo['histo']['ca_serv'] devrait fonctionner, y a peut être une erreur ailleurs

lire json pour l'écrire dans base mysql

par exyacc » 01 juin 2016, 15:35

bonjour,

j'essai de lire un json et d'ecrire les donnees dans une base mysql.

avec le Json suivant:
$json_source='[{"ca_serv": 100,"ca_prod": 111},{"ca_serv": 200,"ca_prod": 222},{"ca_serv": 300,"ca_prod": 333}]';
ça marche en faisant:

Code : Tout sélectionner

<?php $json_source='[{"ca_serv": 100,"ca_prod": 111},{"ca_serv": 200,"ca_prod": 222},{"ca_serv": 300,"ca_prod": 333}]'; $sql = 'insert into ca_jour (code_client, ca_serv, ca_prod) values(?, ?, ?)'; $connexion = mysqli_connect('xxx.mysql.db', 'ma_base', 'mon_pass', 'mon_login') or die ('KO Echec de connexion'); // Création de l'objet commande $prepa = mysqli_stmt_init($connexion) or die ('KO Erreur SQL ( 2 )'); // Préparation de la requête : envoi à la base mysqli_stmt_prepare($prepa, $sql) or die ('KO Erreur SQL ( 3 )'); $json_data = json_decode($json_source, true); foreach($json_data as $histo){ $code_client = 'ccc'; $ca_serv =$histo['ca_serv']; $ca_prod = $histo['ca_prod']; mysqli_stmt_bind_param($prepa, 'sdd', $code_client, $ca_serv, $ca_prod) or die ('KO Erreur SQL ( 4 )'); mysqli_stmt_execute($prepa) or die('KO Erreur SQL ( 5 )'); } mysqli_stmt_close($prepa); echo 'OK'; ?>
mais je voudrais changer ma structure du Json comme suit:
$json_source='{"codeclient": "sc_greg1","histo":[{"ca_serv": 100,"ca_prod": 111},{"ca_serv": 200,"ca_prod": 222},{"ca_serv": 300,"ca_prod": 333}]}';
mais du coup je sais pas comment accéder à mes données
j'ai essayé de mettre

Code : Tout sélectionner

$ca_serv =$histo['histo']['ca_serv'];
mais ça marche pas, comme je peux accéder a code_client et aux divers ca_serv ?

merci

exyacc