Requête Ajax et double objet JSON

Résolu
emrh Messages postés 427 Date d'inscription   Statut Membre Dernière intervention   -  
emrh Messages postés 427 Date d'inscription   Statut Membre Dernière intervention   -

Bonjour à tous,

Vous m'avez aidé ici à construire ma requête Ajax qui fonctionne parfaitement et me retourne comme il faut mon objet Json ($client).
J'ai besoin maintenant que la page de traitement, dans le même temps, en profite pour récupérer les contrats du client en question. J'ai donc mis, à la suite du code, un copier/collé d'une requête qui fonctionne sans erreur dans PhpMyadmin mais qui dans mon application m'ouvre ma boite d'alerte "Erreur Ajax" !
Dans la console il y a ça :

responseText:"{\"id\":\"74\",\"type\":\"0\",\"nom\":\"ARNAUD Alain\",\"civilite\":\"M.\",\"contact\":\"\",\"adresse\":\"145 rue des Platanes\",\"cp\":\"75001\",\"ville\":\"PARIS\",\"pays\":\"France\",\"telephone\":\"01 02 03 04 05\",\"email\":\"test@test.fr\",\"pedestria\":\"0\",\"notes\":\"Ici quelques infos pratiques...\"}<br />\n<b>Notice</b>:  Undefined variable: contrats in <b>/var/www/html/gestion2/client-data.php</b> on line <b>100</b><br />\nnull"
 

Si dans ma requête je supprime GROUP BY contrats.id_contrat et ORDER BY contrats.id_contrat DESC, j'ai toujours une erreur mais cette fois ci avec ce message dans la console : 

responseText: "{\"id\":\"74\",\"type\":\"0\",\"nom\":\"ARNAUD Alain\",\"civilite\":\"M.\",\"contact\":\"\",\"adresse\":\"145 rue des Platanes\",\"cp\":\"75001\",\"ville\":\"PARIS\",\"pays\":\"France\",\"telephone\":\"01 02 03 04 05\",\"email\":\"test@test.fr\",\"pedestria\":\"0\",\"notes\":\"Ici quelques infos pratiques...\"}[{\"id_contrat\":null,\"facture\":null,\"date_contrat\":null,\"batiment\":null,\"date_debut\":null,\"date_fin\":null,\"total_contrat\":null,\"etat\":null}]"
 

Quelqu'un peut-il me dire où ça cloche ?
Merci d'avance !

// Chargement de la fiche client qui vient d'être activé :
$.ajax({
    type: 'POST',
    url: 'client-data.php',
    data: {
        id_client: arg
    },
    dataType: "json",
    success: function(response) {
        /*console.log('success ajax',response);*/

        document.getElementById("nomclient").innerHTML = response.nom;
        document.getElementById("villeclient").innerHTML = response.ville;

        document.getElementById("adresseclient").innerHTML = response.adresse;
        document.getElementById("cpclient").innerHTML = response.cp;
        document.getElementById("villeclient2").innerHTML = response.ville;
        document.getElementById("paysclient").innerHTML = response.pays;
        document.getElementById("contactclient").innerHTML = response.contact;

    },
    error: function(response) {
        console.log('erreur ajax', response);
        alert("Erreur Ajax");
    }
});

client-data.php

<?php
require ("connexion.php");
if(!empty($_POST["id_client"])){

    // 1. Requête recherche fiche client : 
    $requete_client = $bdd->prepare('
        SELECT clients.*, pays.nom_fr_fr AS pays
        FROM clients
        INNER JOIN pays
        ON clients.pays = pays.id_pays
        WHERE id_client = :id_client');
    $requete_client->execute(array('id_client' => $_POST['id_client']
    ));

    // 2. Requête contrats clients :
    $requete_contrats = $bdd->prepare('
        SELECT contrats.*, batiments.designation AS batiment, SUM(T.total) AS TOTAL_CONTRAT
        FROM (SELECT id_contrat,prix*quantites AS total FROM compositions) AS T
        INNER JOIN contrats
        ON contrats.id_contrat = T.id_contrat
        INNER JOIN batiments
        ON batiments.id_batiment = contrats.id_batiment
        WHERE contrats.id_client = :id_client
        GROUP BY contrats.id_contrat
        ORDER BY contrats.id_contrat DESC
    ');
    $requete_contrats->execute(array(':id_client' => $_POST['id_client'])); 


    // Récupération fiche client :
    while($donnees_client = $requete_client->fetch()) {
        $idclient =$donnees_client['id_client'];
        $type = $donnees_client['type'];
        if($donnees_client['prenom']<>''){
            $nom = $donnees_client['nom'] . ' ' . $donnees_client['prenom'];
        }
        else {
            $nom= $donnees_client['nom'];
        }
        $civilite = $donnees_client['civilite'];
        $contact = $donnees_client['contact'];
        $adresse = $donnees_client['adresse'];
        $cp = $donnees_client['cp'];
        $ville = $donnees_client['ville'];
        $pays = $donnees_client['pays'];        
        $telephone = sprintf("%s %s %s %s %s",
            substr($donnees_client['telephone'], 0, 2),
            substr($donnees_client['telephone'], 2, 2),
            substr($donnees_client['telephone'], 4, 2),
            substr($donnees_client['telephone'], 6, 2),
            substr($donnees_client['telephone'], 8, 2)
        );
        $email = $donnees_client['email'];
        $pedestria = $donnees_client['pedestria'];
        $notes = $donnees_client['notes'];
        

        $client = array(
            'id' => $idclient,
            'type' => $type,
            'nom' => $nom,
            'civilite' => $civilite,
            'contact' => $contact,            
            'adresse' => $adresse,
            'cp' => $cp,
            'ville' => $ville,
            'pays' => $pays,
            'telephone' => $telephone,
            'email' => $email,
            'pedestria' => $pedestria,
            'notes' => $notes            
        );
    }

    // Récupération des contrats du client : 
    while ($data_contrat = $requete_contrats->fetch()) {
        $id_contrat = $data_contrat['id_contrat'];
        $facture = $data_contrat['facture'];
        $date_contrat = $data_contrat['date_contrat'];
        $batiment = $data_contrat['batiment'];
        $date_debut = $data_contrat['date_debut'];
        $date_fin = $data_contrat['date_fin'];
        $total_contrat = $data_contrat['TOTAL_CONTRAT'];
        $etat = $data_contrat['etat'];

        $contrats[] = array(
            'id_contrat' => $id_contrat,
            'facture' => $facture,
            'date_contrat' => $date_contrat,
            'batiment' => $batiment,
            'date_debut' => $date_debut,
            'date_fin' => $date_fin,
            'total_contrat' => $total_contrat,
            'etat' => $etat
        );
    }

// Conversions en JSON 
    echo json_encode($client);
    echo json_encode($contrats);
}
?>

Edit : echo json_encode($contrats[]); donne cette erreur : responseText: "<br />\n<b>Fatal error</b>: Cannot use [] for reading in <b>/var/www/html/gestion2/client-data.php</b> on line <b>100</b><br />\n" 

A voir également:

8 réponses

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 

bonjour,

ton code PHP ne prévoit pas le cas où la requête ne retourne aucun contrat, d'où l'erreur en ligne 100.

0
emrh Messages postés 427 Date d'inscription   Statut Membre Dernière intervention   20
 

Merci yg_be.... Je teste ça tout de suite !
Si les champs dans la bdd contiennent des caractères comme des / ou des ' ; , .   ça pose problème ? 

0
emrh Messages postés 427 Date d'inscription   Statut Membre Dernière intervention   20
 

J'ai modifié la partie concernant les contrats de cette manière : 

$requete_contrats->execute(array(':id_client' => $_POST['id_client'])); 
    $nbr_contrats = $requete_contrats->rowCount();
    if($nbr_contrats>0){
        // Récupération des contrats du client : 
        while ($data_contrat = $requete_contrats->fetch()) {
            $id_contrat = $data_contrat['id_contrat'];
            $facture = $data_contrat['facture'];
            $date_contrat = $data_contrat['date_contrat'];
            $batiment = $data_contrat['batiment'];
            $date_debut = $data_contrat['date_debut'];
            $date_fin = $data_contrat['date_fin'];
            $total_contrat = $data_contrat['TOTAL_CONTRAT'];
            $etat = $data_contrat['etat'];

            $contrats[] = array(
                'id_contrat' => $id_contrat,
                'facture' => $facture,
                'date_contrat' => $date_contrat,
                'batiment' => $batiment,
                'date_debut' => $date_debut,
                'date_fin' => $date_fin,
                'total_contrat' => $total_contrat,
                'etat' => $etat
            );
        }
        // Conversions en JSON 
        echo json_encode($contrats);
    }

Maintenant, les clients qui n'ont pas de contrats n'ont plus d'erreur, mais les autres en ont toujours ! 
Le problème c'est que la console ne m'aide pas !
"[{"id_contrat":"597","facture":"548","date_contrat":"2022-06-21","batiment":"CHAMBRE","date_debut":"2022-07-28","date_fin":"2022-07-29","total_contrat":"75.0000","etat":"3"}]{"id":"52","type":"0","nom":"XXXX Marc-Antoine","civilite":"","contact":"","adresse":"81 B rue E R","cp":"75000","ville":"PARIS","pays":"\u00celes Cocos (Keeling)","telephone":"06 07 08 09 10","email":"XXXX@gmail.com","pedestria":"0","notes":"lit parapluie"}"

 

0
emrh Messages postés 427 Date d'inscription   Statut Membre Dernière intervention   20
 

L'array $contrat[] se construit mal je pense : 
[{"id_contrat":"547","facture":"521","date_contrat":"2022-05-14","batiment":"TABLE D'H\u00d4TES","date_debut":"2022-05-30","date_fin":"2022-06-03","total_contrat":"3336.0000","etat":"3"},{"id_contrat":"546","facture":"521","date_contrat":"2022-05-14","batiment":"JARDIN","date_debut":"2022-05-30","date_fin":"2022-06-03","total_contrat":"822.4000","etat":"3"},{"id_contrat":"545","facture":"521","date_contrat":"2022-05-14","batiment":"VILLAGE","date_debut":"2022-05-30","date_fin":"2022-06-03","total_contrat":"1847.6000","etat":"3"}]"

Il devrait être plutôt comme ça non ?
[0]{"id_contrat":"547","facture":"521","date_contrat":"2022-05-14","batiment":"TABLE D'H\u00d4TES","date_debut":"2022-05-30","date_fin":"2022-06-03","total_contrat":"3336.0000","etat":"3"},{"id_contrat":"546","facture":"521","date_contrat":"2022-05-14","batiment":"JARDIN","date_debut":"2022-05-30","date_fin":"2022-06-03","total_contrat":"822.4000","etat":"3"}
[1]{"id_contrat":"545","facture":"521","date_contrat":"2022-05-14","batiment":"VILLAGE","date_debut":"2022-05-30","date_fin":"2022-06-03","total_contrat":"1847.6000","etat":"3"}

0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 

As-tu testé ta page PHP sans passer par Ajax?

0
emrh Messages postés 427 Date d'inscription   Statut Membre Dernière intervention   20 > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 

NON...
Voici le résultat avec en début un $_POST['id_client']=18;

{"id":"18","type":"1","nom":"XXXXX Serge","civilite":"M.","contact":"","adresse":"3 impasse B","cp":"75000","ville":"PARIS","pays":"France","telephone":"06 07 08 09 10","email":"xxxxx@gmail.com","pedestria":"0","notes":null}[{"id_contrat":"532","facture":"523","date_contrat":"2022-04-23","batiment":"JARDIN","date_debut":"2022-05-20","date_fin":"2022-05-22","total_contrat":"509.8000","etat":"3"},{"id_contrat":"531","facture":"523","date_contrat":"2022-04-23","batiment":"VILLAGE","date_debut":"2022-05-20","date_fin":"2022-05-22","total_contrat":"1318.2000","etat":"3"}]

0
emrh Messages postés 427 Date d'inscription   Statut Membre Dernière intervention   20 > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 

J'ai essayé avec des GET, y compris dans le type Ajax, c'est idem !

0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > emrh Messages postés 427 Date d'inscription   Statut Membre Dernière intervention  
 

N'est-ce pas bizarre d'envoyer deux messages json?  Moi j'essaierais avec un seul.

0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 

Je me demande aussi si il n'est pas utile de mieux analyser les cas d'erreurs Ajax:

error: function(response, exception) {
        console.log('erreur ajax: ', response.status, ', exc: ', exception, ', rep: ',response);
        alert("Erreur Ajax");
    }
0
emrh Messages postés 427 Date d'inscription   Statut Membre Dernière intervention   20
 

 Erreur pour un client qui n'a pas de contrats, pour tous les autres ça fonctionne...
J'ai fait 2 requêtes Ajax sur 2 pages php différentes

0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > emrh Messages postés 427 Date d'inscription   Statut Membre Dernière intervention  
 

Quelle est la réponse du php pour un client qui n'a pas de contrat?  Cela est visible soit via la console, soit en appelant la page en direct.
Ajax indique "parseerror", comme si le json était mal formé.

0
emrh Messages postés 427 Date d'inscription   Statut Membre Dernière intervention   20 > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 

Page contrats seuls (contrats-data.php)
$_POST['id_client']=74;
La page reste blanche puisque le while est échappé par :
$nbr_contrats = $requete_contrats->rowCount();
    if($nbr_contrats>0){

Page d'origine avec appel du client et de ses contrats : 
{"id":"74","type":"0","nom":"ARNAUD Alain","civilite":"M.","contact":"","adresse":"145 rue des Platanes","cp":"75001","ville":"PARIS","pays":"France","telephone":"01 02 03 04 05","email":"test@test.fr","pedestria":"0","notes":"Ici quelques infos pratiques..."}

0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 

La réponse est aussi visible ainsi:

console.log('erreur ajax: ', resp.status, ', exc: ', exception, ', rep: ',resp.responseText);
0
emrh Messages postés 427 Date d'inscription   Statut Membre Dernière intervention   20 > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 

Un client sans contrat n'a plus d'erreur puisque au post <1> tu me faisais remarquer que j'avais une requête qui pouvait retourner aucun contrat, du coup je l'ai neutralisée avec : 
$nbr_contrats = $requete_contrats->rowCount();
    if($nbr_contrats>0){

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
emrh Messages postés 427 Date d'inscription   Statut Membre Dernière intervention   20
 

Comme ça devient fouillis dans ma tête, voici où j'en suis : 

 

// Chargement de la fiche client qui vient d'être activé :
            $.ajax({
                type:'POST',
                url:'client-data.php',
                data:{id_client:arg},
                dataType:"json",             
                success:function(response){
                    console.log('success ajax',response);

                    document.getElementById("nomclient").innerHTML = response.nom;
                    document.getElementById("villeclient").innerHTML = response.ville;

                    document.getElementById("adresseclient").innerHTML = response.adresse;
                    document.getElementById("cpclient").innerHTML = response.cp;
                    document.getElementById("villeclient2").innerHTML = response.ville;
                    document.getElementById("paysclient").innerHTML = response.pays;
                    document.getElementById("contactclient").innerHTML = response.contact;
                    
                },
                error:function(response){
                    /*console.log('erreur ajax',response);*/
                    console.log('erreur ajax: ', response.status, ', exc: ', exception, ', rep: ',response.responseText);
                    alert("Erreur Ajax");                  
                }
            });


            /*$.ajax({
                type:'POST',
                url:'contrats-data.php',
                data:{id_client:arg},
                dataType:"json",             
                success:function(response){
                    console.log('success ajax',response);
                },
                /*error:function(response){
                  console.log('erreur ajax',response);
                  alert("Erreur Ajax");                  
                }*/
                /*error: function(response, exception) {
                console.log('erreur ajax: ', response.status, ', exc: ', exception, ', rep: ',response);
                alert("Erreur Ajax");
                }
            });*/
        }

client-data.php

<?php
require ("connexion.php");
if(!empty($_POST["id_client"])){

    // 1. Requête recherche fiche client : 
    $requete_client = $bdd->prepare('
        SELECT clients.*, pays.nom_fr_fr AS pays
        FROM clients
        INNER JOIN pays
        ON clients.pays = pays.id_pays
        WHERE id_client = :id_client');
    $requete_client->execute(array('id_client' => $_POST['id_client']
    ));

    // Récupération fiche client :
    while($donnees_client = $requete_client->fetch()) {
        $idclient =$donnees_client['id_client'];
        $type = $donnees_client['type'];
        if($donnees_client['prenom']<>''){
            $nom = $donnees_client['nom'] . ' ' . $donnees_client['prenom'];
        }
        else {
            $nom= $donnees_client['nom'];
        }
        $civilite = $donnees_client['civilite'];
        $contact = $donnees_client['contact'];
        $adresse = $donnees_client['adresse'];
        $cp = $donnees_client['cp'];
        $ville = $donnees_client['ville'];
        $pays = $donnees_client['pays'];        
        $telephone = sprintf("%s %s %s %s %s",
            substr($donnees_client['telephone'], 0, 2),
            substr($donnees_client['telephone'], 2, 2),
            substr($donnees_client['telephone'], 4, 2),
            substr($donnees_client['telephone'], 6, 2),
            substr($donnees_client['telephone'], 8, 2)
        );
        $email = $donnees_client['email'];
        $pedestria = $donnees_client['pedestria'];
        $notes = $donnees_client['notes'];
        

        $client = array(
            'id' => $idclient,
            'type' => $type,
            'nom' => $nom,
            'civilite' => $civilite,
            'contact' => $contact,            
            'adresse' => $adresse,
            'cp' => $cp,
            'ville' => $ville,
            'pays' => $pays,
            'telephone' => $telephone,
            'email' => $email,
            'pedestria' => $pedestria,
            'notes' => $notes            
        );
    } 

    // 2. Requête contrats clients :
    $requete_contrats = $bdd->prepare('
        SELECT contrats.*, batiments.designation AS batiment, SUM(T.total) AS TOTAL_CONTRAT
        FROM (SELECT id_contrat,prix*quantites AS total FROM compositions) AS T
        INNER JOIN contrats
        ON contrats.id_contrat = T.id_contrat
        INNER JOIN batiments
        ON batiments.id_batiment = contrats.id_batiment
        WHERE contrats.id_client = :id_client
        GROUP BY contrats.id_contrat
        ORDER BY contrats.id_contrat DESC
    ');   

    $requete_contrats->execute(array(':id_client' => $_POST['id_client'])); 
    $nbr_contrats = $requete_contrats->rowCount();
    if($nbr_contrats>0){
        // Récupération des contrats du client : 
        while ($data_contrat = $requete_contrats->fetch()) {
            $id_contrat = $data_contrat['id_contrat'];
            $facture = $data_contrat['facture'];
            $date_contrat = $data_contrat['date_contrat'];
            $batiment = $data_contrat['batiment'];
            $date_debut = $data_contrat['date_debut'];
            $date_fin = $data_contrat['date_fin'];
            $total_contrat = $data_contrat['TOTAL_CONTRAT'];
            $etat = $data_contrat['etat'];

            $contrats[] = array(
                'id_contrat' => $id_contrat,
                'facture' => $facture,
                'date_contrat' => $date_contrat,
                'batiment' => $batiment,
                'date_debut' => $date_debut,
                'date_fin' => $date_fin,
                'total_contrat' => $total_contrat,
                'etat' => $etat
            );
        }
        // Conversions en JSON
        echo json_encode($client); 
        echo json_encode($contrats);
        /*json_encode(array($client, $contrats));*/
    }
    else{
        // Conversions en JSON 
        echo json_encode($client); 
    }
}
0
emrh Messages postés 427 Date d'inscription   Statut Membre Dernière intervention   20
 

clients.php:1231 Uncaught ReferenceError: exception is not defined
    at Object.error (clients.php:1231:78)
    at c (jquery.min.js:2:28327)
    at Object.fireWith [as rejectWith] (jquery.min.js:2:29072)
    at l (jquery.min.js:2:79926)
    at XMLHttpRequest.<anonymous> (jquery.min.js:2:82355)
error @ clients.php:1231
c @ jquery.min.js:2
fireWith @ jquery.min.js:2
l @ jquery.min.js:2
(anonyme) @ jquery.min.js:2
load (asynchrone)
send @ jquery.min.js:2
ajax @ jquery.min.js:2
listGroupActive @ clients.php:1211
onclick @ clients.php:83
jquery.min.js:2 XHR a fini de se charger : POST "http://127.0.0.1/gestion2/client-data.php".

0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 

Les lignes 20 et 22 de ton fichier html devraient être:

   error: function(resp, exception) {
        console.log('erreur ajax: ', resp.status, ', exc: ', exception, ', rep: ',resp.responseText);
0
emrh Messages postés 427 Date d'inscription   Statut Membre Dernière intervention   20
 

Si je décommente le premier code pour le traitement de l'erreur Ajax, j'ai l'impression que l'Array n'a pas les indices [0]  [1]  [2]...

0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 

Merci de partager des faits, pas uniquement des impressions.

0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 

Moi j'ai l'impression que tu es en train de tester de multiples modifications, sans prendre le temps de réfléchir.

0
emrh Messages postés 427 Date d'inscription   Statut Membre Dernière intervention   20 > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 

Au contraire, j'ai l'impression que de 8h00 à 15h00 j'ai pas mal réfléchi !  :-(
Je ne connais pas les méthodes de débogage donc je regarde des vidéos, lis des tutos et doc et tente de mettre en pratique, ensuite je post les résultats de mes essais ; Je suis désolé si cela parasite la réflexion...Mais comment interagir avec ce forum si ce n'est en postant ce que j'essai de faire ?


Par exemple, je ne sais pas si ça fait avancer la réflexion mais ce matin, j'ai remplacé dataType:"json" par dataType:"text" et j'obtiens un success en console avec le retour client + le retour contrats (ou  retour client seulement si pas de contrat)... testé sur plusieurs clients
Evidemment les innerHTML = response.nom; ne fonctionne plus ! (undefined)...

0
emrh Messages postés 427 Date d'inscription   Statut Membre Dernière intervention   20
 
// Chargement de la fiche client qui vient d'être activé :
// ------------------------ C L I E N T ----------------------
$.ajax({
	type: 'POST',
	url: 'client-data.php',
	data: {
		id_client: arg
	},
	dataType: "json",
	success: function(response) {
		console.log('success ajax', response);

		document.getElementById("nomclient").innerHTML = response.nom;
		document.getElementById("villeclient").innerHTML = response.ville;

		document.getElementById("adresseclient").innerHTML = response.adresse;
		document.getElementById("cpclient").innerHTML = response.cp;
		document.getElementById("villeclient2").innerHTML = response.ville;
		document.getElementById("paysclient").innerHTML = response.pays;
	},
	error: function(response) {
		console.log('erreur ajax', response);
	}
});

// ------------------------ C O N T R A T S ----------------------
$.ajax({
	type: 'POST',
	url: 'contrats-data.php',
	data: {
		id_client: arg
	},
	dataType: "json",
	success: function(response2) {
		console.log('success ajax', response2);
		document.getElementById("contratnum").innerHTML = response2[0].id_contrat;

	},
	error: function(response2) {
		console.log('erreur ajax', response2);
	}
});

client-data.php

<?php
require ("connexion.php");
if(!empty($_POST["id_client"])){
    // 1. Requête recherche fiche client : 
    $requete_client = $bdd->prepare('
        SELECT clients.*, pays.nom_fr_fr AS pays
        FROM clients
        INNER JOIN pays
        ON clients.pays = pays.id_pays
        WHERE id_client = :id_client');
    $requete_client->execute(array('id_client' => $_POST['id_client']
    ));

    // Récupération fiche client :
    while($donnees_client = $requete_client->fetch()) {
        $idclient =$donnees_client['id_client'];
        $type = $donnees_client['type'];
        if($donnees_client['prenom']<>''){
            $nom = $donnees_client['nom'] . ' ' . $donnees_client['prenom'];
        }
        else {
            $nom= $donnees_client['nom'];
        }
        $civilite = $donnees_client['civilite'];
        $contact = $donnees_client['contact'];
        $adresse = $donnees_client['adresse'];
        $cp = $donnees_client['cp'];
        $ville = $donnees_client['ville'];
        $pays = $donnees_client['pays'];        
        $telephone = sprintf("%s %s %s %s %s",
            substr($donnees_client['telephone'], 0, 2),
            substr($donnees_client['telephone'], 2, 2),
            substr($donnees_client['telephone'], 4, 2),
            substr($donnees_client['telephone'], 6, 2),
            substr($donnees_client['telephone'], 8, 2)
        );
        $email = $donnees_client['email'];
        $pedestria = $donnees_client['pedestria'];
        $notes = $donnees_client['notes'];
        

        $client = array(
            'id' => $idclient,
            'type' => $type,
            'nom' => $nom,
            'civilite' => $civilite,
            'contact' => $contact,            
            'adresse' => $adresse,
            'cp' => $cp,
            'ville' => $ville,
            'pays' => $pays,
            'telephone' => $telephone,
            'email' => $email,
            'pedestria' => $pedestria,
            'notes' => $notes            
        );
    }
    // Conversions en JSON 
    echo json_encode($client);
}
?>

contrats-data.php

<?php
require ("connexion.php");
if(!empty($_POST["id_client"])){
    // 2. Requête contrats clients :
    $requete_contrats = $bdd->prepare('
        SELECT contrats.*, batiments.designation AS batiment, SUM(T.total) AS TOTAL_CONTRAT
        FROM (SELECT id_contrat,prix*quantites AS total FROM compositions) AS T
        INNER JOIN contrats
        ON contrats.id_contrat = T.id_contrat
        INNER JOIN batiments
        ON batiments.id_batiment = contrats.id_batiment
        WHERE contrats.id_client = :id_client
        GROUP BY contrats.id_contrat
        ORDER BY contrats.id_contrat DESC
    ');
    $requete_contrats->execute(array(':id_client' => $_POST['id_client']));    
    $nbr_contrats = $requete_contrats->rowCount();
    if($nbr_contrats>0){
        // Récupération des contrats du client : 
        while ($data_contrat = $requete_contrats->fetch()) {
            $id_contrat = $data_contrat['id_contrat'];
            $facture = $data_contrat['facture'];
            $date_contrat = $data_contrat['date_contrat'];
            $batiment = $data_contrat['batiment'];
            $date_debut = $data_contrat['date_debut'];
            $date_fin = $data_contrat['date_fin'];
            $total_contrat = $data_contrat['TOTAL_CONTRAT'];
            $etat = $data_contrat['etat'];

            $contrats[] = array(
                'id_contrat' => $id_contrat,
                'facture' => $facture,
                'date_contrat' => $date_contrat,
                'batiment' => $batiment,
                'date_debut' => $date_debut,
                'date_fin' => $date_fin,
                'total_contrat' => $total_contrat,
                'etat' => $etat
            );
        }

        // Conversions en JSON 
        echo json_encode($contrats);
    }
}
?>
0
emrh Messages postés 427 Date d'inscription   Statut Membre Dernière intervention   20
 

Ça fonctionne pour des clients avec contrats...
Par contre, il faut maintenant que j'arrive à traiter le retour des réponses sans contrats ! 

0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > emrh Messages postés 427 Date d'inscription   Statut Membre Dernière intervention  
 

En effet.  Que devrait-il se passer dans ce cas?

0
emrh Messages postés 427 Date d'inscription   Statut Membre Dernière intervention   20
 

Sur la page contrats-data.php je vais faire un else, du coup mon if aura son else : 
else{
        $contrats="Ce client n'a pas de contrat";
        // Conversions en JSON 
        echo json_encode($contrats);
}

Il faut maintenant gérer ça dans le success:function(response2){

0
emrh Messages postés 427 Date d'inscription   Statut Membre Dernière intervention   20
 

La requête Ajax est contente, elle a sa réponse, je ne génère donc plus d'erreur !

Je peux même construire l'Array à la main : 
else{
        $contrats[] = array(
                'id_contrat' => '',
                'facture' => '',
                'date_contrat' => '',
                'batiment' => '',
                'date_debut' => '',
                'date_fin' => '',
                'total_contrat' => '',
                'etat' => ''
            );
        // Conversions en JSON 
        echo json_encode($contrats);
    }

1