PHP JSON MySQL

Eléphanteau du PHP | 40 Messages

16 oct. 2020, 13:29

Bonjour,
Quelqu'un pourrait m'expliquer mon erreur svp.

Ce que j'essaye de faire c'est en utilisant un json aller chercher le nom et le prénom de l'utilisateur dans la base de donné pour chaque utilisateur de la liste de json.
J'arrive à obtenir seulement pour le premier utilisateur de la liste

Voici mon code php:

Code : Tout sélectionner

<?php include "config.php"; $json = json_decode(' {"users":[ {"date": "29","id":"admin"}, {"date": "30","id":"user2"}, {"date": "30","id":"user3"} ]} '); foreach ($json->users as $record) { $sql = "SELECT CONCAT(users.prenom, ' ', users.nom) as name FROM users WHERE identifiant = '$record->id'"; $result = $conn->query($sql); if ($result->num_rows > 0) { $posts = array(); $posts[] = array('status' => 'ok'); while ($row = $result->fetch_assoc()) { $posts[] = array( 'user' => array( 'name' => $row['name'] ) ); } header('Content-Type: application/json'); echo json_encode($posts, JSON_PRETTY_PRINT); } else { echo "pas d'utilisateur associé"; } $conn->close(); }

et ce que j'obtiens:

Code : Tout sélectionner

[ { "status": "ok" }, { "user": { "name": "Victor Hugo" } } ]pas d'utilisateur associépas d'utilisateur associé
Merci d'avance!

Mammouth du PHP | 2703 Messages

16 oct. 2020, 13:40

il faut identé le code comme il faut, ce qui permet de bien comprendre à quel moment
header('Content-Type: application/json');
echo json_encode($posts, JSON_PRETTY_PRINT);
est exécuté.
à quel moment
$conn->close();
est exécuté
foreach ($json->users as $record) {
  $sql = "SELECT CONCAT(users.prenom, ' ', users.nom) as name FROM users WHERE identifiant = '$record->id'";
  $result = $conn->query($sql);
  if ($result->num_rows > 0) {
    $posts = array();
    $posts[] = array('status' => 'ok');
    while ($row = $result->fetch_assoc()) {
      $posts[] = array('user' => array('name' => $row['name']));
    }
    header('Content-Type: application/json');
    echo json_encode($posts, JSON_PRETTY_PRINT);
  } else {
    echo "pas d'utilisateur associé";
  }
  $conn->close();
}

Eléphanteau du PHP | 40 Messages

16 oct. 2020, 13:47

il faut identé le code comme il faut, ce qui permet de bien comprendre à quel moment
header('Content-Type: application/json');
echo json_encode($posts, JSON_PRETTY_PRINT);
est exécuté.
à quel moment
$conn->close();
est exécuté
foreach ($json->users as $record) {
  $sql = "SELECT CONCAT(users.prenom, ' ', users.nom) as name FROM users WHERE identifiant = '$record->id'";
  $result = $conn->query($sql);
  if ($result->num_rows > 0) {
    $posts = array();
    $posts[] = array('status' => 'ok');
    while ($row = $result->fetch_assoc()) {
      $posts[] = array('user' => array('name' => $row['name']));
    }
    header('Content-Type: application/json');
    echo json_encode($posts, JSON_PRETTY_PRINT);
  } else {
    echo "pas d'utilisateur associé";
  }
  $conn->close();
}
Merci pour ton aide, je me permets de te corriger:
$conn->close(); il faut mettre à la toute fin après le dernier }

Mais j'obtiens plusieurs json dans ce cas
Merci beaucoup!

Mammouth du PHP | 2703 Messages

16 oct. 2020, 14:09

je n'ai rien modifié à ton code, si ce n'est rajouter des tabulations, ce qui ne change rien au résultat.