Изпратете изображение и текст заедно с лентата за напредъка чрез формуляра

Имам формуляр, който включва както изображенията, така и текста и всички тези данни трябва да бъдат вмъкнати в базата данни.

<form action="processupload.php" method="post" enctype="multipart/form-data" id="UploadForm">
    <input name="name" type="text" />
    <input name="age" type="text" />

    <input name="fileToUpload" type="file" />
    <input type="submit"  id="SubmitButton" value="Upload" />
</form>

Въпреки това имам специално изискване, искам потребителят да може да попълни всички подробности, но когато стигне до частта за качване, искам изглед като този

въведете описание на изображението тук

където

  • потребителят попълва текстовите полета
  • избира изображение чрез бутона за качване
  • получава визуализация на качено изображение (както е показано на фигурата)
  • щракнете върху бутона за стартиране, лентата за напредъка ще започне до момента, в който изображението бъде качено
  • след като горната стъпка бъде завършена, потребителят ще щракне върху главния бутон за изпращане и след това всички данни трябва да отидат в бекенда

Код за processupload.php

if (count ($_POST) > 1)
    {
        $name = $_POST['name'];

        $target_dir = "uploads/";
        $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
        $uploadOk = 1;
        $imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
        $new_filename = $target_dir . uniqid() . '.' . $imageFileType;
        if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $new_filename))
            {   
                // do something  
            }
     }

Скриптът, използван за товарач, е тук @fidlde. може ли някой да каже как мога да постигна тази функционалност

Скрипт

$(document).ready(function() {
    var progressbox     = $('#progressbox');
    var progressbar     = $('#progressbar');
    var statustxt       = $('#statustxt');
    var submitbutton    = $("#SubmitButton");
    var myform          = $("#UploadForm");
    var output          = $("#output");
    var completed       = '0%';
  $(myform).ajaxForm({
      beforeSend: function() { //brfore sending form
          submitbutton.attr('disabled', ''); // disable upload button
          statustxt.empty();
          progressbox.slideDown(); //show progressbar
          progressbar.width(completed); //initial value 0% of progressbar
          statustxt.html(completed); //set status text
          statustxt.css('color','#000'); //initial color of status text
      },
      uploadProgress: function(event, position, total, percentComplete) { //on progress
          progressbar.width(percentComplete + '%') //update progressbar percent complete
          statustxt.html(percentComplete + '%'); //update status text
          if(percentComplete>50)
              {
                  statustxt.css('color','#fff'); //change status text to white after 50%
              }
          },
      complete: function(response) { // on complete
          output.html(response.responseText); //update element with received data
          myform.resetForm();  // reset form
          submitbutton.removeAttr('disabled'); //enable submit button
          progressbox.slideUp(); // hide progressbar
      }
    });
});

person lyra    schedule 15.12.2015    source източник


Отговори (1)


Надявам се разбирате, че isset($_POST) винаги връща true, защото е суперглобално и не трябва да проверявате по този начин. Би било по-разумно да проверите това вместо това:

if (count ($_POST) > 1)

Тъй като имате две <inputs />, това би било по-добър избор за проверка дали въведеното е въведено. Щракването върху отмяна няма да спре процеса на качване, тъй като това е една изпратена заявка, AFAIK.

person Praveen Kumar Purushothaman    schedule 15.12.2015
comment
това е само примерен код, а не окончателният код, но направих промяната във въпроса, в момента ме притеснява функционалността - person lyra; 15.12.2015
comment
@lyra Загрижени ли сте за анулирането на частта за качване? - person Praveen Kumar Purushothaman; 15.12.2015
comment
чрез дадения код мога да кача изображението и текста наведнъж, но искам първо да се появи предварителен преглед, както е показано на изображението, а след това при щракване да започне качването, отмяната също трябва да е налична опция. и тогава подаването на целия формуляр трябва да е там - person lyra; 15.12.2015
comment
изпращам изображението чрез ‹формуляр› и след това, докато изпращам целия формуляр заедно с img и текст, имам нужда от ‹формуляр› отново.. но използването на вложен формуляр не е опция.. така че наистина се чувствам безпомощен как да го направя - person lyra; 15.12.2015
comment
Не можете да вложите формуляр. - person Praveen Kumar Purushothaman; 15.12.2015
comment
да точно.. и не мога да разбера как да свържа тези 2 части.. първо качвам изображението и след това целия формуляр - person lyra; 15.12.2015
comment
@lyra Защо искате да използвате две различни форми за това на първо място. - person Praveen Kumar Purushothaman; 15.12.2015
comment
не искам, това е просто идея за изпращане на изображение в един формуляр и текст в друг формуляр и сега искам да създам един формуляр, където получавам функционалност и на двата формуляра - person lyra; 15.12.2015
comment
Ха ха... Сега съм объркан. - person Praveen Kumar Purushothaman; 15.12.2015
comment
погледнете изображението през него и ще получите по-добра визуална представа за това, което се опитвам да кажа. имам качване на 2 текста и едно изображение.. нормалният поток е, че изпращам формуляра и до момента, в който бъде изпратен, се показва лентата за напредъка, сега искам, че искам, потребителят попълва 2 текста, качва изображението, получава предварителен преглед на каченото изображение (както е показано във въпроса) щраква върху бутона за стартиране, лентата за напредъка ще започне и след това, когато завърши потребителят щракне върху главния бутон за изпращане и формулярът се изпраща към бекенда - person lyra; 15.12.2015