Page 1 sur 1

Upload de fichier UploadHandler, affichage Json du nom du nouveau fichier téléchargé après téléchargement ok

Posté : 11 avr. 2025, 21:01
par petite fée
Bonjour !

Je travaille avec l'UploadHandler bien connu de github

il fonctionnait bien avant le passage en php 8.1

les fichiers s'upload bien, mais je n'arrive pas à avoir l'affichage du résultat avec le nom du fichier téléchargé.
j'arrive à afficher "fichier téléchargé" mais il faut recharger la page pour le voir.

J'ai mis en place une console de débuggage, et je reçois le contenu du Json ainsi (j'ai remplacé mon lien par xxx):

Code : Tout sélectionner

"{"files":[{"name":"testb (8).jpg","size":890876,"type":"image\/jpeg","table_concernee":"employe","id_cible":"679","url":"..\/xxx\/server\/php\/files\/testb (8).jpg","thumbnailUrl":"https:\/\/xxx\/server\/php\/files\/thumbnail\/testb%20%288%29.jpg","deleteUrl":"https:\/\/xxx\/server\/php\/index.php?file=testb%20%288%29.jpg&_method=DELETE","deleteType":"POST","id":127}]}"
mon upload se nomme "testb.jpg" et je vois que je le reçois bien.

voici un bout de mon code pour afficher, je pense que le problème vient de par là :

Code : Tout sélectionner

$('#fileupload').fileupload({ url: url, dataType: 'json', done: function (e, data) { // Vérification de la réponse console.log(data.result); // Pour déboguer la réponse var resultData = typeof data.result === 'string' ? JSON.parse(data.result) : data.result; if (data.result && data.result.files) { // Vider le contenu précédent si nécessaire $('#monload').empty(); $.each(data.result.files, function (index, file) { // Créer un lien pour le fichier var $link = $('<br /><a />').attr({ href: file.url, target: '_blank' }).text(file.name); <?php /* $affiche_pj = $client->query("SELECT * FROM fichiers ORDER BY id DESC LIMIT 1"); $row_affiche_pj = $affiche_pj->fetch_assoc();*/ ?>$('#monload').append($link).html('Télechargement OK - mettre à jour pour voir la liste'); }); } else { console.error("Erreur : la réponse ne contient pas de fichiers."); }
j'essaye d'afficher le lien $link, mais la seule chose que j'affiche c'est mon texte "Télechargement OK ..."
impossible de passer file.name.
si je met seulement $('#monload').append($link); j'ai juste le retour ligne <br>
j'ai même essayé de feinter en affichant les résultats de la bdd (en commentaire ici), mais ça ne m'affiche pas le dernier enregistrement, bien qu'il soit correctement présent dans la base. J'ai l'impression que ce code affiche le résultat avant l'insertion. Bref, ça ne serait pas propre de toute façon.

Auriez-vous une idée de ce qui cloche ?

J'ai essayé de faire corriger mon code par l'IA mais l'upload ne fonctionne plus du tout avec les solutions proposées....
:shock:
merci de votre aide, je patauge depuis plusieurs jours...

Re: Upload de fichier UploadHandler, affichage Json du nom du nouveau fichier téléchargé après téléchargement ok

Posté : 16 avr. 2025, 20:28
par two3d
Salut, $('<br /><a />') me semble pas correct, la création d'élément se fait un par un, pas deux ni plusieurs. La solution serait : $('<a/>') ou $('<a></a>')

https://learn.jquery.com/using-jquery-c ... w-elements

Si toute fois tu as besoin d 'ajouter un saut de ligne, ajoute le avant ton append($link) :

Code : Tout sélectionner

$('#monload').append('<br>').append($link)...

Re: Upload de fichier UploadHandler, affichage Json du nom du nouveau fichier téléchargé après téléchargement ok

Posté : 19 mai 2025, 12:22
par petite fée
Merci de ton aide two3d,

j'ai mis ce souci de côté et je n'avais pas vu ta réponse !
malheureusement cela ne fonctionne pas mieux.

sans le <br> je vois seulement la notification "Télechargement OK - mettre à jour pour voir la liste"

qui vient de là :
$('#monload').append($link).html('Télechargement OK - mettre à jour pour voir la liste');

var $link = $('<a/>').attr({ href: file.url, target: '_blank' }).text(file.name); renvoie la même chose,
et var $link = $('<a><a/>').attr({ href: file.url, target: '_blank' }).text(file.name); ne renvoie rien, même pas mon message.

ça fonctionnait avec la version précédente de php

Re: Upload de fichier UploadHandler, affichage Json du nom du nouveau fichier téléchargé après téléchargement ok

Posté : 19 mai 2025, 13:22
par two3d
Tu peux insérer ton lien directement :

Code : Tout sélectionner

$('#monload').html(`Télechargement OK - mettre à jour pour voir la liste <br> <a href="${file.url}" target="_blank">${file.name}</a>`); //mais il te faudrait voir si file.url et name existe également, elle est peut être là l'erreur.

Re: Upload de fichier UploadHandler, affichage Json du nom du nouveau fichier téléchargé après téléchargement ok

Posté : 19 mai 2025, 14:19
par petite fée
Oh !! ça fonctionne !! merci beaucoup, VRAIMENT !

Re: Upload de fichier UploadHandler, affichage Json du nom du nouveau fichier téléchargé après téléchargement ok

Posté : 19 mai 2025, 15:11
par two3d
Et hop, résolu ! :D Content que ça fonctionne !

Re: Upload de fichier UploadHandler, affichage Json du nom du nouveau fichier téléchargé après téléchargement ok

Posté : 19 mai 2025, 15:40
par petite fée
Merci two3d

j'ai une dernière question... quand il y a plusieurs pièces jointes uploadées en même temps, le lien du dernier remplace le précédent. En clair, le div qui renvoie le résultat s'éfface pour chaque upload, ce qui crée une confusion.

J'ai tenté d'ajouter un code du type $n=0, while ($n<10){ ?> $('#load_pj<?php echo $n; ?>').html( ... <?php $n++; ] ?>
et aussi d'enlever le $('#load_pj').empty();
et en mettant évidemment côté page qui reçoit un echo"<div id='load_pj<?php echo $n; ?>'></div>";
mais ça ne fonctionne pas...

pourtant je vois bien $.each(data.result.files, function (index, file) { qui me laisse penser qu'il devrait créer une réponse pour chaque fichier ?

Re: Upload de fichier UploadHandler, affichage Json du nom du nouveau fichier téléchargé après téléchargement ok

Posté : 19 mai 2025, 20:55
par two3d
Si tu vois bien " $.each(data.result.files, function (index, file) { ..." utilise le, crée des div à la volée. PHP avec JS ne fonctionnera jamais car PHP est figé une fois la page affichée, tant dis que JS est dynamique après le chargement de la page.

Re: Upload de fichier UploadHandler, affichage Json du nom du nouveau fichier téléchargé après téléchargement ok

Posté : 20 mai 2025, 10:21
par petite fée
Alors je ne sais pas faire ça... je suis plus à l'aise en php !

Il n'y a pas un truc comme variable[] ?
je ne sais aps comment gérer le each en javascript.

Code : Tout sélectionner

if (data.result && data.result.files) { // Vider le contenu précédent si nécessaire $('#load_pj').empty(); $.each(data.result.files, function (index, file) { // Créer un lien pour le fichier const countUntil = 10; let i = 0; while (i++ < countUntil) { var $link = $('<a/>').attr({ href: file.url, target: '_blank' }).text(file.name); $('#load_pj'+i+).html(`  <img src="images/ok.png" width="13" height="13" /><a href="${file.url}" target="_blank"> ${file.name}</a>`); } });
mais il y a un truc qui cloche, c'est le each : je fais la boucle avant ?
si je fais une boucle dans le each, à quel moment je dois la mettre ?

je ne sais pas comment m'y prendre :(

Re: Upload de fichier UploadHandler, affichage Json du nom du nouveau fichier téléchargé après téléchargement ok

Posté : 20 mai 2025, 10:29
par two3d
L'idée serait d'avoir une div où tu recevra tes fichiers uploadés et de les y afficher à la volé :

Code : Tout sélectionner

$.each(data.result.files, function (index, file) { // Créer dynamiquement un div et y insérer le lien const $container = $('<div/>').addClass('file-link'); const $icon = $('<img/>', { src: 'images/ok.png', width: 13, height: 13 }); const $link = $('<a/>', { href: file.url, target: '_blank', text: ' ' + file.name }); // Ajouter l'image et le lien au div $container.append($icon).append($link); // Ajouter ce div dans un conteneur existant $('#pj_container').append($container); });
La div HTML :

Code : Tout sélectionner

<div id="pj_container"></div>

Re: Upload de fichier UploadHandler, affichage Json du nom du nouveau fichier téléchargé après téléchargement ok

Posté : 20 mai 2025, 11:28
par petite fée
Merci Steve ! ça fonctionne parfaitement !

Re: Upload de fichier UploadHandler, affichage Json du nom du nouveau fichier téléchargé après téléchargement ok

Posté : 21 mai 2025, 11:34
par two3d
Parfait, tu peux passer en résolu :)