J'ai eu exactement le même problème et j'ai constaté que la réponse de Varan Sinayee était la seule qui résolvait réellement la question initiale. Cette réponse peut cependant être simplifiée, voici donc une version plus simple.
Les étapes sont les suivantes :
-
Créez un formulaire normal (n'oubliez pas les args method et enctype puisque ce n'est plus géré par dropzone).
-
Mettez un div à l'intérieur avec le class="dropzone"
(c'est ainsi que Dropzone s'y attache) et id="yourDropzoneName"
(utilisé pour changer les options).
-
Définissez les options de Dropzone, pour définir l'URL où le formulaire et les fichiers seront affichés, désactivez autoProcessQueue (de sorte qu'il ne se produit que lorsque l'utilisateur appuie sur 'submit') et autorisez les téléchargements multiples (si vous en avez besoin).
-
Configurer la fonction init pour utiliser Dropzone au lieu du comportement par défaut lorsque le bouton submit est cliqué.
-
Toujours dans la fonction init, utilisez le gestionnaire d'événement "sendingmultiple" pour envoyer les données du formulaire avec les fichiers.
Voilà ! Vous pouvez maintenant récupérer les données comme vous le feriez avec un formulaire normal, dans $_POST et $_FILES (dans l'exemple, cela se passe dans upload.php).
HTML
<form action="upload.php" enctype="multipart/form-data" method="POST">
<input type="text" id ="firstname" name ="firstname" />
<input type="text" id ="lastname" name ="lastname" />
<div class="dropzone" id="myDropzone"></div>
<button type="submit" id="submit-all"> upload </button>
</form>
JS
Dropzone.options.myDropzone= {
url: 'upload.php',
autoProcessQueue: false,
uploadMultiple: true,
parallelUploads: 5,
maxFiles: 5,
maxFilesize: 1,
acceptedFiles: 'image/*',
addRemoveLinks: true,
init: function() {
dzClosure = this; // Makes sure that 'this' is understood inside the functions below.
// for Dropzone to process the queue (instead of default form behavior):
document.getElementById("submit-all").addEventListener("click", function(e) {
// Make sure that the form isn't actually being sent.
e.preventDefault();
e.stopPropagation();
dzClosure.processQueue();
});
//send all the form data along with the files:
this.on("sendingmultiple", function(data, xhr, formData) {
formData.append("firstname", jQuery("#firstname").val());
formData.append("lastname", jQuery("#lastname").val());
});
}
}