Bonjour,
Voila je rencontre un problème avec mon code, je cherche à récupérer le contenu de mon input files et je ne comprends pas pourquoi je n'arrive pas à l'afficher avec le vardump($_files) alors que le vardump($_post) fonctionne bien pour les variables post...
<form action="<?= $site->url ?>/devis-rapide" id="invoiceGold" method="POST" role="form" enctype="multipart/form-data">
<div class="form-group">
<textarea name="devis" id="input_freelance" class="form-control" rows="7" required placeholder="Merci de nous décrire votre demande dans ce champ de texte"></textarea>
</div>
<div class="form-group">
<label for="zip_rapide">Fichiers au format zip</label>
<input type="file" id="image" name="image"/>
<input type="hidden" name="MAX_FILE_SIZE" value="1048576" />
<p class="help-block">Merci de sélectionner vos fichiers et de nous les envoyés compréssés</p>
</div>
<hr>
<button type="submit" class="btn btn-primary">Envoyer la demande</button>
</form>
public function needGoldInvoice($req, $res, $args){
print_r($_POST); // fonctionne bien
print_r($_FILES); // Ne fonctionne pas
}
Je suis perdu, si quelqu'un à la solution ca m'aiderai énormément, merci beaucoup
Oui, il faut mixer les deux :
$('form#invoiceGold').submit(function(event) {
event.preventDefault();
var $form = $(this);
var $status = $('#upload-status-imp-rapide');
var formData = new FormData($form[0]);
var files = $('input[type=file]')[0].files;
if (files && files.length) formData.append('image', files[0]);
$.ajax({
type: $form.attr('method') || 'POST',
url: $form.attr('action'),
data: formData,
contentType: false,
processData: false
})
.done(function(data, text, jqxhr){
$('#rapide-container').find('form').html(' ');
$status.css('display', 'block');
$status.removeAttr('class').attr('class', 'alert alert-success');
$status.html(data);
$('#close-imp').css('display', 'block').css('margin', '0 auto').css('margin-top', '15px');
}).fail(function(jqxhr){
swal("Oops...", "Merci de contacter le support", "error");
$status.css('display', 'block');
$status.removeAttr('class').attr('class', 'alert alert-danger');
$status.html(err.responseText);
});
});
Salut,
Tu utilises print_r
et non var_dump
, donc commence par essayer avec la function var_dump()
.
Ensuite, sur quelle version de PHP es-tu ?
Les deux ne fonctionnent pas j'ai essayer print_r après avoir essayer le var_dump.
Je suis en php 5.6
les deux m'affichent la meme chose : "array(0) { }" et quand je cible mon input en faisant var_dump($_files['monInput']) ca m'affiche "Null"
je vous montre aussi mon fichier js avec la fonction ajax ( en fait le formulaire est dans une popup ) :
$('form#invoiceGold').submit(function(event) {
event.preventDefault();
var $form = $(this);
var $status = $('#upload-status-imp-rapide');
$.post($form.attr('action'), $form.serializeArray())
.done(function(data, text, jqxhr){
$('#rapide-container').find('form').html(' ');
$status.css('display', 'block');
$status.removeAttr('class').attr('class', 'alert alert-success');
$status.html(data);
$('#close-imp').css('display', 'block').css('margin', '0 auto').css('margin-top', '15px');
}).fail(function(jqxhr){
swal("Oops...", "Merci de contacter le support", "error");
$status.css('display', 'block');
$status.removeAttr('class').attr('class', 'alert alert-danger');
$status.html(err.responseText);
});
});
Voici aussi la route ( on utilise slim framework )
$app->post('/mdp', 'Auth:mdpLost');
Si tu utilises Slim, pourquoi ne passes-tu pas tout simplement par le paramètre $request pour récupérer les infos de ta requête (cf la doc) ?
Comment exactement ? j'essaye de faire un $req->isPost et de mettre mon var_dump dedans mais ca ne fonctionne pas.
if($req->isPost())
{
var_dump($_FILES);
} else {
echo 'no';
}
Tu as regardé le tutoriel consacré à Slim v3 ?
Et regarde la documentation : en cherchant 20 s (top chrono !), j'ai trouvé ceci : $files = $request->getUploadedFiles();
, rien de plus simple ... ;)
Je ne connaissais pas cette fonction mais après utilisation elle me retourne : "array".
Je pense que le var_dump($_files) aurait du fonctionner malgré tout je n'arrive pas à comprendre pourquoi ca ne marche pas...
ps: merci encore de ton aide ;)
Oui, elle te retourne un array contenant ton/tes fichier(s).
Je pense que Slim doit override le comportement de certains éléments natifs de PHP. Utilise la doc, elle répondra à tes questions ;)
Pense à passer ton sujet à résolu ;)
Si je fais un var_dump dessus j'ai toujours un array 0, je ne pense pas que le sujet soit résolus
Ah beh c'est que tu ne récupères pas de fichiers tout simplement ;)
Tu es sur quel env de dev ?
Oui je sais ^^ mais je n'arrive pas à voir pourquoi ... au vu de mon code ca devrait etre bon non ?
Je suis sur sublim text 3 pourquoi ? (j'ai phpstorm sur mon pc dont je n'ai pas eu le temps d'apprendre à me servir)
Je n'avais pas vu que tu avais posté ton JS : il te faut utiliser la classe FormData afin d'envoyer tes fichiers en AJAX ;)
var formData = new FormData($form[0]);
var files = $('input[type=file]')[0].files;
if (files && files.length) formData.append('image', files[0]);
$.ajax({
type: $form.attr('method') || 'POST',
url: $form.attr('action'),
data: formData,
contentType: false,
processData: false
})
/* ... */
Code non testé, je te laisse peaufiner et creuser ;)
Tu penses que je pourrais le rajouter comment dans mon code actuel ? ( je peche un peu en ajax) :p
$('form#invoiceGold').submit(function(event) {
event.preventDefault();
var $form = $(this);
var $status = $('#upload-status-imp-rapide');
$.post($form.attr('action'), $form.serializeArray())
.done(function(data, text, jqxhr){
$('#rapide-container').find('form').html(' ');
$status.css('display', 'block');
$status.removeAttr('class').attr('class', 'alert alert-success');
$status.html(data);
$('#close-imp').css('display', 'block').css('margin', '0 auto').css('margin-top', '15px');
}).fail(function(jqxhr){
swal("Oops...", "Merci de contacter le support", "error");
$status.css('display', 'block');
$status.removeAttr('class').attr('class', 'alert alert-danger');
$status.html(err.responseText);
});
});