Bonjour à tous,
Voila je suis entrain de concevoir un formulaire pour upload des fichiers sur un serveur via de l'ajax natif.
Voici mon code :
Code HTML :
<label for="file_create_photo">Photo à upload :</label>
<input id="file_create_photo" name="file_create_photo" type="file" />
<input type="submit" value="Mettre en ligne la photo" onclick="create_photo();">
<div id="loading_create_photo"><span id="label_create_photo"></span></div>
Voici la fonction create_photo() en javascript ainsi que une partie de ma fonction Ajax pour l'envoie de donnée :
Code Javascript :
function create_photo(){
if(document.getElementById("file_create_photo").value != ""){
document.getElementById("submit_create_photo").display = "none";
document.getElementById("loading_create_photo").display = "block";
document.getElementById("label_create_photo").innerHTML = "Uploading in progress...";
donnee.resetData();
donnee.recupData('status', "creation");
donnee.recupData('file_create_photo', document.getElementById("file_create_photo").value);
donnee.sendAndLoad(base_url+'outils/gestion_photo.php', 'FILES', function(retour){
alert(retour.responseText);
document.getElementById("submit_create_photo").display = "none";
document.getElementById("loading_create_photo").display = "block";
document.getElementById("label_create_photo").innerHTML = "<font color='green'>Uploading done.</font>";
setTimeout(function(){document.getElementById('create_photo').style.display = 'none';},1000);
});
} else {
alert("Missing Datas to \"photo\".");
}
}
// Les deux fonctions permettant de vider et créer les données d'envoi à la page php
// Permet de vider la pile des données
this.resetData = function() {
datas = new String();
datas = '';
};
// Permet d'enregistrer les données afin de les envoyer
this.recupData = function(pfield, pvalue) {
datas += (datas.length == 0) ? pfield+ "=" + escape(pvalue) : "&" + pfield + "=" + escape(pvalue);
};
case "POST":
try {
conn.open("POST", Url);
conn.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
conn.send(datas);
}
catch(error) {
if (debug) { alert('Echec de connexion avec ' + Url + ' via la methode POST'); }
return false;
}
break;
case "FILES":
try {
conn.open("POST", Url);
conn.setRequestHeader("Content-Type", "multipart/form-data");
conn.send(datas);
}
catch(error) {
if (debug) { alert('Echec de connexion avec ' + Url + ' via la methode FILES'); }
return false;
}
A partir du case POST, c'est ma classe d'ajax, qui fonctionne parfaitement pour des formulaires que ce soit en GET et POST. Le case FILES, je viens de le rajouter pour avoir le multipart/form-data. Donc le problème s'il y en a vient du case FILES (en gros je ne désire pas modifier le case FILES ^^).
Voici le dernier bout de code très simple :
Code PHP :
<?php if(isset($_POST)){
var_dump($_FILES);
var_dump($_POST);
}?>
Donc quand j'envoie en méthode POST, mon $_FILES est vide et mon $_POST contient bien le nom du fichier à upload ainsi que son extention.
En revanche via la méthode FILES, les deux var_dump sont vides...
Auriez vous une idée s'il vous plait ?