Я создаю форму зоны перетаскивания, используя dropzone.js. Когда форма отправляет пустую форму, она завершается с ошибкой, отправляя пустой ULR. Как я могу повторно проверить форму, чтобы проверить, что поля не пусты?

Это мой код Спасибо за помощь.

HTML-код (index.php)

{amp}lt;!doctype html{amp}gt; {amp}lt;html{amp}gt; {amp}lt;head{amp}gt; {amp}lt;meta charset="UTF-8"{amp}gt; {amp}lt;title{amp}gt;Untitled Document{amp}lt;/title{amp}gt; {amp}lt;head{amp}gt; {amp}lt;link href="../CSS/dropzone.css" type="text/css" rel="stylesheet" /{amp}gt; {amp}lt;/head{amp}gt; {amp}lt;body{amp}gt; 
 {amp}lt;form id="uploader" class="dropzone" action="upload.php"{amp}gt;{amp}lt;BR{amp}gt; {amp}lt;BR{amp}gt; {amp}lt;div class="dropzone-previews"{amp}gt;{amp}lt;/div{amp}gt;{amp}lt;BR{amp}gt;{amp}lt;BR{amp}gt; {amp}lt;!-- this is were the previews should be shown. --{amp}gt; {amp}lt;div id="previews" class="dropzone-previews"{amp}gt;{amp}lt;/div{amp}gt; {amp}lt;!-- Now setup your input fields --{amp}gt; {amp}lt;input type="email" name="username" /{amp}gt; {amp}lt;input type="password" name="password" /{amp}gt; {amp}lt;input type="hidden" name="additionaldata" value="1" /{amp}gt; {amp}lt;button type="submit"{amp}gt;Submit data and files!{amp}lt;/button{amp}gt; {amp}lt;/form{amp}gt; {amp}lt;/body{amp}gt; {amp}lt;/html{amp}gt; 

upload.php

 {amp}lt;?php $ds = DIRECTORY_SEPARATOR; //1 $storeFolder = '../upload_test/uploads'; //2 if (!empty($_FILES)) { $tempFile = $_FILES['file']['tmp_name']; //3 $targetPath = dirname( __FILE__ ) . $ds. $storeFolder . $ds; //4 $targetFile = $targetPath. $_FILES['file']['name']; //5 $allowed = array('gif','png' ,'jpg'); $filename = $_FILES['file']['name']; $ext = pathinfo($filename, PATHINFO_EXTENSION); if(!in_array($ext,$allowed) ) { echo 'error'; move_uploaded_file($tempFile,$targetFile); //6 } ?{amp}gt; NEW JS custom.dropzone.js which seems to break the upload.php function Dropzone.options.myAwesomeDropzone = { // The camelized version of the ID of the form element // The configuration we've talked about above autoProcessQueue: false, parallelUploads: 3, maxFiles: 3, previewsContainer: ".dropzone-previews", accept: function(file, done) { console.log("uploaded"); done(); }, init: function() { this.on("maxfilesexceeded", function(file){ alert("No more files please!"); }); }, // The setting up of the dropzone init: function() { var myDropzone = this; // First change the button to actually tell Dropzone to process the queue. this.element.querySelector("button[type=submit]").addEventListener("click", function(e) { // Make sure that the form isn't actually being sent. e.preventDefault(); e.stopPropagation(); myDropzone.processQueue(); }); // Listen to the sendingmultiple event. In this case, it's the sendingmultiple event instead // of the sending event because uploadMultiple is set to true. this.on("sendingmultiple", function() { // Gets triggered when the form is actually being sent. // Hide the success button or the complete form. }); this.on("successmultiple", function(files, response) { // Gets triggered when the files have successfully been sent. // Redirect user or notify of success. }); this.on("errormultiple", function(files, response) { // Gets triggered when there was an error sending the files. // Maybe show form again, and notify user of error }); } } 

Я столкнулся с подобной проблемой сегодня. В моем случае Форма была построена с помощью Zend Form Builder (выполняя всю проверку, …), чтобы сделать ее короткой (по крайней мере, настолько короткой, насколько это возможно):

  1. я изменил существующее поле загрузки файла моей формы на стандартное поле ввода текста (может быть даже скрытое) — как обязательное поле .
  2. Добавил dropzone над формой, создал требуемое действие PHP, которое не делает ничего, кроме перемещения файлов из папки php-tmp в мою собственную папку tmp (специфично для проекта), а затем возвращает новый путь / имя файла как json
  3. в js я добавил функцию «on succes» в мою зону сброса, которая берет результат json и добавляет его к содержимому моего поля ввода (из 1)
  4. Действие моей реальной формы берет эти пути, делает некоторые другие вещи (например, генерирует пользовательские папки, …) и перемещает эти файлы (загруженные через dropzone) в эти новые папки.

Надеюсь, я смогу хоть немного помочь;)

Dropzone.js — это асинхронный фреймворк. если вы используете этот вид сценария, вы должны использовать его, думая так.

Вы можете использовать JQUERY (библиотека AJAX). С помощью Jquery вы можете проверить свое значение в своем контрольном поле и одновременно отправить свою фотографию на сервер.

Надеюсь, это поможет вам