自定义表单和DropZoneJS

时间:2016-04-01 20:07:38

标签: javascript php dropzone.js

我尝试使用dropzone搜索上传功能以使用我自己的自定义表单。不幸的是,stackoverflow和其他方面的其他线程对我帮助很大。所以也许任何人都可以去了解真正的基础并帮助我理解这一点。

我的问题是当我按下提交按钮时从输入字段获取信息。图像确实上传并按原样进入文件夹,但我也不知道输入字段中的信息,因此我可以稍后将该信息推送到数据库。目前我只是尝试从输入字段获取信息并用PHP写出来,但我没有获得变量的任何信息。任何人都可以帮我理解这个吗?

这是我的代码:

HTML和JavaScript代码

<!-- Innholdet på siden -->
<h1 class="page-header">Last opp bilder</h1>

<pre>
    <form action="" method="post" class="dropzone" id="myForm" enctype="multipart/form-data">
        <!-- Drag and drop felt med knapp som henter opp uforsker -->
        <h4>Slipp bildene her eller <span class="btn btn-success fileinput-button dz-clickable"/> trykk her for å velge bilder!</h4>
        <input type="text" id="photographer" name="photographer">
    </form>
</pre>

<div class="table table-striped files" id="previews">
    <div id="template" class="file-row" style="border: solid 1px #CCCCCC; position: relative; top: 10px; padding: 10px; background-color: #f9f9f9">
        <!-- This is used as the file preview template -->
        <!--Div-tag som styler hele thumbnail-preview visningen-->
        <span class="preview" style="float: left;"><img data-dz-thumbnail/></span>
        <!--div-tag som styler 'name' til filen som lastes opp-->
        <p class="name" style="float: left; margin: 10px 50px 0 50px;" data-dz-name></p>
        <!-- Henter ut filstørrelsen på bilde -->
        <p class="size" style="float: left; margin-top: 10px;" data-dz-size></p>
        <!--Knapp som sletter enkeltbilde i køen-->
        <button style="margin: 10px 0 0 70px;" data-dz-remove id="cancel2" class="btn btn-warning cancel">
            <i class="glyphicon glyphicon-ban-circle"></i>
            Cancel
        </button>
        <br>
        <!-- Selve progressbaren-->
        <div class="progress" style="float: left; margin-left: 50px; width: 20%;">
            <div class="progress-bar progress-bar-success" id="test" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" data-dz-uploadprogress></div>
        </div>
        <strong class="error text-danger" data-dz-errormessage></strong>
        <br style="clear: both;">
    </div>
</div>

<div id="actions" class="row">
    <!-- Knappene -->
    <!-- Legg til filer -->
    <span class="btn btn-success fileinput-button dz-clickable"/>
    <i class="glyphicon glyphicon-plus"></i>
    <span>Legg til filer</span>
    </span>
    <!-- Denne knappen starter selve opplastningsfunksjonen-->
    <button type="submit" name="submit" id="upload" class="btn btn-primary start">
        <i class="glyphicon glyphicon-upload"></i>
        Last opp
    </button>

    <!-- Denne knappen fjerner elementer i køen-->
    <button data-dz-remove id="cancel" class="btn btn-warning cancel">
        <i class="glyphicon glyphicon-ban-circle"></i>
        Cancel
    </button>
</div>

<script>
    // Deklarerer variabel som plukker opp div-taggen template som skal brukes i visning av opplastende filer
    var previewNode = document.querySelector("div#template");
    previewNode.id = "";

    // Ting som jeg ikke helt forstår
    var previewTemplate = previewNode.parentNode.innerHTML;
    previewNode.parentNode.removeChild(previewNode);

    //Sørger for at ikke queue'n blir kjørt automatisk før 'go'-knappen er trykket
    Dropzone.autoDiscover = false;
    //Sperre som gjør at opplastningsfunksjonen kun tar imot bilder og ikke dokumenter.. Btw .svg filer fungerer også
    var acceptedFileTypes = "image/*";

    //Deklarerer selve dropzonen og definerer noen variabler fra bibiloteket til dropzone
    var myDropzone = new Dropzone(document.body, {
        url: 'inc/uploads.php',
        autoProcessQueue: false,
        paramName: 'file',
        maxFiles:10,
        previewTemplate: previewTemplate,
        previewsContainer: "#previews",
        headers: {"MyAppname-Service-Type": "Dropzone"},
        acceptedFiles: acceptedFileTypes,
        clickable:".fileinput-button"
    });

    //Registrerer knappentrykk og kjører kode
    $('#upload').click(function () {
        //Prosesserer køen
        myDropzone.processQueue();
        //'Success'-event som kan høres på og kjøres kode etter alle filer er akseptert
        myDropzone.on("success", function(file,responseText){
            console.log(file);
            var test = document.getElementById('erik');
            var ok = document.getElementById('ok');
            test.innerHTML = ok.value;
            var txt = document.getElementById("txt");
            txt.innerHTML = responseText;
            removeContentDelay();
        });
    });

    //Avbyrt-knapp som sletter hele køen
    $('#cancel').click(function () {
        myDropzone.removeAllFiles();
    });

    // Funksjon som setter en forsinkelse på hendelsen removeAllFiles
    function removeContentDelay() {
        timeoutID = window.setTimeout(removeAllFilesAfterDelay,2000);
    }
    // Fuksjon som tømmer køen etter perdefinert tid i funksjonen removeContentDelay
    function removeAllFilesAfterDelay(responseText){
        myDropzone.removeAllFiles();
    }
</script>

#PHP - 代码

<?php

$test = $_REQUEST["photographer"];
echo "<h1>$test</h1>";

$uploaddir = 'uploads/';
$uploadfile = $uploaddir . basename($_FILES['file']['name']);

if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile)) {
    echo "File is valid, and was successfully uploaded.\n HEEEI";
} else {
    echo "Possible file uploads attack!\n";
}

echo '<pre>';
echo 'Here is some more debugging info:';
print_r($_FILES);

    echo "</pre>";
?>

2 个答案:

答案 0 :(得分:2)

我想你想在dropzone中使用“发送”事件。这是我所在的应用程序中的一些代码:

myDropzone.on("sending", function (file, xhr, formData) {
   var titleVal = file.previewElement.querySelector(".title input").value;
   formData.append("Title", titleVal);
}

答案 1 :(得分:2)

在PHP端使用此代码:

if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')
{
    echo "RECEIVED ON SERVER: \n";
    echo "FILES: \n";

    print_r($_FILES);
    echo "\$_POST: fra php filen \n";
    print_r($_POST);
}


$photographer = ($_POST['photographer']);