IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

API Post donnée vide


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    829
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 829
    Par défaut API Post donnée vide
    Bonjour à tous,

    J'ai créé une page pour interroger ma base BDD en API.


    je suis sur l'envoi de la donnée en POST pour faire un insert dans BDD
    Mais il m'indique que ma variable $data[xxx] sont vide

    Code : 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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    <?php session_start();
    include("php/fonction.bdd.php");
    $mysqli=	connexion_mysql();
    $request_method = $_SERVER["REQUEST_METHOD"];
     
      function getProducts($id=0)
      {
        global $mysqli;
        $query = "SELECT * FROM commande_vn ";
    	    if($id != 0)
        {
          $query .= " WHERE id_cde=".$id." LIMIT 1";
        }
        $response = array();
        $result = mysqli_query($mysqli, $query);
        while($row = mysqli_fetch_array($result))
        {
          $response[] = $row;
        }
        header('Content-Type: application/json');
        echo json_encode($response, JSON_PRETTY_PRINT);
      }
     
        function AddProduct()
      {
    	  $jsonData = file_get_contents("php://input");
    	  $data = json_decode($jsonData, true);
    	//  echo $data["nom"];
    	//  echo $data->nom;
        global $mysqli;
     
         $SOCIETEori = $data["SOCIETEori"];
    	$DateCommande = $data["DateCommande"];
    	 $PointdeVente = $data["PointdeVente"];
     
        echo $query;
    	if(mysqli_query($mysqli, $query))
        {
          $response=array(
            'status' => 1,
            'status_message' =>'Produit ajoute avec succes.'
          );
        }
        else
        {
          $response=array(
            'status' => 0,
            'status_message' =>'ERREUR!.'. mysqli_error($conn)
          );
        }
        header('Content-Type: application/json');
        echo json_encode($response);
      }
     
      switch($request_method)
      {
        case 'GET':
          if(!empty($_GET["id"]))
          {
            // Récupérer un seul produit
            $id = intval($_GET["id"]);
            getProducts($id);
          }
          else
          {
            // Récupérer tous les produits
            getProducts();
          }
     
          break;
        default:
          // Requête invalide
          header("HTTP/1.0 405 Method Not Allowed");
          break;
     
    	      case 'POST':
          // Ajouter un produit
          AddProduct();
          break;
      }
     
    ?>
    J'ai testé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump(file_get_contents('php://input'));
    et cela me ressort bien des données
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    string(836) "BODY:
    {
    "SOCIETEori" : 1,
    "DateCommande" : 06/12/2024,
    "PointdeVente" : 1,
    "Vendeur" : "142",
    "Nomclient" : "testnom testprenom",
    "CdeUsine" : null,
    "PrixVente" : null,
    "Marge" : null,
    .....
    "id_marque_intranet" : "1"
    }
    "
    Par contre avec j'ai rien

    Quelle erreur est je commis ? il ne voit pas de json ?

    je suis preneur de votre aide et conseil

    guigui69

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2022
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2022
    Messages : 423
    Par défaut
    Bonjour,

    - Essaye de voir pour faire des requêtes préparé / paramétrer . C'est un bon réflexe ...

    - Tu parles d'un insert alors que tu fais un select ... Erreur de saisie je pense

    - Petite remarque sur l'indentation aussi ...

    - Tu te compliques peut être un peu la vie pour les récupérés tes valeurs , pour rappel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //  echo $data["nom"];
    //  echo $data->nom;
    Le principe pour récupéré une donnée c'est comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     $resultsd1 = mysqli_query($conn, $sql);
     
     while ($row = mysqli_fetch_assoc($resultsd1))
     {
        echo $row['email'];
     }
    }
    - Evite les select * ... Nomme les champs que tu récupères , tu gagneras en performance mais surtout c'est bien mieux en terme de sécurité.

    - Le format de ton json est mauvais

    Un format viable serait comme celui ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    {
        "SOCIETEori": 1,
        "DateCommande": "06/12/2024",
        "PointdeVente": 1,
        "Vendeur": "142",
        "Nomclient": "testnom testprenom",
        "CdeUsine": null,
        "PrixVente": null,
        "Marge": null,
        "id_marque_intranet": "1"
    }

    EDIT :
    Petit rajout :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     $jsonData = file_get_contents("php://input");
    	  $data = json_decode($jsonData, true);
    	//  echo $data["nom"];
    	//  echo $data->nom;
    Commence pas à confondre tes variables
    $data <=> php://input
    $response <=> résultat du select

    Ton $data à moins que tu ai transmis le mauvais json , tu cherches à récupéré le nom stocké en base de donnée ?
    Donc utilise ton tableau response ...
    Cdt

  3. #3
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 539
    Par défaut
    Bonjour,

    Je vois que la structure JSON des données reçues n'est pas valide, si vous voulez identifier l'erreur, collez ces lignes juste après l'utilisation de json_decode()
    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
    17
    18
    19
    20
    21
    22
    23
    24
    switch (json_last_error()) {
        	case JSON_ERROR_NONE:
                echo ' - Aucune erreur';
            break;
            case JSON_ERROR_DEPTH:
                echo ' - Profondeur de pile maximale dépassée';
            break;
            case JSON_ERROR_STATE_MISMATCH:
                echo ' - Inadéquation des modes';
            break;
            case JSON_ERROR_CTRL_CHAR:
                echo ' - Caractère de contrôle inattendu trouvé';
            break;
            case JSON_ERROR_SYNTAX:
                echo ' - Erreur de Syntax, JSON INVALIDE';
            break;
            case JSON_ERROR_UTF8:
                echo ' - UTF-8 Malformé caractères, possibles mal encodedées';
            break;
            default:
                echo ' - Erreur inconnue.';
            break;
        }
    echo PHP_EOL;

    Si le switch vous indique que l'erreur est relative à JSON_ERROR_SYNTAX, ceci dit que la structure de la chaîne de caractère que vous essayez de décoder n'est pas bonne.

    En l'examinant, vous recevez
    Code json : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    'BODY:{
     "SOCIETEori" : 1,"DateCommande" : 06/12/2024,
     "PointdeVente" : 1,"Vendeur" : "142","Nomclient" : "testnom testprenom",
     "CdeUsine" : null,"PrixVente" : null,"Marge": null,"id_marque_intranet" : "1"
    }'

    • L'accolade d'ouverture "{" avant BODY est manquante.
    • La propriété BODY et la valeur de DateCommande ne sont pas entourées des guilleumets.
    • L'accolade de fermeture à la fin "}" est donc manquante aussi, puisque la première l'est.


    Pour résoudre le problème, il y a deux possibilités, soit :
    • Comprendre pourquoi file_get_contents() vous renvoie un JSON string mal formé et la corriger.
    • Supprimer BODY: de la chaîne et rajouter les guilleumets à la valeur de la DateCommande avec replace ou une expression régulière.


    Vous pouvez vous inspirer de cette expression régulière et l'optimiser encore plus $jsonData="{".preg_replace("/(body|\d{2}\/\d{2}\/\d{4})/i",'"\1"',$jsonData)."}"; résultat =>
    Code json : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    {
     "BODY":{
        "SOCIETEori" : 1,"DateCommande" : "06/12/2024",
        "PointdeVente" : 1,"Vendeur" : "142","Nomclient" : "testnom testprenom",
        "CdeUsine" : null,"PrixVente" : null,"Marge": null,"id_marque_intranet" : "1"
      }
    }

    Maintenant vous pouvez décoder la chaîne de caractère avec json_decode() sans soucis.

Discussions similaires

  1. Google API itineraire, étapes vides
    Par bob633 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 14/02/2012, 17h45
  2. Formulaire POST donne erreur 405
    Par Trunks dans le forum IIS
    Réponses: 1
    Dernier message: 26/10/2009, 18h17
  3. Réponses: 8
    Dernier message: 29/01/2007, 22h57
  4. API qui donne la différence des données entre 2 classes ?
    Par elitost dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 18/04/2006, 12h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo