Php et téléchargement

gboul - 29 juin 2015 à 12:28
gboul Messages postés 12 Date d'inscription samedi 14 juin 2008 Statut Membre Dernière intervention 3 juillet 2015 - 3 juil. 2015 à 20:08
Bonjour,
Je me suis créé à chez un serveur web qui me permet de pouvoir à accès à mes fichiers lorsque je suis en déplacement.
Ceci fonctionnait très bien, mais il était nécessaire de connaître le lien par coeur pour pouvoir avoir accès à ces fichiers.
De ce fait, j'ai décidé de me faire un script de téléchargement afin de pouvoir récupérer un certain nombre d'informations et les entrer dans une base SQL lors du téléchargement du fichier, ce qui fonctionne très bien.
Depuis peu, j'ai voulu mettre une barre d'avancement du téléchargement, car ça pouvait être assez long et je veux savoir où en est le téléchargement.
Depuis, je n'arrive plus du tout à télécharger et même commencer le téléchargement. Pourriez-vous m'aider à identifier où se situe le problème?

La première partie du script, qui est en PHP est la partie qui permet de mettre la barre d'avancement ainsi que le lancement d'un script secondaire (up-script.php) qui permettra de rentrer les données dans la base SQL.
La seconde partie, qui est en HTML, permet de faire la mise en page de la page web, qui est rudimentaire, mais suffisante. Il s'agit d'une page qui affiche, le résumé du fichier qui est à rentrer, le fichier qu'il faut télécharger (grâce à un bouton "Parcourir"), la barre d'avancement du téléchargement, des coches qui permettent de déterminer le type de fichier et enfin, le bouton envoi (qui devrait lancer la fonction uploadFichier).
Dans ce script, je récupère les valeurs des coches que j'ai mises, le nom du fichier et le fichier. Je mets tout ça dans le paramètre data et si aucun problème ne survient, je l'envoi au script up-script.php, qui est un fichier séparé dans le même répertoire.

Mon problème est que lorsque j'appui sur le bouton envoyer, rien ne se passe et je n'arrive pas à comprendre pourquoi. L'autre problème, c'est que j'ai fait ce script il y a déjà quelques mois et je viens de m'y replonger, donc il pourrait y avoir certains détails dont je ne me souviens plus. Désolé si c'est le cas.

J'ai aussi ajouté la ligne "set_time_limit(0);" car je n'arrivais pas à envoyer de gros fichiers, donc c'était un test que je n'ai jamais réussi à faire!

Merci beaucoup pour votre aide et voici le script ci-dessous.


<title>Upload de fichier</title>
<html lang="fr">
<meta charset="UTF-8" />
<script>
// long t0 = System.currentTimeMillis();
var uploader = document.getElementById('uploader');



function _(elmt){
return document.getElementById(elmt);
}

function uploadFichier(){
var file = _('file').files[0];
var nom = _('nom');
var choix1 = _('choix1');
var choix2 = _('choix2');
var choix3 = _('choix3');
var choix4 = _('choix4');
var choix5 = _('choix5');
var choix6 = _('choix6');
var choix7 = _('choix7');
var choix8 = _('choix8');
var choix9 = _('choix9');
var choix10 = _('choix10');
var choix11 = _('choix11');
var choix12 = _('choix12');

var data = new FormData();
data.append('file', file, nom, choix1, choix2, choix3, choix4, choix5, choix6, choix7, choix8, choix9, choix10, choix11, choix12);
set_time_limit(0);

var ajax = new XMLHttpRequest();
ajax.upload.addEventListener("progress", progressHandler, false);
ajax.addEventListener("load", completeHandler, false);
ajax.addEventListener("error", errorHandler, false);
ajax.addEventListener("abort", abortHandler, false);
ajax.open("POST", "up-script.php");
ajax.send(data);
}

function progressHandler(event){
_('status_bytes').innerHTML = event.loaded + ' bytes uploadés sur ' + event.total;
var pourcentage = (event.loaded / event.total) * 100;
_('progressBar').value = Math.round(pourcentage);
_('status').innerHTML = Math.round(pourcentage) + '% uploadé - Patientez...';
}
function completeHandler(event){
_('status').innerHTML = event.target.responseText;
_('progressBar').value = 0;
}
function errorHandler(){
_('status').innerHTML = "L'upload a échoué!";
}
function abortHandler(){
_('status').innerHTML = "L'upload a ´té annulé!";
}

</script>


<body>
<form name="formulaire" method="post" enctype="multipart/form-data">
<p style="text-align: center;">Upload d'un fichier</p>
<p style="text-align: center;"> </p>
<p style="text-align: center;"><!-- Le contenu du formulaire est Ã*lacer ici... --></p>
<p style="text-align: center;"><!-- Ajouter le nom du fichier --></p>
<p style="text-align: center;">Résumé du contenu (pas du fichier) <input name="nom" size="50" type="textbox" /></p>
<p style="text-align: center;"><!-- Permet de séctionner un fichier --></p>
<p style="text-align: center;">Séléctionnez votre fichier <input name="file" type="file" id="file" /></p>
<p style="text-align: center;">
<progress id="progressBar" value="0" max="100"></progress>
</p>

<style="text-align: center;">
<h2 id="status"></h2></p>
<style="text-align: center;">
<p id="status_bytes"></p>
<style="text-align: center;">
<p id="status_speed"></p>

<p style="text-align: center;"><input name="MAX_FILE_SIZE" type="hidden" value="1500000000" /></p>
<p style="text-align: center;">Séléctionner le type de fichiers</p>
<p style="text-align: center;"><input name="choix1" type="checkbox" /> .doc <input name="choix2" type="checkbox" /> .docx <input name="choix3" type="checkbox" /> .xls</p>
<p style="text-align: center;"><input name="choix4" type="checkbox" /> .xlsx <input name="choix5" type="checkbox" /> .ppt <input name="choix6" type="checkbox" /> .pptx</p>
<p style="text-align: center;"><input name="choix7" type="checkbox" /> .pps <input name="choix8" type="checkbox" /> .ppsx <input name="choix9" type="checkbox" /> CAD</p>
<p style="text-align: center;"><input name="choix10" type="checkbox" /> Outlook(.sdb) <input name="choix11" type="checkbox" /> Outlook(.mdb) <input name="choix12" type="checkbox" /> .zip </p>
<p style="text-align: center;"><!-- Bouton Envoyer --></p>
<p style="text-align: center;"><input name="envoyer" type="button" value="Envoyer le fichier" onclick="uploadFichier()"/></p>
</form>
</p>
</body>
</html>

4 réponses

@karamel Messages postés 1855 Date d'inscription vendredi 9 mai 2008 Statut Modérateur Dernière intervention 18 avril 2024 153
Modifié par kazma le 29/06/2015 à 13:31
bonjour

a mon avis
c'est le upload qui sert a rien

ajax.upload.addEventListener("progress", progressHandler, false); 


ajax.addEventListener("progress", progressHandler, false); 




rien ne sert de courir il faut partir a point.
cours Forest cours !
0
gboul Messages postés 12 Date d'inscription samedi 14 juin 2008 Statut Membre Dernière intervention 3 juillet 2015
29 juin 2015 à 18:43
Merci beaucoup pour ta réponse.

Malgré cela, il semblerait que ça ne fonctionne pas. C'est frustrant!
0
@karamel Messages postés 1855 Date d'inscription vendredi 9 mai 2008 Statut Modérateur Dernière intervention 18 avril 2024 153
Modifié par kazma le 30/06/2015 à 10:17
et tu dit que avant de mettre la fonction de prechargement cela fonctionnais

rien ne sert de courir il faut partir a point.
cours Forest cours !
0
gboul Messages postés 12 Date d'inscription samedi 14 juin 2008 Statut Membre Dernière intervention 3 juillet 2015
30 juin 2015 à 20:42
En fait, avant que j'ajoute la partie concernant la progress bar, c'est à dire la partie php, je pouvais uploader les fichiers, mais je ne pouvais pas uploader les gros fichiers. D'où l'ajout de la progress bar. Et il me semble, que lorsque je l'ai ajouté, ça fonctionnait bien, il me semble (car ça fait plusieurs mois que je n'ai plus touché à ce script). Mais je n'arrive plus à trouver à partir de quand ça ne fonctionnait plus.
0
@karamel Messages postés 1855 Date d'inscription vendredi 9 mai 2008 Statut Modérateur Dernière intervention 18 avril 2024 153
Modifié par kazma le 1/07/2015 à 11:40
et du coté serveur tu a regardé la valeur de configuration pour la taille des fichier a telecharger en php c'est upload_max_filesize

et j'ai aussi des doutes quand a l'utilisation de FormData
0
gboul Messages postés 12 Date d'inscription samedi 14 juin 2008 Statut Membre Dernière intervention 3 juillet 2015 > @karamel Messages postés 1855 Date d'inscription vendredi 9 mai 2008 Statut Modérateur Dernière intervention 18 avril 2024
1 juil. 2015 à 18:12
En fait, je viens de refaire tout le script en le testant petit à petit.
Tout fonctionne bien jusqu'à ce que j'ajoute les lignes ci-après. Je pense que j'ai dû faire une erreur de syntaxe. J'essaye de récupérer les valeurs des cases à cocher. Mais du coup, comment dois-je écrire ce lignes? Si tu as une idée, je suis ouvert à toute proposition.

            
var nom = _('nom');
var choix1 = _('choix1');
var choix2 = _('choix2');
var choix3 = _('choix3');
var choix4 = _('choix4');
var choix5 = _('choix5');
var choix6 = _('choix6');
var choix7 = _('choix7');
var choix8 = _('choix8');
var choix9 = _('choix9');
var choix10 = _('choix10');
var choix11 = _('choix11');
var choix12 = _('choix12');
0
gboul Messages postés 12 Date d'inscription samedi 14 juin 2008 Statut Membre Dernière intervention 3 juillet 2015 > @karamel Messages postés 1855 Date d'inscription vendredi 9 mai 2008 Statut Modérateur Dernière intervention 18 avril 2024
1 juil. 2015 à 18:13
Du coté des tailles de fichier, oui, j'ai regardé coté serveur et j'ai mis une taille de plusieurs dizaines de Go.
0
@karamel Messages postés 1855 Date d'inscription vendredi 9 mai 2008 Statut Modérateur Dernière intervention 18 avril 2024 153
Modifié par kazma le 1/07/2015 à 19:40
je'ai mis un lien qui parle justement de ton cas et pour moi il suffit de remplacer

var file = _('file').files[0];
                        var nom = _('nom');
                        var choix1 = _('choix1');
                        var choix2 = _('choix2');
                        var choix3 = _('choix3');
                        var choix4 = _('choix4');
                        var choix5 = _('choix5');
                        var choix6 = _('choix6');
                        var choix7 = _('choix7');
                        var choix8 = _('choix8');
                        var choix9 = _('choix9');
                        var choix10 = _('choix10');
                        var choix11 = _('choix11');
                       var choix12 = _('choix12');
 
                        var data = new FormData();
                        data.append('file', file, nom, choix1, choix2, choix3, choix4, choix5, choix6, choix7, choix8, choix9, choix10, choix11, choix12);                    


par

var data = new FormData(document.forms.namedItem("formulaire"));



rien ne sert de courir il faut partir a point.
cours Forest cours !
0
gboul Messages postés 12 Date d'inscription samedi 14 juin 2008 Statut Membre Dernière intervention 3 juillet 2015
1 juil. 2015 à 21:45
Merci Kazma,
J'ai tenté ta solution, mais la valeur qui en ressort est [Object FormData]. Je m'attendais à avoir True ou False en fonction de si la checkbox a été cochée ou non.
Donc à priori ça ne marche pas non plus.

J'ai tenté avec
foreach($_POST['choix'] as $valeur)
en renommant les checkbox en name="choix[]"
Mais ici aussi, je n'y suis pas arrivé, mais peut-être ai-je eu une mauvaise écriture des fonctions. mais j'essaye encore dans cette voie, ça me paraît être une solution pas mal.
0
@karamel Messages postés 1855 Date d'inscription vendredi 9 mai 2008 Statut Modérateur Dernière intervention 18 avril 2024 153
Modifié par kazma le 2/07/2015 à 18:01
y'a un truc que j'avait pas vue tu utilise getElementByid alors que les elements du formulaire utilises des nom et pas des id il faudrait leurs donner des id a la place de name puis il y a aussi l'utilisation de append qui est mauvaise on ne peut ajouter une seule paire a la fois et le probleme c'est que tu les ajoutes tous en une fois, tu omet aussi le value pour la valeur de l'input text et checked pour les boutons

sa doit ressemble a ceci


var file = _('file').files[0];

                        var nom = _('nom').value;
                        var choix1 = _('choix1').checked;
                        var choix2= _('choix2').checked ;
                        var choix3= _('choix3').checked ;
                        
 
                        var data = new FormData();
                         data.append('file', file, nom);
                         data.append('nom', choix1)
                         data.append('nom', choix2)
                         data.append('nom', choix3)


ily a un truc par contre dont je ne suis pas sur c'est que checked renverra true ou false mais pas sur que cette valeur arrive au serveur

rien ne sert de courir il faut partir a point.
cours Forest cours !
0
gboul Messages postés 12 Date d'inscription samedi 14 juin 2008 Statut Membre Dernière intervention 3 juillet 2015
3 juil. 2015 à 20:08
Merci Kazma,
Je n'ai pas réussi à faire fonctionner ce que tu m'as préconisé.
Comme dit, c'est probablement le .checked qui pose problème.

Ceci dit, j'ai continué mes recherche et il pourrait peut-être y avoir quelque chose qui pourrait fonctionner. c'est la fonction foreach. Qui devrait balayer toutes les checkbox et récupérer leurs valeurs.



foreach($_POST['choix'] as $variable){
data.append("$variable");
}


Afin que cela fonctionne, j'ai modifié le nome des checkbox comme suit.
Cependant, il semblerait que la fonction foreach n'existe pas en ajax et du coup, ça ne fonctionne pas. J'ai donc fait d'autres recherche et il semblerait qu'il faille utiliser la fonction $.each, mais je n'ai pas encore réussi à trouver une typographie claire. Donc si jamais quelqu'un l'a, je sui preneur.


<p style="text-align: center;"><input name="MAX_FILE_SIZE" type="hidden" value="1500000000" /></p>
<p style="text-align: center;">Séléctionner le type de fichiers</p>
<p style="text-align: center;"><input name="choix[]" type="checkbox" /> .doc <input name="choix[]" value="choix1" type="checkbox" /> .docx <input name="choix[]" value="choix2" type="checkbox" /> .xls</p>
<p style="text-align: center;"><input name="choix[]" value="choix3" type="checkbox" /> .xlsx <input name="choix[]" value="choix4" type="checkbox" /> .ppt <input name="choix[]" value="choix5" type="checkbox" /> .pptx</p>
<p style="text-align: center;"><input name="choix[]" value="choix6" type="checkbox" /> .pps <input name="choix[]" value="choix7" type="checkbox" /> .ppsx <input name="choix[]" value="choix8" type="checkbox" /> CAD</p>
<p style="text-align: center;"><input name="choix[]" value="choix9" type="checkbox" /> Outlook(.sdb) <input name="choix[]" value="choix10" type="checkbox" /> Outlook(.mdb) <input name="choix[]" value="choix11" type="checkbox" /> .zip </p>
<p style="text-align: center;"><!-- Bouton Envoyer --></p>
<p style="text-align: center;"><input name="envoyer" type="button" value="Envoyer le fichier" onclick="uploadFichier()"/></p>
0
Rejoignez-nous