Photo verticale ne s'affiche pas

Résolu/Fermé
Nesil - 21 sept. 2022 à 10:18
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 - 21 sept. 2022 à 16:42

Bonjour,

J'ai une application qui permet d'enregistrer et d'afficher une image. Je redéfinis la taille dans mon php pour ne pas avoir beaucoup de données dans ma bdd. Mais lorsque l'image est verticale, elle ne s'enregistre pas. Et quand je lis mon code, je ne comprends pas pourquoi? Je pense que cela viens surement de mon redimensionnement.

voici ma fonction PHP :

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'];
        $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 = 50000;

            $height_max = 50000;

            // 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, 750);
            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, $image_aide, $position, $id_onglet, $remonte);
            $data = $dbcontroller->executeQueryMSQL($stmt);

            $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, $image_aide, $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";
            }
    } 
    //ob_clean();
    return json_encode($response);
}

Et voici mon JavaScript associé :

function sauvegarderPrioOngletFenetre(){
//pour charque prio on recupere l'id et le text à inserer en bdd
$("#priorite").find('.prioDiv').each(function() {

    var id_prio = $(this).data("id-prio");
    var id_onglet = $(this).data("id-onglet");
    if(id_onglet == ""){
        id_onglet = document.getElementById("idOG").value;
    }
    var position = $(this).data("position");
    var week = $("#semainePrio").text();
    var jour = $("#selectJourPrio").val();
    var dateid = week + "-D" + jour;
    //A changer pour le pilote
    var texte = "";
    //recupere le texte de la prio
    $(this).find("textarea").each(function() {
       texte = $(this).val();
    });
    //si la prio est vide on la sauvegarde pas
    vide = texte.replace(/\s/g, "");
    if(vide == ""){

    }else{         
        // Methode ajout dans tableau
            var l = new FormData();
            l.append('id_prio',id_prio);
            l.append('texte',texte);
            l.append('position',position);
            l.append('id_onglet',id_onglet);
            l.append('dateid',dateid);
            
            if (document.getElementById(`photoAideDetail${position}`).files.length > 0) {
                l.append('photoAideDetail', jQuery(`#photoAideDetail${position}`)[0].files[0]);

                // jQuery.each(jQuery(`#photoAideDetail${position}`)[0].files, function (i, file) {
                //     l.append('photoAideDetail', file);
                // });
            }


        $.ajax({
            cache:false,
            url: "data/sauvegarderPrioOngletFenetre",
            type: "POST",
            async: false,
            data: l,
            processData: false,
            contentType: false,
            success:function(response, status){
                 console.log(65, response);
                 console.log(66, l.append('photoAideDetail',jQuery(`#photoAideDetail${position}`)));
                 response = JSON.parse(response);  
                if(response[0] == "erreur1" && response[1] == "erreur2"){
                    erreur('Une erreur est survenu lors de la sauvegarde!');
                }else{
                    if(response[0] == "erreur1"){
                        erreur(response[1]);
                    }else{
                        reussite(response[0]);
                    }
                }
            },
            error: function(response, status){
            }
        });
    }

});

et dans ma console, cela me montre:

65 '["erreur3","Priorit\u00e9 non sauvegard\u00e9e"]'

and 66 undefined

Merci beaucoup
Windows / Chrome 105.0.0.0

A voir également:

1 réponse

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
21 sept. 2022 à 11:11

Bonjour,

Vu que tu obtiens le message

      $response[1] = "Priorité non sauvegardée";

qui se trouve dans le else du if : 

 if ($data) {

Il faudrait voir pourquoi cette variable n'est pas créée (et renseignée..)

Donc, ajouter une gestion d'erreur sur l'exécution de la requête

$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, $image_aide, $position, $id_onglet, $remonte);
$data = $dbcontroller->executeQueryMSQL($stmt);

(en ajoutant un mysqli_error )

https://www.w3schools.com/php/func_mysqli_error.asp

et éventuellement, faire un echo des variables que tu transmets à ta requête.

NB : => tu peux retourner les différentes infos dans response, par exemple

$response["debug"]['errorSql'] = mysqli_error($dbcontroller->getConn()); 
$response["debug"]["variables_requete"] = [ $dateid, $texte, $image_aide, $position, $id_onglet, $remonte];

.


0

merci beaucoup.

Mon problème est resolue. Cela venait de ma bdd, j'ai juste changé le type blob de ma variable en longblob

0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650 > Nesil
21 sept. 2022 à 16:42

A noter qu'il est fortement déconseillé de stocker des fichiers directement dans une BDD.

A la place, on la met dans un dossier du serveur, et en bdd, on ne stocke que son chemin.

SInon tu vas vite remplir ta bdd et la ralentir ..

0