Afficher une image apres enregistrement en BDD [PHP]

Résolu/Fermé
Nesil Messages postés 36 Date d'inscription mardi 21 juin 2022 Statut Membre Dernière intervention 19 juillet 2023 - 22 juin 2022 à 10:45
jordane45 Messages postés 38182 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 mai 2024 - 29 juin 2022 à 16:53
Bonjour,
J'ai recuperer le code d'un ancien alternant et grace à un precedent topique, j'ai réussi à implémenter l'enregistrement d'une piece jointe en bdd.

Or, au moment d'appuyer sur le bouton enregistrer, la page se recharge et affiche le texte prealablement ecrit, mais pas la pièce jointe. J'ai inspecté lors de l'enregistrement et je sais que cela concerne la fonction "generationPriorite". Je pense que cela viens de mon appel de donnée dans le Handler.php mais je suis bloqué.

Voici le success de la fonction dans le .js :

success:function(response, status){
response = JSON.parse(response);

//si il y a pas de prio on ajoute une div de prio vide avec le boutton d'ajout de prio

if(response == "vide"){
response = '<div class="text-center addPrio"><img src="Images/add-button.png" class="icoMenu" id="addPrio" onclick="addPrioFenetre()"></div>';
document.getElementById("priorite").innerHTML = response;

//on ajoute 3 prio vide

addPrioFenetre();
addPrioFenetre();
addPrioFenetre();
}else{

//sinon on affiche les prio avec le boutton d'ajout des prio

response += '<div class="text-center addPrio"><img src="Images/add-button.png" class="icoMenu" id="addPrio" onclick="addPrioFenetre()"></div>';
document.getElementById("priorite").innerHTML = response;
if(response[0]["image_aide"] != ""){
$("#imgAideP").prepend(response[0]["image_aide"]);
$("#suppPhoto").show();
}
}


Et le code de la fonction dans le handler.php :


if ($data != "Aucune donnée à afficher !") {
$priorite = '';

//on s'occupe de l'affichage des prio des onglets

$data = $this->utf8_converter($data);

foreach ($data as $prio) {
$id_onglet = $prio['id_onglet'];
$id_prio = $prio['id_prio'];
$srcimg = "";
$img = "";

//on convertie le blob en php et on creer l'element avant de convertir le resultat en utf8, car sinon l'image est faussé

if($data[0]['image_aide'] != NULL){
$img = '<img src="data:image/jpeg;base64,'.base64_encode($data[0]['image_aide'] ).'" data-img="true">';
}

//si la prio est remonté en synthese

if ($prio['remonte'] == 0) {
$srcimg = 'class="imgButtonCheckOnglet" src="Images/validation-black.png"';
} else {
$srcimg = 'class="imgButtonCheckedOnglet" src="Images/validation_t.png"';
}
//si la prio est remonte depuis une autre config
$Origin = "";
if ($prio['id_prio_origin'] == null) {
$fonctionSupprimer = "supprimerPrio('$id_onglet','$id_prio', this)";
} else {
$fonctionSupprimer = "supprimerPrioRemonte(" . $id_onglet . "," . $id_prio . ", " . $prio['id_prio_origin'] . ",this)";
$Origin = " : " . $prio['nom_onglet'] . " - " . $prio['pilote'];
}
// Affichage lorsqu'on enregistre la priorité

$priorite .= '<div class="prioDiv" data-id-prio="' . $id_prio . '" data-position="' . $k . '" data-id-onglet="' . $id_onglet . '"><label class="itemPrio labelPrio">';
$priorite .= '<img id="' . $id_onglet . 'imgCheckOnglet' . $id_prio . '" onclick="selectPrioOngletFenetre(' . $id_onglet . ',' . $id_prio . ', this)" ' . $srcimg . ' alt="Sélectionner la priorité">PRIORITÉ ' . $k . $Origin . '<img id="suppPrioBtn' . $id_prio . '" onclick="' . $fonctionSupprimer . '" class="imgButtonSuppPrio" src="Images/echec.png" alt="Supprimer la priorité"></label>';
$priorite .= '<textarea class="itemPrio textePrio" onkeyup="auto_grow(this)" onfocus="focus_grow(this)">' . $prio['texte'] . '</textarea></div>';
$priorite .= '</br></br><div id="imgAide" class="flexColumn"><label for="photoAideDetail">Ajouter une pièce jointe :</label><input type="file" id="photoAideDetail" name="photoAideDetail" accept="image/png, image/jpeg, image/jpg">' . $img . '</div>';
$k++;
}

}


et voila à quoi cela ressemble avant l'action du bouton:


et apres l'action :


désolé de la longueur et merci d'avance

Configuration: Windows / Chrome 102.0.0.0
A voir également:

12 réponses

jordane45 Messages postés 38182 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 mai 2024 4 670
22 juin 2022 à 11:24
Bonjour,

Déjà .. merci de bien vouloir utiliser correctement les balises de code en y précisant le LANGAGE
Explications disponibles ici https://forums.commentcamarche.net/forum/affich-37598670-mise-en-forme-du-forum-et-des-fiches-pratiques-ccm#les-codes-sources

Ensuite,
Tu fais de l'ajax ... donc... commence par regarder ce que retourne ta réponse ajax...
Tu pourrais , par exemple, faire un console.log de la réponse .. et nous montrer ce qu'elle contient...

0
Nesil Messages postés 36 Date d'inscription mardi 21 juin 2022 Statut Membre Dernière intervention 19 juillet 2023
23 juin 2022 à 09:46
Bonjour,

Merci de votre reponse et désolé je debute sur ce site.
Je fais comme vous m'avez dit, à savoir que j'ai fais un console.log de la reponse comme suit :


function genereFenetrePrio(iddate, idonglet){

    $.ajax({
        cache:false,
        url: "data/generationPriorite",
        type: "POST",
        async: false,
        data: ({
            iddate : iddate,
            idonglet : idonglet,
        }),
        success:function(response, status){
            response = JSON.parse(response);

            //si il y a pas de prio on ajoute une div de prio vide avec le boutton d'ajout de prio

            if(response == "vide"){
                response = '<div class="text-center addPrio"><img src="Images/add-button.png" class="icoMenu" id="addPrio" onclick="addPrioFenetre()"></div>';
                document.getElementById("priorite").innerHTML = response;

                //on ajoute 3 prio vide

                addPrioFenetre();
                addPrioFenetre();
                addPrioFenetre();
                console.log(109, response);
            }else{

                //sinon on affiche les prio avec le boutton d'ajout des prio

                response += '<div class="text-center addPrio"><img src="Images/add-button.png" class="icoMenu" id="addPrio" onclick="addPrioFenetre()"></div>';
                document.getElementById("priorite").innerHTML = response;
                if(response[0]["image_aide"] != ""){
                    $("#imgAideP").prepend(response[0]["image_aide"]);
                    $("#suppPhoto").show();
                }
            }
            console.log(118, response);

            var i = $('#priorite textarea').length;
        },
        error: function(response, status){
        }
    });
}



et voila ce que j'obtiens en console :
0
Nesil Messages postés 36 Date d'inscription mardi 21 juin 2022 Statut Membre Dernière intervention 19 juillet 2023
23 juin 2022 à 14:20
Pardon j'ai vu que le code n'a pas été indenté lors de l'envoi,
je le remet au propre ici :

$.ajax({
        cache:false,
        url: "data/generationPriorite",
        type: "POST",
        async: false,
        data: ({
            date : dateid,
            id_onglet : id_onglet,
        }),
        success:function(response, status){
            console.log(98, response);
            response = JSON.parse(response);
            console.log(100, response);
            //si il y a pas de prio on ajoute une div de prio vide avec le boutton d'ajout de prio
            if(response == "vide"){
                response = '<div class="text-center addPrio"><img src="Images/add-button.png" class="icoMenu" id="addPrio" onclick="addPrioFenetre()"></div>';
                document.getElementById("priorite").innerHTML = response;
                //on ajoute 3 prio vide
                addPrioFenetre();
                addPrioFenetre();
                addPrioFenetre();
                console.log(109, response);
            }else{
                //sinon on affiche les prio avec le boutton d'ajout des prio
                response += '<div class="text-center addPrio"><img src="Images/add-button.png" class="icoMenu" id="addPrio" onclick="addPrioFenetre()"></div>';
                document.getElementById("priorite").innerHTML = response;
                if(response[0]["image_aide"] != ""){
                    $("#imgAideP").prepend(response[0]["image_aide"]);
                    $("#suppPhoto").show();
                }
                console.log(117, response);
            }
            console.log(118, response);

            var i = $('#priorite textarea').length;

            // if(i == 5){
            //     $("#addPrio").css("background-color", "grey");
            // }

        },
        error: function(response, status){
        }
    });


Je remet aussi ce que j'obtiens en console :


Merci beaucoup
0
jordane45 Messages postés 38182 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 mai 2024 4 670
23 juin 2022 à 14:23
C'est le console.log(98, response); que je veux voir .. pas la variable que tu modifies ensuite....
1
Nesil Messages postés 36 Date d'inscription mardi 21 juin 2022 Statut Membre Dernière intervention 19 juillet 2023 > jordane45 Messages postés 38182 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 mai 2024
23 juin 2022 à 14:38
Voila :


je me dis qu'il faudrait peut etre qu'il recupère un tableau
0
Nesil Messages postés 36 Date d'inscription mardi 21 juin 2022 Statut Membre Dernière intervention 19 juillet 2023
23 juin 2022 à 16:04
Plus j'analyse mon code et plus je me dis que le problème viens surement de mon handler.php et plus particulierement de cette fonction là :

function generationPriorite(){

 $data = " ";
 $priorite = 'vide';
        if (isset($_COOKIE["config"]) && isset($_POST["date"]) && isset($_POST['id_onglet'])) {

            $id_onglet = $_POST["id_onglet"];
            $date = $_POST['date'];

            $dbcontroller = new DBController();
            $date = mysqli_escape_string($dbcontroller->getConn(), $date);

            //on recupere les prio de l'onglet à la date demandé
            //avec une jointure pour recupere les données remontés
            $stmt = mysqli_prepare($dbcontroller->getConn(), "SELECT p.*, prio_synth.pilote, onglet.nom_onglet FROM prio as p LEFT JOIN prio_synth ON prio_synth.id_prio = p.id_prio_origin LEFT JOIN prio as pr ON p.id_prio_origin = pr.id_prio LEFT JOIN onglet ON pr.id_onglet = onglet.id_onglet WHERE p.dateid = ? AND p.id_onglet = ? ORDER BY p.position, p.id_prio");
            mysqli_stmt_bind_param($stmt, 'si', $date, $id_onglet);
            $data = $dbcontroller->executeSelectQueryMSQL($stmt);

            $k = 1;
            if ($data != "Aucune donnée à afficher !") {
                $priorite = '';
                

                //on s'occupe de l'affichage des prio des onglets
                $data = $this->utf8_converter($data);

                foreach ($data as $prio) {
                    $id_onglet = $prio['id_onglet'];
                    $id_prio = $prio['id_prio'];
                    $srcimg = "";
                    $img = "";

                    //on convertie le blob en php et on creer l'element avant de convertir le resultat en utf8, car sinon l'image est faussé 
                    if($data[0]['image_aide'] != NULL){
                        $img = '<img src="data:image/jpeg;base64,'.base64_encode($data[0]['image_aide'] ).'" data-img="true">';
                    }                    

                    //si la prio est remonté en synthese
                    if ($prio['remonte'] == 0) {
                        $srcimg = 'class="imgButtonCheckOnglet" src="Images/validation-black.png"';
                    } else {
                        $srcimg = 'class="imgButtonCheckedOnglet" src="Images/validation_t.png"';
                    }
                    //si la prio est remonte depuis une autre config
                    $Origin = "";
                    if ($prio['id_prio_origin'] == null) {
                        $fonctionSupprimer = "supprimerPrio('$id_onglet','$id_prio', this)";
                    } else {
                        $fonctionSupprimer = "supprimerPrioRemonte(" . $id_onglet . "," . $id_prio . ", " . $prio['id_prio_origin'] . ",this)";
                        $Origin = " : " . $prio['nom_onglet'] . " - " . $prio['pilote'];
                    }
                    // Affichage lorsqu'on enregistre la priorité
                    $priorite .= '<div class="prioDiv" data-id-prio="' . $id_prio . '" data-position="' . $k . '" data-id-onglet="' . $id_onglet . '"><label class="itemPrio labelPrio">';
                    $priorite .= '<img id="' . $id_onglet . 'imgCheckOnglet' . $id_prio . '" onclick="selectPrioOngletFenetre(' . $id_onglet . ',' . $id_prio . ', this)" ' . $srcimg . ' alt="Sélectionner la priorité">PRIORITÉ ' . $k . $Origin . '<img id="suppPrioBtn' . $id_prio . '" onclick="' . $fonctionSupprimer . '" class="imgButtonSuppPrio" src="Images/echec.png" alt="Supprimer la priorité"></label>';
                    $priorite .= '<textarea class="itemPrio textePrio" onkeyup="auto_grow(this)" onfocus="focus_grow(this)">' . $prio['texte'] . '</textarea></div>';
                    $priorite .= '</br></br><div id="imgAide" class="flexColumn"><label for="photoAideDetail">Ajouter une pièce jointe :</label><input type="file" id="photoAideDetail" name="photoAideDetail" accept="image/png, image/jpeg, image/jpg">' . $img . '</div>';
                    $k++;
                }

            }

            $dbcontroller->closeQuerySQL();
        }

        //ob_clean();
        return json_encode($priorite);
    }


je me dis que je dois passé le priorité sous forme d'un tableau mais je suis un peu perdu
0
jordane45 Messages postés 38182 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 mai 2024 4 670
Modifié le 29 juin 2022 à 10:03
Moi.. ce qui m'étonne c'est que...

Tu es dans la boucle
 foreach ($data as $prio) {

Donc.. que vient faire dedans ce code :
 //on convertie le blob en php et on creer l'element avant de convertir le resultat en utf8, car sinon l'image est faussé 
                    if($data[0]['image_aide'] != NULL){
                        $img = '<img src="data:image/jpeg;base64,'.base64_encode($data[0]['image_aide'] ).'" data-img="true">';
                    }  


ça devrait plutôt être
 //on convertie le blob en php et on creer l'element avant de convertir le resultat en utf8, car sinon l'image est faussé 
                    if($prio['image_aide'] != NULL){
                        $img = '<img src="data:image/jpeg;base64,'.base64_encode($prio['image_aide'] ).'" data-img="true">';
                    }  


Mais bon..retourne la variable $data et montre nous ce que ça donne dans la console..
function generationPriorite(){

 $data = " ";
 $priorite = 'vide';
        if (isset($_COOKIE["config"]) && isset($_POST["date"]) && isset($_POST['id_onglet'])) {

            $id_onglet = $_POST["id_onglet"];
            $date = $_POST['date'];

            $dbcontroller = new DBController();
            $date = mysqli_escape_string($dbcontroller->getConn(), $date);

            //on recupere les prio de l'onglet à la date demandé
            //avec une jointure pour recupere les données remontés
            $stmt = mysqli_prepare($dbcontroller->getConn(), "SELECT p.*, prio_synth.pilote, onglet.nom_onglet FROM prio as p LEFT JOIN prio_synth ON prio_synth.id_prio = p.id_prio_origin LEFT JOIN prio as pr ON p.id_prio_origin = pr.id_prio LEFT JOIN onglet ON pr.id_onglet = onglet.id_onglet WHERE p.dateid = ? AND p.id_onglet = ? ORDER BY p.position, p.id_prio");
            mysqli_stmt_bind_param($stmt, 'si', $date, $id_onglet);
            $data = $dbcontroller->executeSelectQueryMSQL($stmt);

            $k = 1;
            if ($data != "Aucune donnée à afficher !") {
                $priorite = '';
                
//------- >Histoire de voir ce que retourne comme données ta requête.. -----//
                return json_encode($data);
                exit;

                //on s'occupe de l'affichage des prio des onglets
                $data = $this->utf8_converter($data);
           
                
                foreach ($data as $prio) 
0
Nesil Messages postés 36 Date d'inscription mardi 21 juin 2022 Statut Membre Dernière intervention 19 juillet 2023
28 juin 2022 à 11:39
Bonjour,
Desole j'ai été pris par un autre projet en urgence, merci de ta réponse.

J'ai fait ce que tu m'as conseillé et j'ai affiché la variable data. Voila tout ce que j'obtiens :

- console :


- Network :


- ma page web :


Merci du temps que tu m'accordes. COncernant le changement de $data en $prio dans le foreach, quand je l'avait fait avant d'envoyer un message, j'obtenait une autres erreurs avec. J'ai préféré ne rien changer et voir ça plus tard.
0
jordane45 Messages postés 38182 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 mai 2024 4 670
28 juin 2022 à 11:55
Comme tu peux le voir, il n'y a aucune image dans data ... donc.. normal que ça ne t'en mette pas !
0

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

Posez votre question
Nesil Messages postés 36 Date d'inscription mardi 21 juin 2022 Statut Membre Dernière intervention 19 juillet 2023
28 juin 2022 à 14:18
C'est bien ca que je ne comprend pas, dans ma bdd il y'a bien un eimage qui s'enegistre pourtant



j'imagine que c'est au moment de l'afficher que cela ne marche pas. Mais je ne vois toujours pas ou intervenir
0
Nesil Messages postés 36 Date d'inscription mardi 21 juin 2022 Statut Membre Dernière intervention 19 juillet 2023
28 juin 2022 à 14:19
serait-ce ma requete le problème ?
0
jordane45 Messages postés 38182 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 mai 2024 4 670
28 juin 2022 à 14:24
Non... c'est ça ton problème
COncernant le changement de $data en $prio dans le foreach, quand je l'avait fait avant d'envoyer un message, j'obtenait une autres erreurs avec. J'ai préféré ne rien changer et voir ça plus tard.
0
Nesil Messages postés 36 Date d'inscription mardi 21 juin 2022 Statut Membre Dernière intervention 19 juillet 2023
28 juin 2022 à 15:43
Pourquoi le problème est dans le foreach sachant que on a vu avant avec ce que tu m'as dis d'ajouter que ma requete ne renvoyait pas d'image.

J'ai quand meme fait les modifications que tu m'as dis de faire dans le foreach, et rien ne change.

Voila a quoi ressemble le preview, c'est la seule chose qui me fait dire que ça ne marche pas :
0
Nesil Messages postés 36 Date d'inscription mardi 21 juin 2022 Statut Membre Dernière intervention 19 juillet 2023
28 juin 2022 à 15:47
Voila à quoi ressemble ma fonction generationPriorite en javascript qui au final l'endroit ou je pense qu'il y a un problème :

function genereFenetrePrio(dateid, id_onglet){

    console.log(87, dateid+"  "+id_onglet);
    $.ajax({
        cache:false,
        url: "data/generationPriorite",
        type: "POST",
        async: false,
        data: ({
            date : dateid,
            id_onglet : id_onglet,
        }),
        success:function(response, status){
            console.log(98, response);
            response = JSON.parse(response);
            console.log(100, response);
            //si il y a pas de prio on ajoute une div de prio vide avec le boutton d'ajout de prio
            if(response == "vide"){
                response = '<div class="text-center addPrio"><img src="Images/add-button.png" class="icoMenu" id="addPrio" onclick="addPrioFenetre()"></div>';
                document.getElementById("priorite").innerHTML = response;
                //on ajoute 3 prio vide
                addPrioFenetre();
                addPrioFenetre();
                addPrioFenetre();
                console.log(109, response);
            }else{
                //sinon on affiche les prio avec le boutton d'ajout des prio
                response += '<div class="text-center addPrio"><img src="Images/add-button.png" class="icoMenu" id="addPrio" onclick="addPrioFenetre()"></div>';
                document.getElementById("priorite").innerHTML = response;
                if(response[0]["image_aide"] != ""){
                    $("#imgAide").prepend(response[0]["image_aide"]);
                    $("#suppPhoto").show();
                }
                console.log(117, response);
            }
            console.log(118, response);

            var i = $('#priorite textarea').length;

        },
        error: function(response, status){
        }
    });
}
0
Nesil Messages postés 36 Date d'inscription mardi 21 juin 2022 Statut Membre Dernière intervention 19 juillet 2023
28 juin 2022 à 16:38
Le probleme vient spécifiquement de cette endroit de ma fonction :
response += '<div class="text-center addPrio"><img src="Images/add-button.png" class="icoMenu" id="addPrio" onclick="addPrioFenetre()"></div>';
                document.getElementById("priorite").innerHTML = response;
                if(response[0]["image_aide"] != ""){
                    console.log(115, response[0]["image_aide"]);
                    $("#imgAide").append(response[0]["image_aide"]);
                    $("#suppPhoto").show();
                }


car le console.log 115 me donne un "undifined". Et je ne sais pas par quoi le remplacer
0
jordane45 Messages postés 38182 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 mai 2024 4 670
28 juin 2022 à 17:50
Tu mélanges inutilement du "pure" js et du jquery
Tu écrases ta variables response ( qui est un JSON ) par du "text" ...
bref.. tu fais n'importe quoi...

Dans la console, tu nous a montré qu'il n'y avait aucune image
https://img-19.ccm2.net/RWpbK9V133srlfHq0nCIYLU7ENI=/e98871007edc4a6bbf3b1f25829cc56a/ccm-ugc/ure_decran_Network_2022-06-28_113239.jpg
pour l'id_prio 28360

Et dans ton autre capture, tu nous dis que tu as une image ...
https://img-19.ccm2.net/NzUZPKtjvZaZslRk0XkyaKqOBBY=/e46cddb1d1a94efdb61b4c8b1304ebf8/ccm-ugc/Capture_decran_2022-06-28_141705.jpg
Sauf que c'est l'id_prio 28367 ... donc pas le même id...

Donc.. on recommence ...

Comme tu persistes à ne pas mettre l'image dans la boucle tel que je te l'ai indiqué .. et que tu t'obstines à aller chercher la valeur de
$data[0]['image_aide']

.... et bien .. cette variable sera TOUJOURS NULL ... vu que c'est celle qui correspond à ton id 28360 ( qui n'a pas d'image)..
0
Nesil Messages postés 36 Date d'inscription mardi 21 juin 2022 Statut Membre Dernière intervention 19 juillet 2023
29 juin 2022 à 09:45
Bonjour,
Avant tout merci pour tes reponses.

Ensuite je suis novice et je recupère actuellement le code d'ancien alternant qui pour le coup, oui n'ont pas forcement fait les choses de manière optimisé. Mais je ne trouve pas ça agreable de recevoir comme réponse des critiques sur un code qui n'est pas le miens sachant que tout ce que je veux c'est apprendre.

Si les id ne correspondent pas, c'est parce que dans l'application il y a un système de remonté de la priorité au niveau superieur. Une priorité crée au niveau atelier va ainsi remonter au niveau departement. Et les anciens alternants ont fait le choix de dupliquer l'information dans la bdd a chaque fois qu'une prio est crée et remontée. Ce qui fait que j'ai toujours du mal à me reperer.

Et donc a chaque fois que je crée une priorité pour eviter de rester bloquer je l'a supprime en bdd pour pouvoir retester mon code. Voila ce que cela donne lorsque je crée une priorité et que j'affiche la bdd correspondante :

le network :



la bdd :



Donc oui, comme tu l'as dis on voit que les id ne correspondent pas. J'ai aussi remplacer depuis longtemps la ligne de code que tu m'as donné et lorsque je fais ça je ne recois plus aucune reponse :

ta ligne de code :

if($prio['image_aide'] != NULL){
                        $img = '<img src="data:image/jpeg;base64,'.base64_encode($data[0]['image_aide'] ).'" data-img="true">';
                    }  


le resultat dans le network :



J'ai donc remplacé le
$data[0]['image_aide'] 

en
$prio[0]['image_aide']


et la j'obtient le resultat montré plus haut.

Je ne persiste à rien du tout, mon objectif est rééllement de comprendre et de reussir à enfin passer cette étape. Donc désolé si je ne comprend pas ce que tu dis, mais je ne vois pas où tu m'as indiqué de mettre l'image dans la boucle car toutes les modifications que tu m'as dis de faire je les suis à la lettre. Du coup je ne comprend toujours pas quelle valeur dois-je aller chercher et que tu entends par "mettre l'image dans la boucle". Sachant que en plus, pour moi l'image est deja dans la boucle (peut etre que je n'ai juste pas compris ce que tu voulais dire) :

foreach ($data as $prio) {
                    $id_onglet = $prio['id_onglet'];
                    $id_prio = $prio['id_prio'];
                    $srcimg = "";
                    $img = "";

                    //on convertie le blob en php et on creer l'element avant de convertir le resultat en utf8, car sinon l'image est faussé 
                    if($prio['image_aide'] != NULL){
                        $img = '<img src="data:image/jpeg;base64,'.base64_encode($prio[0]['image_aide'] ).'" data-img="true">';
                    } 
//Suite du code


Voila encore une fois merci vraiment pour tes reponses qui m'ont aidé à avancer.
0
jordane45 Messages postés 38182 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 mai 2024 4 670
29 juin 2022 à 10:18
En fait, il faut remplacer
$data[0] par $prio (tout court) ..
if($prio['image_aide'] != NULL){
     $img = '<img src="data:image/jpeg;base64,'.base64_encode($prio['image_aide'] ).'" data-img="true">';
 } 


Par contre, dans ton JS ... tu sembles vouloir dissocier l'image du reste du html ?
Mais ce n'est pas possible ( tel que le code est fait).
Actuellement tu retournes juste UNE string ... (au format json) qui contient ton HTML ... et qui contient déjà l'image ..
L'image n'est pas séparée du reste de la réponse...

Suffit de regarder la réponse pour t'en rendre compte.

Au passage, pour éviter d'écraser les variables .... remplaces ton js par :

  function genereFenetrePrio(dateid, id_onglet) {

    console.log(87, dateid + "  " + id_onglet);
    $.ajax({
      cache: false,
      url: "data/generationPriorite",
      type: "POST",
      async: false,
      data: ({
        date: dateid,
        id_onglet: id_onglet,
      }),
      success: function (response, status) {
        console.log('reponse ajax prio', response);
        responseJson = JSON.parse(response);
       
        
        let html = "";
        
        if (responseJson == "vide") {
        //si il n'y a pas de prio on ajoute une div de prio vide avec le boutton d'ajout de prio
        html = '<div class="text-center addPrio"><img src="Images/add-button.png" class="icoMenu" id="addPrio" onclick="addPrioFenetre()"></div>';
          //on ajoute 3 prio vide
          addPrioFenetre();
          addPrioFenetre();
          addPrioFenetre();
           // console.log(109, html);
        } else {
          //sinon on affiche les prio avec le boutton d'ajout des prio
          html += '<div class="text-center addPrio"><img src="Images/add-button.png" class="icoMenu" id="addPrio" onclick="addPrioFenetre()"></div>';
        
          html += responseJson; // contient les données renvoyées par ton ajax.... 
          console.log('reponse ajax prio JSON', responseJson);
          
          /* -- response[0]["image_aide"].. n'existe pas... vu que c'est une STRING que tu renvois et non un objet..
           if(response[0]["image_aide"] != ""){
           $("#imgAide").prepend(response[0]["image_aide"]);
           $("#suppPhoto").show();
           }
           console.log(117, response);
           */
        }
        
        document.getElementById("priorite").innerHTML = html;
        var i = $('#priorite textarea').length; // tu t'en sers où après de ce "i" ?

      },
      error: function (response, status) {
        console.log('ERREUR AJAX', response);
      }
    });
  }
0
Nesil Messages postés 36 Date d'inscription mardi 21 juin 2022 Statut Membre Dernière intervention 19 juillet 2023
29 juin 2022 à 11:09
Merci beaucoup pour ta réponse.

Bon du coup j'ai modifié par ce que tu m'as dis de faire que ce soit dans mon handler et dans mon js. Et le problème avec ce code c'est que il suffit de le modifier pour que un rien puisse tout changer. ET en ajoutant ton code au js voila le resultat :



J'ai donc modifier un peu ton code et deplacé le :
document.getElementById("priorite").innerHTML = html;

dans les boucle if et else pour obtenir ce que j'avais initialement.

Ensuite je comprend tres bien ce que tu m'as dis vis a vis du js et du fait que la photo fait partie d'une string merci. Initialement mon but n'est pas de la séparé mais mon objectif etant d'afficher cette photo je pensais qu'il fallait explicitement indiquer à ma page de l'afficher.
Toujours est il que j'ai remplacé mon js par ce que tu m'as conseillé de faire, et le resultat est toujours le meme, on recupère la data où la photo est NULL:

le console :



la bdd :



l'interface :


J'ai donc imaginé 2 choses:

- j'essaye de recuperer la bonne donnée en mettant une condition du type if(id_onglet == 0) car c'est celle qui correspond a la donnée avec image.

- j'essaye d'inserer aussi l'image dans la variable ou l'id_onglet n'est pas nul ce que je pense etre la bonne solution mais encore faut il que j'y arrive

En tout vas, merci vraiment du temps que tu m'accordes. J'ai vraiment l'impression d'etre a cote de la plaque...
0
jordane45 Messages postés 38182 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 mai 2024 4 670
29 juin 2022 à 11:18
dans la console,
dans le console.log de reponse ajax_prio on ne voit qu'un seul résultat.
Hors, dans ta bdd, tu as deux lignes : une avec une image et une sans...
Il faut donc, côté php, récupérer la ligne que tu souhaite...

La fonction ->executeSelectQueryMSQL ne devant très certainement ne retourner qu'une seule ligne du résultat de la requête....
Il faudrait donc commencer par modifier ta requête SQL pour remonter LA ligne que tu veux...
0
Nesil Messages postés 36 Date d'inscription mardi 21 juin 2022 Statut Membre Dernière intervention 19 juillet 2023
29 juin 2022 à 16:20
Enfaite dans ma bdd, il est normal d'avoir 2 lignes différentes. Car l'une (celle sans phot enregistrée) va corespondre à la priorité au niveau atelier (le plus bas) tandis que l'autre va correspondre au niveau juste au dessus, soit le niveau departement.

Avec toutes tes indications je me suis donc demandé pourquoi la photo ne s'enregistrait pas dans la priorité initiale.
Et grace à tous nos messages, j'en suis arrivé à ma fonction sauvegarderPrioOngletFenetre. Et j'a juste decidé d'ajouter la photo à mon formulare sans prender en compte la fonction "$id_prio == 0".

Concretement je suis passé de ça :

function sauvegarderPrioOngletFenetre()
    {

        $response[0] = "erreur1";
        $response[1] = "erreur2";
        if (isset($_POST['id_prio']) && isset($_POST['texte'])) {
            
            $response[0] = "erreur3";
            $response[1] = "erreur4";

            $id_prio = $_POST['id_prio'];
            $id_onglet = $_POST['id_onglet'];
            $texte = $_POST['texte'];
            $_FILES = $_POST['image_aide'];
            $position = $_POST['position'];
            $dateid = $_POST['dateid'];
  
            $dbcontroller = new DBController();
            //si l'id prio est 0 donc c'est une nouvelle prio on fait un insert
            if ($id_prio == 0) {
                $remonte = 1;
                $stmt = mysqli_prepare($dbcontroller->getConn(), "INSERT INTO prio(dateid, texte, image_aide, position, id_onglet, remonte) VALUES (?, ?, ?, ?, ?, ?)");
                mysqli_stmt_bind_param($stmt, 'sssiii', $dateid, $texte, $_FILES $position, $id_onglet, $remonte);
                $data = $dbcontroller->executeQueryMSQL($stmt);
                //remonter ca au dessus de la ligne 703 ?
                $image_aide = "";
                $modifimg = "false";
                // ajout de l'image au formulaire

                if(isset($_FILES['photoAideDetail'])){
                    //var de l'image
                    $img = $_FILES['photoAideDetail']['name'];
                    $tmp = $_FILES['photoAideDetail']['tmp_name'];
    
                    
                    // Définition de la largeur et de la hauteur maximale
                    $width_max = 500;
                    $height_max = 500;
    
                    // Content type
                    if (exif_imagetype($tmp) == IMAGETYPE_JPEG) {
                        header('Content-Type: image/jpeg');
                    } else if (exif_imagetype($tmp) == IMAGETYPE_PNG) {
                        header('Content-Type: image/png');
                    } else if (exif_imagetype($tmp) == IMAGETYPE_JPG) {
                        header('Content-Type: image/jpg');
                    }
                    
                    // Cacul des nouvelles dimensions
                    list($width_orig, $height_orig) = getimagesize($tmp);
    
                    $ratio_orig = $width_orig/$height_orig;
    
                    if ($width_max/$height_max > $ratio_orig) {
                        $width_max = $height_max*$ratio_orig;
                    } else {
                        $height_max = $width_max/$ratio_orig;
                    }
    
                    // Redimensionnement
                    if (exif_imagetype($tmp) == IMAGETYPE_JPEG) {
                        $image = imagecreatefromjpeg($tmp);
                    } else if (exif_imagetype($tmp) == IMAGETYPE_PNG) {
                        $image = imagecreatefrompng($tmp);
                    } else if (exif_imagetype($tmp) == IMAGETYPE_JPG) {
                        $image = imagecreatefromjpg($tmp);
                    }
                    
                    $img = imagescale($image, 225);
                    imagejpeg($img, "../ImagesPrio/" . $img, 80);
                    
                    $image_aide = file_get_contents("../ImagesPrio/" . $img);
                    $modifimg = "true";
                }



                $id_prio_origin = $stmt->insert_id;
                
                if ($data) {
                    $response[0] = "Priorité sauvegardée !";

                    //on remonte une prio dans un autre onglet si necessaire
                    $stmt2 = mysqli_prepare($dbcontroller->getConn(), "SELECT * FROM onglet WHERE id_onglet = ?");
                    mysqli_stmt_bind_param($stmt2, 'i', $id_onglet);
                    $data2 = $dbcontroller->executeSelectQueryMSQL($stmt2);
                    
                    if($modifimg == "true"){
                        if ($data2) {
                            $ongletremonte = $data2[0]['id_remonte_onglet'];
                            $stmt3 = mysqli_prepare($dbcontroller->getConn(), "INSERT INTO prio(dateid, texte, image_aide, position, id_onglet, id_prio_origin, remonte) VALUES (?, ?, ?, ?, ?, ?, ?)");
                            mysqli_stmt_bind_param($stmt3, 'sssiiii', $dateid, $texte, $_FILES, $position, $ongletremonte, $id_prio_origin, $remonte);
                            $data3 = $dbcontroller->executeQueryMSQL($stmt3);
                            
                            if ($data3) {
                                $response[0] = "Priorité sauvegardée et remontée dans un autre onglet 1!";
                            }
                        }
                    }elseif($modifimg == "false"){
                        if ($data2) {
                            $ongletremonte = $data2[0]['id_remonte_onglet'];
                            $stmt3 = mysqli_prepare($dbcontroller->getConn(), "INSERT INTO prio(dateid, texte, image_aide, position, id_onglet, id_prio_origin, remonte) VALUES (?, ?, NULL, ?, ?, ?, ?)");
                            mysqli_stmt_bind_param($stmt3, 'ssiiii', $dateid, $texte, $position, $ongletremonte, $id_prio_origin, $remonte);
                            $data3 = $dbcontroller->executeQueryMSQL($stmt3);
                            
                            if ($data3) {
                                $response[0] = "Priorité sauvegardée et remontée dans un autre onglet 2!";
                            }
                        }
                    }
                } else {
                    $response[1] = "Priorité non sauvegardée !";
                }

            } else {
                if($modifimg == "true"){
                    $stmt4 = mysqli_prepare($dbcontroller->getConn(), "UPDATE prio SET texte = ?, image_aide = ?, position = ? WHERE id_prio = ?");
                    mysqli_stmt_bind_param($stmt4, 'ssii', $texte, $_FILES, $position, $id_prio);
                    $data4 = $dbcontroller->executeQueryMSQL($stmt4);

                    $stmt5 = mysqli_prepare($dbcontroller->getConn(), "UPDATE prio SET texte = ?, image_aide = ? WHERE id_prio_origin = ?");
                    mysqli_stmt_bind_param($stmt5, 'ssi', $texte, $_FILES, $id_prio);
                    $data5 = $dbcontroller->executeQueryMSQL($stmt5);

                    if ($data4) {
                        $response[0] = "Priorité mise à jour !";
                    } else {
                        $response[1] = "Priorité non mise à jour !";
                    }
                }elseif($modifimg == "false"){
                    $stmt4 = mysqli_prepare($dbcontroller->getConn(), "UPDATE prio SET texte = ?, position = ? WHERE id_prio = ?");
                    mysqli_stmt_bind_param($stmt4, 'sii', $texte, $position, $id_prio);
                    $data4 = $dbcontroller->executeQueryMSQL($stmt4);

                    $stmt5 = mysqli_prepare($dbcontroller->getConn(), "UPDATE prio SET texte = ?, WHERE id_prio_origin = ?");
                    mysqli_stmt_bind_param($stmt5, 'si', $texte, $id_prio);
                    $data5 = $dbcontroller->executeQueryMSQL($stmt5);

                    if ($data4) {
                        $response[0] = "Priorité mise à jour !";
                    } else {
                        $response[1] = "Priorité non mise à jour !";
                    }
                }
            }
        } 
        //ob_clean();
        return json_encode($response);
    }


à ca :

// ce que j'ai modifié

 $id_prio = $_POST['id_prio'];
            $id_onglet = $_POST['id_onglet'];
            $texte = $_POST['texte'];
            $position = $_POST['position'];
            $dateid = $_POST['dateid'];
            $image_aide = "";
            $modifimg = "false";
            // ajout de l'image au formulaire

            if(isset($_FILES['photoAideDetail'])){
                //var de l'image
                $img = $_FILES['photoAideDetail']['name'];
                $tmp = $_FILES['photoAideDetail']['tmp_name'];

                
                // Définition de la largeur et de la hauteur maximale
                $width_max = 500;
                $height_max = 500;

                // Content type
                if (exif_imagetype($tmp) == IMAGETYPE_JPEG) {
                    header('Content-Type: image/jpeg');
                } else if (exif_imagetype($tmp) == IMAGETYPE_PNG) {
                    header('Content-Type: image/png');
                } else if (exif_imagetype($tmp) == IMAGETYPE_JPG) {
                    header('Content-Type: image/jpg');
                }
                
                // Cacul des nouvelles dimensions
                list($width_orig, $height_orig) = getimagesize($tmp);

                $ratio_orig = $width_orig/$height_orig;

                if ($width_max/$height_max > $ratio_orig) {
                    $width_max = $height_max*$ratio_orig;
                } else {
                    $height_max = $width_max/$ratio_orig;
                }

                // Redimensionnement
                if (exif_imagetype($tmp) == IMAGETYPE_JPEG) {
                    $image = imagecreatefromjpeg($tmp);
                } else if (exif_imagetype($tmp) == IMAGETYPE_PNG) {
                    $image = imagecreatefrompng($tmp);
                } else if (exif_imagetype($tmp) == IMAGETYPE_JPG) {
                    $image = imagecreatefromjpg($tmp);
                }
                
                $img = imagescale($image, 225);
                imagejpeg($img, "../ImagesPrio/" . $img, 80);
                
                $image_aide = file_get_contents("../ImagesPrio/" . $img);
                $modifimg = "true";
            }
  
            $dbcontroller = new DBController();
            //si l'id prio est 0 donc c'est une nouvelle prio on fait un insert

if ($id_prio == 0) {
$remonte = 1;

$stmt = mysqli_prepare($dbcontroller->getConn(), "INSERT INTO prio(dateid, texte, image_aide, position, id_onglet, remonte) VALUES (?, ?, ?, ?, ?, ?)");
mysqli_stmt_bind_param($stmt, 'sssiii', $dateid, $texte, $_FILES, $position, $id_onglet, $remonte);
$data = $dbcontroller->executeQueryMSQL($stmt);
//remonter ca au dessus de la ligne 703 ?


$id_prio_origin = $stmt->insert_id;
</code>

Et mtn j'arrive à ça dans ma bdd :


Donc j'ai resolu ce problème la

Mais maintenant j'ai un autre problème qui est tout simplement le contenu de se blob. J'ai verifié ça un peu plus tot, mais mon blob ne contient que le mot "Array" et non un message codé qui traduit une photo.

En temoigne la capture de la console :



Juste pour ettayer ça, voila a quoi ressemble mon interface :


Donc la je cherche a savoir comment remplir mon blob. Si je dois ouvrir un autre topic dites le moi.
En tout cas, dans un premier temps merci de ton aide
0
jordane45 Messages postés 38182 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 mai 2024 4 670
29 juin 2022 à 16:35
1
Nesil Messages postés 36 Date d'inscription mardi 21 juin 2022 Statut Membre Dernière intervention 19 juillet 2023 > jordane45 Messages postés 38182 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 mai 2024
29 juin 2022 à 16:48
Merci haha.
Ma question etait plus pour savoir si je devais mettre ce topic comme résolu.
Je suis déjà en train de chercher de mon coté merci
0
jordane45 Messages postés 38182 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 mai 2024 4 670 > Nesil Messages postés 36 Date d'inscription mardi 21 juin 2022 Statut Membre Dernière intervention 19 juillet 2023
29 juin 2022 à 16:53
Par contre ... il est fortement déconseillé de stocker des images (ou des fichiers) directement en bdd
A la place, on la stocke dans un dossier du serveur et on stocke, dans la bdd, le chemin vers celle-ci.

Pourquoi ? par ce que la place dispo dans une bdd est en général plus faible que la place dispo pour les fichiers du site... et ça risque d'alourdir ( et donc de ralentir..) la base de données inutilement.
0