Envoie donnée: recuperer ma donnée dans l'ajax depuis le PHP

Résolu/Fermé
Nesil Messages postés 37 Date d'inscription mardi 21 juin 2022 Statut Membre Dernière intervention 1 juillet 2024 - 29 mars 2023 à 16:17
Nesil Messages postés 37 Date d'inscription mardi 21 juin 2022 Statut Membre Dernière intervention 1 juillet 2024 - 31 mars 2023 à 10:57

Bonjour,

Voila mon application permet de créer des dossiers "cadeaux" que les administrateurs doivent ensuite valider.

On me demande d'ajouter une etape et j'ai besoin de filitrer la vue de mon application en fonction l'utilisateur. J'ai donc créer une colonne level dans ma table user. Sauf que mon appli est utilisée par toute ma boite. Ce qui ferais beaucoup de données a stocker si je devais enregistrer tous les utilisateurs. J'ai donc repartie cela dans ma table user entre des Administrateurs dont le niveau est 100, des chefs de departement dont le niveau est egale a 50. et pour les autres rien. 

J'aimerais faire en sorte qui si le niveau de l'utilisateur connécté est inferieur à 50, certains bouton de s'affiche pas. Sauf que les boutons sont reliés à des dossiers et aucun lien n'est possible entre les tables "dossiers" et "users". J'avoue que je suis un peu perdu et que la reponse m'echappe:

voila ma fonction pour afficher mes dossiers dans mon handler.php :

function afficherDossiers() {
        $ipn = $_SESSION['ipn2'];
      
        $dbcontroller = new DBController();
        $paramIpn = mysqli_escape_string($dbcontroller->getConn(), $ipn);
        $stmt3 = mysqli_prepare($dbcontroller->getConn(), "SELECT ipn, level FROM users WHERE ipn = ?");
        mysqli_stmt_bind_param($stmt3, 's', $paramIpn);
        $data3 = $dbcontroller->executeSelectQueryMSQL($stmt3);

        if($data3=="Aucune donnée à afficher !"){
            $dbcontroller = new DBController();
            $stmt1 = mysqli_prepare($dbcontroller->getConn(), "SELECT id_rec, DATE_FORMAT(date_dos, '%d/%m/%Y') as date_dos1, type_dos, ipn_dos, nom_dos, nom_can, motif_dos, dossiers.status, kdo_code, cadeaux.libelle, cadeaux.id FROM dossiers INNER JOIN cadeaux ON cadeaux.id = kdo_code WHERE ipn_dos IS NOT NULL AND dossiers.status != '04' ORDER BY date_dos DESC");
            mysqli_stmt_bind_param($stmt1, 's', $ipn);
            $data1 = $dbcontroller->executeSelectQueryMSQL($stmt1);
            $dbcontroller->closeQuerySQL();      
            if ($data1 != "Aucune donnée à afficher !") {
                $result = $this->utf8_converter($data1);
            } else {
                $result = "Erreur : résultat vide.";
            }            
        }else{
            $dbcontroller = new DBController();
            $stmt1 = mysqli_prepare($dbcontroller->getConn(), 'SELECT id_rec, DATE_FORMAT(date_dos, "%d/%m/%Y") as date_dos1, type_dos, ipn_dos, nom_dos, nom_can, motif_dos, dossiers.status, kdo_code, cadeaux.libelle,  FROM dossiers INNER JOIN cadeaux ON cadeaux.id = kdo_code WHERE dossiers.status != "04" ORDER BY date_dos DESC');
            $data1 = $dbcontroller->executeSelectQueryMSQL($stmt1);
            $dbcontroller->closeQuerySQL();      
            if ($data1 != "Aucune donnée à afficher !") {
                $result = $this->utf8_converter($data1);
            } else {
                $result = "Erreur : résultat vide.";
            }
        }
        ob_clean();
        return json_encode($result);
    }

Ci joint ma fonction js qui affiche les dossiers : 

function afficherDossiers() {
    $.ajax({
        cache: false,
        url: "data/afficherDossiers",
        type: "POST",
        async: false,
        success: function (response, status) {
            console.log(124, response);
            response = JSON.parse(response);
            
            console.log(128, response); 
            console.log(130, response.data); 
            $("#lignesDossiers").html("");
            if (response != "Erreur : résultat vide.") {

                response.forEach(function(entry) {
                    var type = typeDossier(entry['type_dos']);
                    //Le changement est a faire ici pour le bouton;
                    var etat = etatDossier(entry['status']); //'00','01','02','03','04'
                    var etapeSuivante = etapeSuivanteDossier(entry['status']);
                    var desactive = "";
                    var button1etape = "";
                    var button2etape = "";
                    var image = "";

                    
                    if(!imageExists('PHP/Pictureview.php?id='+entry['kdo_code'])){
                        image = 'Images/ajoutCadeau.png';
                    }else{
                        image = 'PHP/Pictureview.php?id='+entry['kdo_code'];
                    }
                    if(entry['status'] == "00"){
                        button2etape = "<button id='"+entry['id_rec']+"' class='actionBtn' onclick='pageModifDossier(this)'><img src='Images/edition.webp' alt='modifier' class='actionImg'></button>";
                    }
                    if(entry['status'] == "04"){
                        desactive = "disabled";
                    }
                    
                    button1etape = "<button id='"+entry['status']+"' class='actionBtn' onclick='etapeSuivante(this)' "+desactive+">"+etapeSuivante+"</button>";

                    if((entry['id'] == undefined) || (entry['status'] == "00")){
                        desactive2 = "";
                        if(entry['status'] == "00"){
                            desactive2 = "hidden";
                            // button1etape = "";
                        }
                        ligne = "<tr id='" + entry['id_rec'] + "'><td>" + entry['date_dos1'] + "</td><td>" + type + "</td><td>" + entry['nom_dos'] + "</td><td>" + entry['nom_can'] + "</td><td><img src='"+image+"' class='imgCadeau' alt='"+entry['kdo_code']+"'></td><td>" + entry['libelle'] + "</td><td>" + entry['motif_dos'] + "</td><td>" + etat + "</td><td>"+button1etape+"</td><td>"+button2etape+"<button id='"+entry['id_rec']+"' class='actionBtn' onclick='popupSuppressionDossier(this)'><img src='Images/corbeille.png' alt='Supprimer' class='actionImg'></button><button id='"+entry['id_rec']+"' class='actionBtn' onclick='pageInfoDossier(this)' "+desactive2+"><img class='actionImg' alt='info' src='Images/information.png'></button></td>";
                    }else{
                        ligne = "<tr id='" + entry['id_rec'] + "'><td>" + entry['date_dos1'] + "</td><td>" + type + "</td><td>" + entry['nom_dos'] + "</td><td>" + entry['nom_can'] + "</td><td><img src='"+image+"' class='imgCadeau' alt='"+entry['kdo_code']+"'></td><td>" + entry['libelle'] + "</td><td>" + entry['motif_dos'] + "</td><td>" +etat + "</td><td></td><td></td>";
                    }

                    $("#lignesDossiers").append(ligne);                   
                });
            } else {
                $("#lignesDossiers").append("<tr><td colspan='9' class='resultVide'>Résultat vide.</td></tr>");
            }

        },
        error: function (response, status) {
            console.log(response);
            console.log(status);
        }
    });

}

Cest le "button1etape = "<button id='"+entry['status']+"' class='actionBtn' onclick='etapeSuivante(this)' "+desactive+">"+etapeSuivante+"</button>";" dont je veux gerer l'affichage en fonction du niveau du user

voici ma table dossiers : 

et voici ma table users : 

Merci du temps que vous m'accorderez
Windows / Chrome 111.0.0.0

8 réponses

jordane45 Messages postés 38402 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 1 février 2025 4 732
30 mars 2023 à 10:14

Bonjour,

Et quel est le souci exactement ?

Que t'affichent tes console.log ?

Les données te semblent correctes ?

SI oui, c'est que ton souci se trouve au niveau de ton code JS et donc de l'utilisation des réponses ajax que tu en fais...

Si non, c'est que le souci se situe au niveau de ton code php ...


0
Nesil Messages postés 37 Date d'inscription mardi 21 juin 2022 Statut Membre Dernière intervention 1 juillet 2024
30 mars 2023 à 10:55

Merci de ta réponse.

Je souhaite que cetains buton en Js ne s'affiche que pour certain utilisateur.

Pour cela j'ai besoin de recupere le level de l'utilisateur. Or seul les admins (level = 100) et les chefs de departement (level = 50) sont renseignés dans la table users. Les autres utilisateurs random ne sont pas enregistré en bdd.

Le seul endroit ou ces users vont etre rensegnés c'est dans la table "dossiers" lorsqu'il vont créer un dossier. J'ai donc ajouté une colonne 'level' dans la table 'dossiers' initialisé à NULL par defaut.

Lorsque le dossier est enregistrer cela appel la fonction "afficherDossier". J'ai donc fai en sorte dans le php de savoir si l'ipn de l'utilisateur était renseigné dans la table user.

Si non, je ferais en sorte que le bouton ne s'affiche pas si le level est NULL.

Si oui, je fais un UPDATE de la table 'dossiers' avec la valeur correspondante dans la table users.

Mais je bloque sur cette partie là car je pense que ma double requete est très mal faites. Voila le bout de code corresondant dans mon ficher php :

else{
            //Une requete qui update le level de l'utilisateur si celui ci est trouvé dans la bdd
            $dbcontroller = new DBController();

            // requête de mise à jour
            $update_query = "UPDATE dossiers SET dossiers.level = users.level INNER JOIN users ON dossiers.ipn_dos = users.ipnl";
            $stmt_update = mysqli_query($dbcontroller->getConn(), $update_query);
            $data1 = $dbcontroller->executeSelectQueryMSQL($stmt_update); //Si je retire cette ligne j'obtiens l'erreur "Erreur de mise à jour:"
            // Vérification si la requête de mise à jour a échoué
            if (!$stmt_update) {
                die('Erreur de mise à jour: ' . mysqli_error($dbcontroller->getConn()));
            }

            // requête de sélection
            $select_query = 'SELECT id_rec, DATE_FORMAT(date_dos, "%d/%m/%Y") as date_dos1, type_dos, ipn_dos, nom_dos, nom_can, motif_dos, dossiers.status, kdo_code, cadeaux.libelle, users.level FROM dossiers INNER JOIN cadeaux ON cadeaux.id = kdo_code WHERE dossiers.status != "04" ORDER BY date_dos DESC';
            $stmt_select = mysqli_query($dbcontroller->getConn(), $select_query);

            $data1 = $dbcontroller->executeSelectQueryMSQL($stmt_select);
            $dbcontroller->closeQuerySQL(); 

            if ($data1 != "Aucune donnée à afficher !") {
                $result = $this->utf8_converter($data1);
            } else {
                $result = "Erreur : résultat vide.";
            }
        }

 et voila l'erreur obtenu : 

Depuis je bloque, je pense savoir que cela est du à ma double requetes

0
jordane45 Messages postés 38402 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 1 février 2025 4 732
30 mars 2023 à 12:32

Bonjour,

Visiblement tu as un code qui permet d'exécuter des requêtes via le controller ...

Hors.. tu fais appeles à des instructions natives de mysqli PUIS a celle de ton controller .....

En plus, la fonction dans ton controller semble servir uniquement pour des requêtes de type SELECT ... et toi tu y balances un UPDATE ( * je me base sur le nom de la fonction  $dbcontroller->executeSelectQueryMSQL )

NB: MSQL n'est pas MySQL .. soit c'est une erreur dans le nom de ta fonction .. soit tu utilises un BDD Microsoft SQL Server ...et non une bbd MySql

Si tu ne comprends pas comment fonctionne ton controller.... postes nous son code...

0
Nesil Messages postés 37 Date d'inscription mardi 21 juin 2022 Statut Membre Dernière intervention 1 juillet 2024
Modifié le 30 mars 2023 à 14:20

Je comprend mieux l'utilité de mon dbcontroller mais n'ai-je pas une fonction pour effectuer cet UPDATE. Voici le code de mon fichier dbcontroller.php : 

<?php


class DBController {
    private $conn;
    
    // Le constructeur renvoie une instance de la base de données qui sert à lancer les requêtes
    function __construct() {
        $connexion = $this->connectDBMSQL();
        
        if (!empty($connexion)) {
            $this->conn = $connexion;
        } 
    }

    function connectDBMSQL() {
        include '../PHP/SqlConn.php';
        $connexion = mysqli_connect($hostMSQL, $loginMSQL, $passwordMSQL, $databaseMSQL, $port);
        return $connexion;
    }
	
    function getConn() {
        $connexion = $this->connectDBMSQL();
        $this->conn = $connexion;
        return $this->conn;
    }

    function executeQueryMSQL($stmt) {
        return $stmt->execute();
    }

    function executeSelectQueryMSQL($stmt) {
        $stmt->execute();

        $meta = $stmt->result_metadata();
        while($field = $meta->fetch_field()){
            $params[] = &$row[$field->name];
        }

        call_user_func_array(array($stmt, 'bind_result'), $params);

        while($stmt->fetch()){
            foreach($row as $key => $val){
                $c[$key] = $val;
            }

            $resultset[] = $c;
        }

        $this->freeStatementSql($meta);

        if (!empty($resultset)) {
            return $resultset;
        } else {
            return "Aucune donnée à afficher !";
        }
    }

    function closeQuerySQL() {
        mysqli_close($this->conn);
    }

    function freeStatementSql($query) {
        mysqli_free_result($query);
    }
}
0
jordane45 Messages postés 38402 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 1 février 2025 4 732 > Nesil Messages postés 37 Date d'inscription mardi 21 juin 2022 Statut Membre Dernière intervention 1 juillet 2024
30 mars 2023 à 14:56

Il semble que tu puisses utiliser directement la fonction executeQueryMSQL  pour les requêtes UPDATE / DELETE et INSERT

0
Nesil Messages postés 37 Date d'inscription mardi 21 juin 2022 Statut Membre Dernière intervention 1 juillet 2024
30 mars 2023 à 15:39

Des que tu m'en as parlé à la réponse précédente j'ai essayer de modifier ma requete comme tu viens de le suggerer. et l'erreur a juste changer de ligne : 

avec ce code : 

else{
            //Une requete qui update le level de l'utilisateur si celui ci est trouvé dans la bdd
            $dbcontroller = new DBController();
            // $stmt1 = mysqli_prepare($dbcontroller->getConn(), 'SELECT id_rec, DATE_FORMAT(date_dos, "%d/%m/%Y") as date_dos1, type_dos, ipn_dos, nom_dos, nom_can, motif_dos, dossiers.status, kdo_code, cadeaux.libelle FROM dossiers INNER JOIN cadeaux ON cadeaux.id = kdo_code WHERE dossiers.status != "04" ORDER BY date_dos DESC');
            // $data1 = $dbcontroller->executeSelectQueryMSQL($stmt1);
            // $dbcontroller->closeQuerySQL();  
            
            // requête de mise à jour
            $update_query = "UPDATE dossiers SET dossiers.level = users.level INNER JOIN users ON dossiers.ipn_dos = users.ipnl";
            $stmt_update = mysqli_query($dbcontroller->getConn(), $update_query);
            $data1 = $dbcontroller->executeQueryMSQL($stmt_update);
            // Vérification si la requête de mise à jour a échoué
            if (!$stmt_update) {
                die('Erreur de mise à jour: ' . mysqli_error($dbcontroller->getConn()));
            }

            //requête de sélection
            $select_query = 'SELECT id_rec, DATE_FORMAT(date_dos, "%d/%m/%Y") as date_dos1, type_dos, ipn_dos, nom_dos, nom_can, motif_dos, dossiers.status, kdo_code, cadeaux.libelle, users.level FROM dossiers INNER JOIN cadeaux ON cadeaux.id = kdo_code WHERE dossiers.status != "04" ORDER BY date_dos DESC';
            $stmt_select = mysqli_query($dbcontroller->getConn(), $select_query);

            $data1 = $dbcontroller->executeSelectQueryMSQL($stmt_select);
            $dbcontroller->closeQuerySQL(); 

            if ($data1 != "Aucune donnée à afficher !") {
                $result = $this->utf8_converter($data1);
            } else {
                $result = "Erreur : résultat vide.";
            }
0
jordane45 Messages postés 38402 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 1 février 2025 4 732
30 mars 2023 à 16:26

Sachant que tu fais des  mysqli_query  .... je ne vois pas ce que vient faire là ton controller db ....

Pour moi, le $stmt devrait être le résultat d'un prepare et non d'un mysqli_query (qui execute déjà la requête ! )

$stmt = $mysqli->prepare("ta requete sql");
0
Nesil Messages postés 37 Date d'inscription mardi 21 juin 2022 Statut Membre Dernière intervention 1 juillet 2024
30 mars 2023 à 16:51

Je m'en suis rendu compte apres avoir posté.

J'ai donc modifié cela pour au final avoir la meme erreur.

Mais j'ai trouvé une piste. Il s'agirait du fait que mysqli ne supporte pas les parametres mais plutot les '?' accompagnés d'un bind_param. J'ai donc remodifié mon code pour obtenir ce que j'ai là :

 $stmt1 = mysqli_prepare($dbcontroller->getConn(),"UPDATE dossiers INNER JOIN users ON dossiers.ipn_dos = ? SET dossiers.level = ?");
            mysqli_stmt_bind_param($stmt1, 'si', users.ipn, users.level);
            $data1 = $dbcontroller->executeQueryMSQL($stmt1);
            // Vérification si la requête de mise à jour a échoué
            if (!$stmt1) {
                die('Erreur de mise à jour: ' . mysqli_error($dbcontroller->getConn()));
            }

            //requête de sélection
            $stmt2 = mysqli_prepare($dbcontroller->getConn(),'SELECT id_rec, DATE_FORMAT(date_dos, "%d/%m/%Y") as date_dos1, type_dos, ipn_dos, nom_dos, nom_can, motif_dos, dossiers.status, kdo_code, cadeaux.libelle, users.level FROM dossiers INNER JOIN cadeaux ON cadeaux.id = kdo_code WHERE dossiers.status != "04" ORDER BY date_dos DESC');
            $data2 = $dbcontroller->executeSelectQueryMSQL($stmt_select);
            $dbcontroller->closeQuerySQL(); 

            if ($data2 != "Aucune donnée à afficher !") {
                $result = $this->utf8_converter($data2);
            } else {
                $result = "Erreur : résultat vide.";
            }

Je dois juste trouver la manière de declarer 'users.ipn' qui est censé relier mes 2 tables et 'users.level' qui correspondent aux 2 colonnes qui ont les valeurs qui m'interessent . Et je bloque sur ça

0
jordane45 Messages postés 38402 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 1 février 2025 4 732
30 mars 2023 à 16:55

Alors non, tu dois laisser ta jointure comme elle était avant. pas besoin de paramètre.

Par contre .. est-il necessaire de faire une jointure pour ton update ?

A noter qu'il te manque également un where dans ta requête....  là tu vas modifier toutes les entrées de la table.

0

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

Posez votre question
Nesil Messages postés 37 Date d'inscription mardi 21 juin 2022 Statut Membre Dernière intervention 1 juillet 2024
30 mars 2023 à 20:15

J'ai besoin d'une jointure car je veux que la valeur de la colonne level de ma table dossiers (initialement à NULL) prenne la valeur de la colonne level dans la table users. Comme ca apres je pourrais gerer l'affichage de mes boutons en javascript en fonction du level de l'utilisateur. Je vais voir ce que je peux faire pour le WHERE et je remet l'ancienne requete. Je teste et je reviens vers vous. Merci beaucoup

0
Nesil Messages postés 37 Date d'inscription mardi 21 juin 2022 Statut Membre Dernière intervention 1 juillet 2024
30 mars 2023 à 20:29

Je refais ma requete comme ci-joint et j'ai toujours la meme erreur :( 

function afficherDossiers() {
        $ipn = $_SESSION['ipn2'];
$dbcontroller = new DBController(); 
$stmt1 = mysqli_prepare($dbcontroller->getConn(),"UPDATE dossiers SET dossiers.level = users.level INNER JOIN users ON dossiers.ipn_dos = users.ipn WHERE id_dos = $ipn");
            // mysqli_stmt_bind_param($stmt1, 's', $ipn);
            $data1 = $dbcontroller->executeQueryMSQL($stmt1);
            // Vérification si la requête de mise à jour a échoué
            if (!$stmt1) {
                die('Erreur de mise à jour: ' . mysqli_error($dbcontroller->getConn()));
            }

            //requête de sélection
            $stmt2 = mysqli_prepare($dbcontroller->getConn(),'SELECT id_rec, DATE_FORMAT(date_dos, "%d/%m/%Y") as date_dos1, type_dos, ipn_dos, nom_dos, nom_can, motif_dos, dossiers.status, kdo_code, cadeaux.libelle, users.level FROM dossiers INNER JOIN cadeaux ON cadeaux.id = kdo_code WHERE dossiers.status != "04" ORDER BY date_dos DESC');
            $data2 = $dbcontroller->executeSelectQueryMSQL($stmt_select);
            $dbcontroller->closeQuerySQL(); 

            if ($data2 != "Aucune donnée à afficher !") {
                $result = $this->utf8_converter($data2);
            } else {
                $result = "Erreur : résultat vide.";
            }
        }
        ob_clean();
        return json_encode($result);
    }
0
Nesil Messages postés 37 Date d'inscription mardi 21 juin 2022 Statut Membre Dernière intervention 1 juillet 2024
31 mars 2023 à 09:38

J'ai modifié ma requete et j'ai reussi à avancer. Maintenant l'erreur est la meme mais au niveau de ma 2ème requete. je le sais car c'est la meme erreur mais ligne 33 de mon DBController, or cela correspond au "executeSelectQueryMSQL" utilisé dans ma deuxième requete. Voici mon code :

 $stmt1 = mysqli_prepare($dbcontroller->getConn(),"UPDATE dossiers INNER JOIN users ON dossiers.ipn_dos = users.ipn SET dossiers.level = users.level WHERE ipn_dos = ?");
            mysqli_stmt_bind_param($stmt3, 's', $paramIpn);
            $data1 = $dbcontroller->executeQueryMSQL($stmt1);
            // Vérification si la requête de mise à jour a échoué
            if (!$stmt1) {
                die('Erreur de mise à jour: ' . mysqli_error($dbcontroller->getConn()));
            }

            //requête de sélection
            $stmt2 = mysqli_prepare($dbcontroller->getConn(),'SELECT id_rec, DATE_FORMAT(date_dos, "%d/%m/%Y") as date_dos1, type_dos, ipn_dos, nom_dos, nom_can, motif_dos, dossiers.status, kdo_code, cadeaux.libelle, users.level FROM dossiers INNER JOIN cadeaux ON cadeaux.id = kdo_code WHERE dossiers.status != "04" ORDER BY date_dos DESC');
            $data2 = $dbcontroller->executeSelectQueryMSQL($stmt2);
            $dbcontroller->closeQuerySQL(); 

            if ($data2 != "Aucune donnée à afficher !") {
                $result = $this->utf8_converter($data2);
            } else {
                $result = "Erreur : résultat vide.";
            }

Si vous avez une idée de ce que je peux changer, en attendant je continue sur cette piste

0

Bonjour,

Curieux de mélanger la syntaxe procédurale et la syntaxe objet pour l'utilisation de mysqli, il serait mieux de choisir et d'utiliser une seule syntaxe même si ca n'empêche pas le fonctionnement du code.

Ton précédent message d'erreur indique que la requête sql préparée est incorrecte. Il faut réaliser ton test if ($stmt1) { die(...); } avant l'exécution de la requête pour voir le message d'erreur sql à la place de l'erreur "call to a member function exetute() on bool".

L'affichage des messages d'erreurs sql n'est pas recommandé pour un site en ligne. En développement, au lieu d'utiliser die() et mysqli_error(), tu peux activer le rapport d'erreur de mysqli : https://www.php.net/manual/fr/mysqli-driver.report-mode.php

0
Nesil Messages postés 37 Date d'inscription mardi 21 juin 2022 Statut Membre Dernière intervention 1 juillet 2024
31 mars 2023 à 10:57

Bonjour à tous,

Apres plusieurs modifications, j'y suis arrivé! Vous allez me detester mais l'erreur venait une colonne quin'existait pas dans ma déclaration. Voici le code final : 

function afficherDossiers() {
        $ipn = $_SESSION['ipn2'];
      
        $dbcontroller = new DBController();
        $paramIpn = mysqli_escape_string($dbcontroller->getConn(), $ipn);
        $stmt3 = mysqli_prepare($dbcontroller->getConn(), "SELECT ipn FROM users WHERE ipn = ?");
        mysqli_stmt_bind_param($stmt3, 's', $paramIpn);
        $data3 = $dbcontroller->executeSelectQueryMSQL($stmt3);

        if($data3=="Aucune donnée à afficher !"){
            $dbcontroller = new DBController();
            $stmt1 = mysqli_prepare($dbcontroller->getConn(), "SELECT id_rec, DATE_FORMAT(date_dos, '%d/%m/%Y') as date_dos1, type_dos, ipn_dos, nom_dos, nom_can, motif_dos, dossiers.status, kdo_code, cadeaux.libelle, cadeaux.id, level FROM dossiers INNER JOIN cadeaux ON cadeaux.id = kdo_code WHERE ipn_dos IS NOT NULL AND dossiers.status != '04' ORDER BY date_dos DESC");
            $data1 = $dbcontroller->executeSelectQueryMSQL($stmt1);
            $dbcontroller->closeQuerySQL();      
            if ($data1 != "Aucune donnée à afficher !") {
                $result = $this->utf8_converter($data1);
            } else {
                $result = "Erreur : résultat vide.";
            }            
        }else{
            //Une requete qui update le level de l'utilisateur si celui ci est trouvé dans la bdd
            $dbcontroller = new DBController();
            //VERSION QUI MARCHE
            // $stmt1 = mysqli_prepare($dbcontroller->getConn(), 'SELECT id_rec, DATE_FORMAT(date_dos, "%d/%m/%Y") as date_dos1, type_dos, ipn_dos, nom_dos, nom_can, motif_dos, dossiers.status, kdo_code, cadeaux.libelle FROM dossiers INNER JOIN cadeaux ON cadeaux.id = kdo_code WHERE dossiers.status != "04" ORDER BY date_dos DESC');
            // $data1 = $dbcontroller->executeSelectQueryMSQL($stmt1);
            // $dbcontroller->closeQuerySQL();  
            
            // requête de mise à jour
            $stmt1 = mysqli_prepare($dbcontroller->getConn(),"UPDATE dossiers INNER JOIN users ON dossiers.ipn_dos = users.ipn SET dossiers.level = users.level WHERE ipn_dos = ?");
            mysqli_stmt_bind_param($stmt1, 's', $paramIpn);
            $data1 = $dbcontroller->executeQueryMSQL($stmt1);
            // Vérification si la requête de mise à jour a échoué
            if (!$stmt1) {
                die('Erreur de mise à jour: ' . mysqli_error($dbcontroller->getConn()));
            }

            //requête de sélection
            $stmt2 = mysqli_prepare($dbcontroller->getConn(),"SELECT id_rec, DATE_FORMAT(date_dos, '%d/%m/%Y') as date_dos1, type_dos, ipn_dos, nom_dos, nom_can, motif_dos, dossiers.status, kdo_code, cadeaux.libelle, level FROM dossiers INNER JOIN cadeaux ON cadeaux.id = kdo_code WHERE dossiers.status != '04' ORDER BY date_dos DESC");
            $data2 = $dbcontroller->executeSelectQueryMSQL($stmt2);
            $dbcontroller->closeQuerySQL(); 

            if ($data2 != "Aucune donnée à afficher !") {
                $result = $this->utf8_converter($data2);
            } else {
                $result = "Erreur : résultat vide.";
            }
        }
        ob_clean();
        return json_encode($result);
    }

Je vais retirer le message d'erreur sous les conseils de Pitet. 

La il ne me reste plus qu'à aller dans le Js pour recuperer le level du users et filtrer la vue des boutons en fonction du level.

Merci

0