• 13-09-2024, 14:52:38
    #10
    Sanırım Aşağıdaki Sıralamada Hata var Gönderim kısmında.


    var previewContainer = $(".dropzone");
    
       previewContainer.sortable({
                    update: function(event, ui) {
                        updateMainImage();
                    }
                });
     
                function updateMainImage() {
                    previewContainer.children().removeClass("main-image");
                    previewContainer.children().first().addClass("main-image");
                }
    
    
     myDropzone.on('sendingmultiple', function (file, xhr, formData) {
        formData.append("ilanEkle", "ilanEkle");
       $("#ResimForm").find("input").each(function(){
          formData.append($(this).attr("name"), $(this).val());
      });
    });




    lookout adlı üyeden alıntı: mesajı görüntüle
    Frontend ve backend kodunuzu ayrı ayrı buraya koyabilir misiniz?
  • 13-09-2024, 14:55:12
    #11
    Tüm JS Kodlarım Aşağıdaki gibi.


    <div class="dropzone" id="ilanresim"></div>


                Dropzone.autoDiscover = false;
                var myDropzone = new Dropzone("#ilanresim", {
                    url: "inc/ilanislem.php",
                    paramName: "resim",
                    maxFilesize: 10,
                    uploadMultiple: true,
                    parallelUploads: 10,
                    maxFiles: 10,
                    addRemoveLinks: true,
                    dictRemoveFile: "Kaldır",
                    dictInvalidFileType: "Sadece Resim Yüklemeye İzin Verilmektedir.",
                    dictFileTooBig: "Dosya boyutu {{maxFilesize}} MB'nin üzerinde!",
                    acceptedFiles: "image/*",
                    dictDefaultMessage: '<strong>5 Adet Resim Yükleme Hakkınız vardır</strong><br><strong>GÖRSEL SEÇ veya SÜRÜKLE BIRAK </strong><br>(PNG, JPEG, JPG,) Resim Formatinda Olmalıdır. <br>Dosya Boyutu en fazla 10Mb boyutunda olmalıdır.',
                    dictMaxFilesExceeded: "Sadece {{maxFiles}} Adet Resim Yüklemenize İzin verilmiştir.",
                    autoProcessQueue: false,
                    init: function () {
                        this.on("success", function (file, responseText) {
                            var id = responseText.match(/\d+/g).map(Number);
                            window.location.replace('ilan-ekle/?type=<?=$_SESSION['type']?>')
                        });
                    }
    
    
    
    
                });
    
    
    var previewContainer = $(".dropzone");
    
       previewContainer.sortable({
                    update: function(event, ui) {
                        updateMainImage();
                    }
                });
     
                function updateMainImage() {
                    previewContainer.children().removeClass("main-image");
                    previewContainer.children().first().addClass("main-image");
                }
    
    
     myDropzone.on('sendingmultiple', function (file, xhr, formData) {
    
        formData.append("ilanEkle", "ilanEkle");
       $("#ResimForm").find("input").each(function(){
          formData.append($(this).attr("name"), $(this).val());
      });
    });
    
    
                $('#ekle').on('click', function (e) {
                    if (myDropzone.getUploadingFiles().length === 0 && myDropzone.getQueuedFiles().length === 0) {
                //alert("Resim SEÇ Bro");
            }else{
                e.preventDefault();
                myDropzone.processQueue();
                $("#ekle").hide();
                $("#ekle").after('<div class="col-12"><button class="btn red-bg col-12" type="button" disabled><span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span> İlanınız Kayıt Ediliyor. Lütfen Bekleyiniz...</button></div>').attr("disabled", "disabled");
            } });
  • 15-09-2024, 19:28:20
    #12
    fatbotter.com
    Fotoğraflar seçilir
    Ana fotoğraf belirlenir
    Form verileri doldurulmuştur
    Fotoğraflar sırayla gönderilir ve son fotoğrafa gelindiğinde form verileri de gönderilir.

    Son fotoğraf yüklendikten sonra örnek yanıt:

    {
        "success": true,
        "message": "T\u00fcm dosyalar ba\u015far\u0131yla y\u00fcklendi.",
        "files": [
            "uploads\/66e70b79ac171_53.jpg",
            "uploads\/66e70c470c18a_54.jpg",
            "uploads\/66e70c47b8c80_52.jpg",
            "uploads\/66e70c48d4756_43.jpg"
        ],
        "mainPhoto": "uploads\/66e70c470c18a_54.jpg",
        "formData": {
            "title": "fdsdfdsffd",
            "description": "sdfsdfsdsdfdsf"
        },
        "errors": []
    }

    Aşağıda html ve php kodlar mevcut.

    <!DOCTYPE html>
    <html lang="tr">
    <head>
    <meta charset="UTF-8">
    <title>Toplu Fotoğraf Yükleme</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/dropzone/5.9.3/min/dropzone.min.js"></script>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/dropzone/5.9.3/min/dropzone.min.css">
    <style>
    .dropzone { border: 2px dashed #0087F7; border-radius: 5px; padding: 20px; margin-bottom: 20px; }
    .main-photo { border: 3px solid green; }
    #additionalForm { margin-bottom: 20px; }
    </style>
    </head>
    <body>
    <form id="additionalForm">
    <input type="text" name="title" placeholder="Başlık">
    <textarea name="description" placeholder="Açıklama"></textarea>
    <!-- Diğer form alanları buraya eklenebilir -->
    </form>
    
    <div id="myDropzone" class="dropzone"></div>
    <button id="uploadButton">Fotoğrafları Yükle</button>
    
    <script>
    Dropzone.autoDiscover = false;
    
    let mainPhotoFile = null;
    let totalFiles = 0;
    let uploadedFiles = 0;
    
    const myDropzone = new Dropzone("#myDropzone", {
    url: "upload.php",
    autoProcessQueue: false,
    addRemoveLinks: true,
    parallelUploads: 10,
    });
    
    myDropzone.on("addedfile", function(file) {
    totalFiles++;
    console.log("Dosya eklendi. Toplam dosya sayısı: " + totalFiles);
    
    // Ana fotoğraf seçim butonu
    const button = Dropzone.createElement("<button class='select-main'>Ana Fotoğraf Yap</button>");
    file.previewElement.appendChild(button);
    
    button.addEventListener("click", function(e) {
    e.preventDefault();
    e.stopPropagation();
    if (mainPhotoFile) {
    mainPhotoFile.previewElement.classList.remove("main-photo");
    }
    file.previewElement.classList.add("main-photo");
    mainPhotoFile = file;
    console.log("Ana fotoğraf seçildi:", file.name);
    });
    });
    
    myDropzone.on("removedfile", function(file) {
    totalFiles--;
    console.log("Dosya kaldırıldı. Toplam dosya sayısı: " + totalFiles);
    if (file === mainPhotoFile) {
    mainPhotoFile = null;
    console.log("Ana fotoğraf kaldırıldı");
    }
    });
    
    document.getElementById("uploadButton").addEventListener("click", function() {
    console.log("Yükleme başlatılıyor. Toplam dosya sayısı: " + totalFiles);
    myDropzone.processQueue();
    });
    
    myDropzone.on("sending", function(file, xhr, formData) {
    uploadedFiles++;
    console.log("Dosya gönderiliyor. Sıra: " + uploadedFiles + "/" + totalFiles);
    
    formData.append("isMainPhoto", file === mainPhotoFile);
    console.log("isMainPhoto:", file === mainPhotoFile);
    
    if (uploadedFiles === totalFiles) {
    console.log("Son dosya gönderiliyor. Form verileri ekleniyor.");
    const additionalForm = document.getElementById("additionalForm");
    new FormData(additionalForm).forEach((value, key) => {
    formData.append(key, value);
    console.log("Form verisi eklendi: " + key + " = " + value);
    });
    formData.append("isLastFile", "true");
    }
    });
    
    myDropzone.on("success", function(file, response) {
    console.log("Dosya yüklendi:", response);
    
    if (uploadedFiles === totalFiles) {
    console.log("Tüm dosyalar yüklendi");
    uploadedFiles = 0;
    totalFiles = 0;
    }
    });
    
    myDropzone.on("error", function(file, errorMessage) {
    console.error("Dosya yükleme hatası:", errorMessage);
    });
    </script>
    </body>
    </html>
    session_start();
    header('Content-Type: application/json');
    
    error_log("Yeni istek alındı: " . print_r($_POST, true));
    error_log("FILES: " . print_r($_FILES, true));
    
    $uploadDir = 'uploads/';
    if (!file_exists($uploadDir)) {
    mkdir($uploadDir, 0755, true);
    }
    
    if (!isset($_SESSION['upload_data'])) {
    $_SESSION['upload_data'] = [
    'files' => [],
    'mainPhoto' => null,
    'formData' => [],
    'errors' => []
    ];
    }
    
    $response = [
    'success' => true,
    'message' => '',
    'files' => [],
    'mainPhoto' => null,
    'formData' => [],
    'errors' => []
    ];
    
    if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['file'])) {
    $file = $_FILES['file'];
    $isMainPhoto = isset($_POST['isMainPhoto']) && $_POST['isMainPhoto'] === 'true';
    $isLastFile = isset($_POST['isLastFile']) && $_POST['isLastFile'] === 'true';
    
    error_log("isMainPhoto: " . ($isMainPhoto ? 'true' : 'false'));
    error_log("isLastFile: " . ($isLastFile ? 'true' : 'false'));
    
    $fileName = uniqid() . '_' . basename($file['name']);
    $filePath = $uploadDir . $fileName;
    
    if (move_uploaded_file($file['tmp_name'], $filePath)) {
    $_SESSION['upload_data']['files'][] = $filePath;
    if ($isMainPhoto) {
    $_SESSION['upload_data']['mainPhoto'] = $filePath;
    error_log("Ana fotoğraf ayarlandı: " . $filePath);
    }
    error_log("Dosya başarıyla yüklendi: " . $filePath);
    } else {
    $_SESSION['upload_data']['errors'][] = "Dosya yüklenemedi: " . $fileName;
    error_log("Dosya yükleme hatası: " . $fileName);
    }
    
    if ($isLastFile) {
    error_log("Son dosya işleniyor. POST verileri: " . print_r($_POST, true));
    foreach ($_POST as $key => $value) {
    if ($key !== 'isMainPhoto' && $key !== 'isLastFile') {
    $_SESSION['upload_data']['formData'][$key] = $value;
    }
    }
    
    $response = array_merge($response, $_SESSION['upload_data']);
    $response['message'] = 'Tüm dosyalar başarıyla yüklendi.';
    
    error_log("Session verileri: " . print_r($_SESSION['upload_data'], true));
    unset($_SESSION['upload_data']);
    } else {
    $response['message'] = 'Dosya başarıyla yüklendi.';
    }
    } else {
    $response['success'] = false;
    $response['message'] = "Geçersiz istek";
    $response['errors'][] = "Dosya gönderilmedi";
    error_log("Geçersiz istek veya dosya gönderilmedi");
    }
    
    error_log("Yanıt: " . print_r($response, true));
    echo json_encode($response);