Mise à jour de ma bdd en fonction du level du user connecté

Résolu
Nesil - 3 avril 2023 à 12:30
 Nesil - 5 avril 2023 à 18:52

Bonjour,

Mon objectif est de gerer l'affichage ou non de certains boutons de ma page. J'aimerais gerer cela grace au 'level' du user qui se connecte. 

J'ai donc une table 'users' qui repertorie uniquement les admins (level 100) et les respos (level 50). Mais aussi une table 'dossiers' dans laquel j'ai rajouté une colonne level initialisé à NULL pour tous les autres utilisateurs. 

J'aimerais que lorsqu'un utilisateur se connecte la colonne level de la table dossier prenne la valeur de l'utilisateur connecté. 

Hors pour l'instant j'arrive à recuperer la valeur NULL si le user n'est pas renseigné dans ma bbd. Et j'arrive a recuperer la valeur 100 si celui-ci est un user. Mais je n'arrive pas a changer quoi que ce soit quand le user est un respos de level 50.

Voici ma fonction connection dans mon handler.php :

function connexion() {
        //include_once("Arca.php");
        $arca = new cl_arca();

        if (isset($_POST['ipn']) && isset($_POST['motDePasse'])) {
            $ipn = $_POST['ipn'];
            $mdp = $_POST['motDePasse'];
            $dbcontroller = new DBController();
            $paramIpn = mysqli_escape_string($dbcontroller->getConn(), $ipn);
            $stmt = mysqli_prepare($dbcontroller->getConn(), "SELECT users.ipn FROM users WHERE ipn = ?");
            mysqli_stmt_bind_param($stmt, 's', $paramIpn);
            $data = $dbcontroller->executeSelectQueryMSQL($stmt);
            $dbcontroller->closeQuerySQL();
       //     if ($arca->authenticate($ipn, $mdp)) {
                if (1) {
                    if($data != "Aucune donnée à afficher !") {
                        $date = date("Y-m-d");
                        $_SESSION['ipn'] = sha1($ipn);
                        $_SESSION['ipn2'] = $ipn;
                        $_SESSION['level'] = $level;
                        $_SESSION['mdp'] = sha1($mdp);
                        $_SESSION['token'] = sha1($ipn) . sha1($mdp) . sha1($date);
                        $result = "Réussite : Connexion accordée.";                        
                    } else {
                        $date = date("Y-m-d");
                        $_SESSION['ipn'] = sha1($ipn);
                        $_SESSION['ipn2'] = $ipn;
                        $_SESSION['token2'] = sha1($ipn) . sha1($date);
                        $result = "Réussite : Connexion accordée.";
                    }
            } else {
                $result =  "Erreur : IPN et/ou mot de passe invalide.";
            }
            
        }else {
            $result = "Erreur : Il manque un IPN ou un mot de passe.";
        }
        unset($_COOKIE['admin']);
        setcookie('admin', '', time() - 3600);
        return $result;
    }

Et voici ma fonction afficherDossier 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();
                // requête de mise à jour
                $stmt1 = mysqli_prepare($dbcontroller->getConn(),"UPDATE dossiers SET dossiers.level = NULL WHERE ipn_dos IS NOT NULL");
                // 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()));
                }
                $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, 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");
               
                $data2 = $dbcontroller->executeSelectQueryMSQL($stmt2);
                $dbcontroller->closeQuerySQL();
                if ($data2 != "Aucune donnée à afficher !") {
                    $result = $this->utf8_converter($data2);
                } 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();
                // 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 IS NOT NULL AND users.ipn = ?");
                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);
    }

et pour finir voici ma fonction afficherDossier.js où j'aimerais gerer l'affichage de mes boutons en fonction du level et du statut de mon user :

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); 
            $("#lignesDossiers").html("");
            if (response != "Erreur : résultat vide.") {
                var userLevel = response[0].level;
                console.log(138, userLevel);
                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'];
                    }
                    //Bouton Modifier Dossier = button2etape
                    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";
                    }
                    if (userLevel == 100){//Affiche le bouton "Etape suivante" si statut != 04
                        button1etape = "<button id='"+entry['status']+"' class='actionBtn' onclick='etapeSuivante(this)' "+desactive+">"+etapeSuivante+"</button>";
                    }else if(userLevel == 50){
                        "<button id='"+entry['status']+"' class='actionBtn' onclick='etapeSuivante(this)' "+desactive+">"+etapeSuivante+"</button>";
                    }else{
                        button1etape = "";
                    }
                    if((entry['id'] == undefined) || (entry['status'] == "00")){
                        desactive2 = "";
                        if(entry['status'] == "00"){
                            desactive2 = "hidden";
                        }
                        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>");
                console.log(175, "raté");
            }

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

}

Voila je suis bloqué depuis 2/3 jours, merci du temps que vous m'accorderez
Windows / Chrome 111.0.0.0

A voir également:

6 réponses

yg_be Messages postés 22479 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 22 février 2024 1 445
3 avril 2023 à 13:02

bonjour,

Il n'y a jamais plusieurs utilisateurs connectés?

Je ne comprends pas pourquoi tu fais ceci:

UPDATE dossiers SET dossiers.level = NULL WHERE ipn_dos IS NOT NULL

Ni pourquoi tu as une nouvelle table, dossiers, et à quoi elle sert.

0

Il est rare que plusieurs utilisateurs soient connectés en meme temps mais c'est possible. Le but d'un utilisateur est de creer des dossiers de demande de recompense. Ce apres quoi le responsable doit valider la demande puis c'est au admin de faire le necessaire apres. 

Cette requete permet de relier la colonne level de la table user a la colonne level de la table dossier. Car lorsqu'on créé un user, on décide de si la personne est un admin (level 100) ou un responsable (level 50).

Cette requete permet donc d'update la colonne level de la table dossier en fonction du level de l'utilisateur afin que dans le js je puisse utiliser ce level pour faire des conditions sur l'affichage des boutons.

0
yg_be Messages postés 22479 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 22 février 2024 1 445
3 avril 2023 à 16:18

Si l'info est dans la table user, pourquoi la recopier dans la table dossier?

La requête vide la colonne level pour une partie des enregistrements.  Pourquoi?

0

Je la récupère dans dossier afin d'avoir l'etat null du level qui correspond à tous les utilisateurs. Autrement, je ne sais pas comment faire pour différencier un utilisateur random (de level NULL) d'un responsable (level 50) ou d'un adin (level 100). Sachant qu'il y a tellement d'utilisateurs que je ne peux pas tous les enregistrer en bdd. 

Mon problème initial est que je veux affcher cerains boutons en fonction du statut du dossier (ca c'est bon) mais aussi en fonction du niveau de la personne.

Level null = ne voit aucun bouton

level 50 = voit le 1er bouton

level 100 = voit tous les boutons

Et le seul moyen que j'ai trouvé de faire cela c'est au moment de ma fonction afficherDossier que j'ai mis plus haut. Si vous avez une solution ce serait avec plaisir. 

Mais je me demande si je ne devrais pas intervenir direcetement au moment de ma connexioon sur mon application. Je vous remet le code de connexion en php :

function connexion() {
        //include_once("Arca.php");
        $arca = new cl_arca();

        if (isset($_POST['ipn']) && isset($_POST['motDePasse'])) {
            $ipn = $_POST['ipn'];
            $mdp = $_POST['motDePasse'];
            $dbcontroller = new DBController();
            $paramIpn = mysqli_escape_string($dbcontroller->getConn(), $ipn);
            $stmt = mysqli_prepare($dbcontroller->getConn(), "SELECT users.ipn FROM users WHERE ipn = ?");
            mysqli_stmt_bind_param($stmt, 's', $paramIpn);
            $data = $dbcontroller->executeSelectQueryMSQL($stmt);
            $dbcontroller->closeQuerySQL();
       //     if ($arca->authenticate($ipn, $mdp)) {
                if (1) {
                    if($data != "Aucune donnée à afficher !") {
                        $date = date("Y-m-d");
                        $_SESSION['ipn'] = sha1($ipn);
                        $_SESSION['ipn2'] = $ipn;
                        $_SESSION['level'] = $level;
                        $_SESSION['mdp'] = sha1($mdp);
                        $_SESSION['token'] = sha1($ipn) . sha1($mdp) . sha1($date);
                        $result = "Réussite : Connexion accordée.";                        
                    } else {
                        $date = date("Y-m-d");
                        $_SESSION['ipn'] = sha1($ipn);
                        $_SESSION['ipn2'] = $ipn;
                        $_SESSION['token2'] = sha1($ipn) . sha1($date);
                        $result = "Réussite : Connexion accordée.";
                    }
            } else {
                $result =  "Erreur : IPN et/ou mot de passe invalide.";
            }
            
        }else {
            $result = "Erreur : Il manque un IPN ou un mot de passe.";
        }
        unset($_COOKIE['admin']);
        setcookie('admin', '', time() - 3600);
        return $result;
    }

et voici la fonction connexion.js : 

$('document').ready(function() {
    $("#notifPFExistant").hide();
        /**
     * Vérification de la connexion à l'application pour l'utilisateur
     */
    $.ajax({
        cache: false,
        url: "data/verifConnexion",
        type: "POST",
        async: true,
        data: ({
        }),
        success: function (response, status) {
            //console.log(response);
            switch (response) {
                case "Erreur : token invalide.":
                    document.location.href = "connexion";
                    break;
                case "Erreur : token inexistant.":
                    document.location.href = "connexion";
                    break;
                case "Réussite : token valide non admin.":
                    document.cookie = "admin=non";
                    $('#users').hide();
                    $('#cadeau').hide();
                    $('#btnExporter').hide();
                    $('#departements').hide();
                    $('#mails').hide();
                    $('#rechercheDemandeur').hide();
                    
                    break;
                default:
                    break;
            }
        },
        error: function (response, status) {
            console.log(response);
            console.log(status);
        }
    });
    $("#afficherErreur").hide();
    $('#validation').prop('disabled', true);

    afficherDossiers();

    var queryString = window.location.search;
    var urlParams = new URLSearchParams(queryString);
    var param = urlParams.get('idDoss');
    if(param != null){
        Modifier(param);
        $('#validation').prop('disabled', false);
    }else{
        creerDossier();
    }

    $('.champClassique').on('keyup change', function (){
        var dis = 1;
        $('.champClassique').each(function() {
            if ( ($(this).val() === '') || ($('#choisi').html() == undefined)){
                dis = 0;
            }
        });
        if(dis==1){
            $('#validation').prop('disabled', false);
        }else{
            $('#validation').prop('disabled', true);
        }   
    });
});

Si vous avez une solution pour l'une de mes 2 fonctions ce serait avec plaisir.

Merci du temps que vous m'accordez

0

Rebonjour, grace à vos retours j'ai beaucoup réfléchs et avancer dans mon code. Et enfaite ce dont j'ai besoin maintenant c'est de recuperer la valeur 'level' de la session du user connecté dans mon javascript. J'ai modifié ma fonction connexion que voici : 

function connexion() {
        //include_once("Arca.php");
        $arca = new cl_arca();

        if (isset($_POST['ipn']) && isset($_POST['motDePasse'])) {
            $ipn = $_POST['ipn'];
            $mdp = $_POST['motDePasse'];
            $dbcontroller = new DBController();
            $paramIpn = mysqli_escape_string($dbcontroller->getConn(), $ipn);
            $stmt = mysqli_prepare($dbcontroller->getConn(), "SELECT users.ipn, users.level FROM users WHERE ipn = ?");
            mysqli_stmt_bind_param($stmt, 's', $paramIpn);
            $data = $dbcontroller->executeSelectQueryMSQL($stmt);
            $dbcontroller->closeQuerySQL();
       //     if ($arca->authenticate($ipn, $mdp)) {
                if (1) {
                    if($data != "Aucune donnée à afficher !") {
                        $level = $data[0]['level']; // Récupération du niveau de l'utilisateur depuis la base de données
                        $_SESSION['level'] = $level; // Stockage de la valeur du niveau de l'utilisateur dans la session
                        $date = date("Y-m-d");
                        $_SESSION['ipn'] = sha1($ipn);
                        $_SESSION['ipn2'] = $ipn;
                        $_SESSION['mdp'] = sha1($mdp);
                        $_SESSION['token'] = sha1($ipn) . sha1($mdp) . sha1($date);
                        $result = "Réussite : Connexion accordée.";
                    } else {
                        $date = date("Y-m-d");
                        $_SESSION['ipn'] = sha1($ipn);
                        $_SESSION['ipn2'] = $ipn;
                        $_SESSION['level'] = NULL;
                        $_SESSION['token2'] = sha1($ipn) . sha1($date);
                        $result = "Réussite : Connexion accordée.";
                    }
            } else {
                $result =  "Erreur : IPN et/ou mot de passe invalide.";
            }

        }else {
            $result = "Erreur : Il manque un IPN ou un mot de passe.";
        }
        unset($_COOKIE['admin']);
        setcookie('admin', '', time() - 3600);
        return $result;
    }

Voici ma fonctoin afficherDossier.php :

function afficherDossiers() {
        $ipn = $_SESSION['ipn2'];
        $level = $_SESSION['level'];

        $dbcontroller = new DBController();
        $paramIpn = mysqli_escape_string($dbcontroller->getConn(), $ipn);
        $paramLevel = mysqli_escape_string($dbcontroller->getConn(), $level);
        $stmt3 = mysqli_prepare($dbcontroller->getConn(), "SELECT ipn, level FROM users WHERE ipn = ?");
        mysqli_stmt_bind_param($stmt3, 's', $paramIpn);
        $data3 = $dbcontroller->executeSelectQueryMSQL($stmt3);

        // if ($data1) {
            if($data3=="Aucune donnée à afficher !"){
                $dbcontroller = new DBController();
                
                $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, cadeaux.id, dossiers.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");//Changer WHERE ipn_dos IS NOT NULL en WHERE ipn_dos = ? avec ?=$paramIpn + gerer level pour que seul les chefDep et user soit touchés par la requete
                //Refaire une requete pour gerer la vu admin avec level=100 pour qu'il puisse voir tout
                $data2 = $dbcontroller->executeSelectQueryMSQL($stmt2);
                $dbcontroller->closeQuerySQL();
                if ($data2 != "Aucune donnée à afficher !") {
                    
                    $result = $this->utf8_converter($data2);
                } 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();
                

                //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 INNER JOIN users ON users.ipn = dossiers.ipn_dos 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 ne sais pas si je doit modifier la manière dont est appelé 'level'.

Et enfin ma fonction javascript afficherDossier où j'aimerais recupere la valeur du level du user connecté :

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); 
            $("#lignesDossiers").html("");
            if (response != "Erreur : résultat vide.") {
                var userLevel = $_POST['level'];
                console.log(138, userLevel);
                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'];
                    }
                    //Bouton Modifier Dossier = button2etape
                    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";
                    }
                    if (userLevel == 100){//Affiche le bouton "Etape suivante" si statut != 04
                        button1etape = "<button id='"+entry['status']+"' class='actionBtn' onclick='etapeSuivante(this)' "+desactive+">"+etapeSuivante+"</button>";
                    }else if(userLevel == 50){
                        "<button id='"+entry['status']+"' class='actionBtn' onclick='etapeSuivante(this)' "+desactive+">"+etapeSuivante+"</button>";
                    }else{
                        button1etape = "";
                    }
                    if((entry['id'] == undefined) || (entry['status'] == "00")){
                        desactive2 = "";
                        if(entry['status'] == "00"){
                            desactive2 = "hidden";
                        }
                        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>");
                console.log(175, "raté");
            }

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

}

Je pense qu'il faut que je rajoute un data dans les parametre de mon ajax, mais je ne sais pas comment faire ni si je dois modifier autre chose.

Désolé de vous relancer et encore une fois merci du temps que vous m'accordez

0
yg_be Messages postés 22479 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 22 février 2024 1 445
4 avril 2023 à 16:49

dans afficherDossier.php, il suffit peut-être de remplacer

return json_encode($result);

par

return json_encode(array($result,$level));

Je ne peux pas te dire comment précisément adapter la fonction javascript afficherDossiers() pour récupérer la nouvelle réponse.

0

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

Posez votre question

J'ai déjà essayé avec un array et je ne sais pas comment recuperer la donnée level en javascript ensuite. Et je pense qu'il doit exister une autre manière

0

Pour ce que ça interesse, j'ai trouvé la solution. J'ai repris l'idée d'array mais je l'ai utilisé un peu plus haut de mon code. Et en gros la valeur de mon result est egale à un array contenant mes datas et le niveau du user connecté. 

Valeurs que je recupere dans le Js comme vous allez pouvoir le voir dans mon code.

Ci joint, mon code PHP:

function afficherDossiers() {
        $ipn = $_SESSION['ipn2'];
        // $level = $_SESSION['level'];

        $dbcontroller = new DBController();
        $paramIpn = mysqli_escape_string($dbcontroller->getConn(), $ipn);
        // $paramLevel = mysqli_escape_string($dbcontroller->getConn(), $level);
        $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 !"){
            $level = $data3[0]['level']; //Level du user connecté si celui-ci est renseigné dans la bbd
        }else{
            $level = NULL; //Level du user connecté si celui-ci n'est pas renseigné dans la bbd
        }
        if($data3=="Aucune donnée à afficher !"){
            $dbcontroller = new DBController();
            $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, cadeaux.id, dossiers.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");//Changer WHERE ipn_dos IS NOT NULL en WHERE ipn_dos = ? avec ?=$paramIpn + gerer level pour que seul les chefDep et user soit touchés par la requete
            $data2 = $dbcontroller->executeSelectQueryMSQL($stmt2);
            $dbcontroller->closeQuerySQL();
            if ($data2 != "Aucune donnée à afficher !") {
                $result = array(
                    "data" => $this->utf8_converter($data2),
                    "level" => $level
                );
            } else {
                $result = "Erreur : résultat vide.";
            }
        }else{
            $dbcontroller = new DBController();
            //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 as level FROM dossiers INNER JOIN cadeaux ON cadeaux.id = kdo_code INNER JOIN users ON users.ipn = dossiers.ipn_dos WHERE dossiers.status != '04' ORDER BY date_dos DESC");
            $data2 = $dbcontroller->executeSelectQueryMSQL($stmt2);
            $dbcontroller->closeQuerySQL();

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

et voila ma fonction en JS:

function afficherDossiers($result) {
    $.ajax({
        cache: false,
        url: "data/afficherDossiers",
        type: "POST",
        async: false,
        data: ({
        }),
        success: function (response, status) {
            response = JSON.parse(response);
            var data = response.data;// Récupérer l'objet "data"
            var level = response.level;// Récupérer l'objet "level" 
            $("#lignesDossiers").html("");
            if (response != "Erreur : résultat vide.") {
                data.forEach(function(entry) {
                    var type = typeDossier(entry['type_dos']);
                    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'];
                    }
                    //Bouton Modifier Dossier = button2etape
                    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";
                    }
                   //Affichage des boutons
                    if (entry['status'] == "00" && level >= 50){
                        button1etape = "<button id='"+entry['status']+"' class='actionBtn' onclick='etapeSuivante(this)' "+desactive+">"+etapeSuivante+"</button>";
                    } else if (entry['status'] != "00" && level == 100) {
                        button1etape = "<button id='"+entry['status']+"' class='actionBtn' onclick='etapeSuivante(this)' "+desactive+">"+etapeSuivante+"</button>";
                    } else {
                        button1etape = "";
                    }

                    if((entry['id'] == undefined) || (entry['status'] == "00")){
                        desactive2 = "";
                        if(entry['status'] == "00"){
                            desactive2 = "hidden";
                        }
                        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>");
                console.log(175, "raté");
            }

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

}

Voila si vous avez d'autres conseils ou des questions n'hesitez pas.

merci à tous

0