Photo verticale ne s'affiche pas
Résolujordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
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
- Photo verticale ne s'affiche pas
- Google photo - Télécharger - Albums photo
- Google maps photo maison - Guide
- Photo filtre 7 gratuit - Télécharger - Retouche d'image
- Partage photo - Guide
- Messenger photo ne s'affiche pas - Forum Facebook Messenger
1 réponse
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];
.
merci beaucoup.
Mon problème est resolue. Cela venait de ma bdd, j'ai juste changé le type blob de ma variable en longblob
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 ..