За последние 24 часа нас посетили 27286 программистов и 1484 робота. Сейчас ищет 1001 программист ...

Форма загрузки файлов с коментариями

Тема в разделе "PHP для новичков", создана пользователем osi322, 21 май 2015.

  1. osi322

    osi322 Активный пользователь

    С нами с:
    21 май 2015
    Сообщения:
    19
    Симпатии:
    0
    Добрый день.
    Интересуют как это делается, алгоритм.
    Вопрос в следующем, как сохранить комментарий и файл к нему?
    Например в системе wss docs:
    на странице я могу загружать файлы( при выборе файлов они загружаются на сервер), потом заполнить текстовые поля и нажав на кнопку "Сохранить", будет создана "карточка документа" с заполненными полями и загруженными фалами.

    Допустим, есть модальное окно с полем комментария, загрузчиком и кнопкой "Сохранить".
    Если я загружу файлы и закрою браузер или страницу, то загруженные файлы будут существовать в папке куда они были загружены. как от них избавиться?
    Придумал только так:
    1) выбираю фалы на загрузку, (загрузка файлов произойдет после нажатия на кнопку "Сохранить")
    2)пишу комментарий
    3)нажимаю кнопку "Сохранить"
    4) срабатывает скрипт, в БД создается запись с комментарием и пути к файлу, далее загрузка файла и перемещение его в нужный каталог.
    Но хотелось бы, чтобы файлы загружались когда я их выбрал.. потому что файл может быть не того типа, большого размера или ошибка в загрузке файла(загрузчик выдает эти ошибки).
    Тогда придется сохранять файлы в папку, и перемещать их в нужный каталог при нажатии на кнопку "Сохранить", но тогда если я закрою страницу не нажав на кнопку "Сохранить" то файл будет существовать в папки пока я сам туда не зайду и не удалю его..

    Кто и как это делает, и как вообще реализованы комментарии с загрузкой файлов к ним в 1 окне
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    По умолчанию файлы грузятся во временную папку, она очищается при перезагрузки или как её настроили https://php.net/manual/ru/features.file-upload.php

    Чтобы файлы сразу грузились при их выборе, можно использовать уже готовые библиотеки которые используют ajax или Adobe Flash
    например https://github.com/blueimp/jQuery-File-Upload
     
  3. osi322

    osi322 Активный пользователь

    С нами с:
    21 май 2015
    Сообщения:
    19
    Симпатии:
    0
    Спасибо за ответ, видимо я неправильно задал вопрос. Загрузчик у меня через ajax самописный.
    Вот именно, нужны два действия это загрузка файла и сохранения комментария, но как их грамотно сделать?
    Я знаю что файлы грузятся во временную папку и они существуют до завершения скрипта. Поэтому эти файлы нужно копировать в свою папку например 'upload'. Но тогда если я НЕ нажму кнопку "сохранить" то комментарий НЕ будет создан соответственно и загруженный файл не переместится в нужный каталог с 'upload' в, например 'comment_file/1/'.
    То есть файл будет просто жить в паке 'upload', пока я его руками не удалю..
    Поэтому как реализовано такое на файло-обменниках к примеру?
    Не хочу чтобы папка 'upload' превратилась в корзину.Или так везде? или есть хитроумное решение данной задачи?
    Если до сих пор не понятно, не знаю как еще объяснить. Нужен просто смысл как такое делается и реализовывается, код не нужен, нужно направление или описать словами кто как делает.

    как делаю это я:
    например файл main.php, страница на которой можно писать комментарии. Это все у меня есть и работает
    1)Я нажимаю кнопку «Написать комментарий»
    2)открывается модальное окно где есть текстовое поле, форма загрузчика и кнопка «сохранить»
    3)я загружаю файлы(ajax передача данных Form_date), загрузчик вызывает file_upload.php
    4) file_upload.php проверяет все файлы на тип размер перемещает с временной папки в каталог ‘upload/’ и отдает ответ файлу main.php о том какие фалы загрузились. В функции ответа загрузчика(на странице main.php) заношу в массив(js) названия файлов которые скопировались и находятся в папке ‘upload/’
    5) далее я пишу комментарий, нажимаю кнопку «сохранить». вступает в работу другой ajax: add_comment.php. Входные данные у него массив названия файлов(js) и сам комментарий. Его действия, он создает новую строку в БД, в которой содержится текст комментария и ID комментария. Далее в каталоге ‘filr_comment/’ создается пака с номером ID комментария например ‘filr_comment/1/’ и переносит все файлы с папки “upload” в папку ‘filr_comment/1/’ название которых были в массиве. Для чего это? чтобы при отображения комментария выводить все файлы из папки цифра которая равна ID комментария ..
    6) main.php получает ответ от add_comment.php о том что все успешно создано комментарий добавлен и добавляем новый комментарий и ссылки на файл к остальным комментариям. И все это без перезагрузки станицы.
    Так вот а что если просто подзагружали файлы, а потом закрыли браузер? Эти фалы просто будут там хранится? как этого избежать?
    И моя цель сохранить данные только если была нажата кнопка сохранить, если нет то комментарий и загруженные файлы на сервере не находились.. Как это можно реализовать?
     
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    PHP грузит файлы во временную папку, вот когда есть у тебя есть комментарий и все данные что нужно (файлы и т.д.), тогда и переноси их в другую папку и пиши в базу их имена и комментарий. Временная папка почти как корзина и это нормально, что там будет всякое барахло.
     
  5. osi322

    osi322 Активный пользователь

    С нами с:
    21 май 2015
    Сообщения:
    19
    Симпатии:
    0
    Загрузка файлов во временную папку это один скрипт, и другой на подтверждение. Получается в первом скрипте нужно вытянуть файл из временной папки, в левую чтобы он не удалился после выполнения первого скрипта. А вторым скриптом подтверждаем(добавочные действия комментарии и т.п.).
    Получается что там могут образоваться тонны мусора если не было подтверждено, и придется ежемесячно чистить. Неужели нет решения такой проблемы? был бы доступ к wss docs, глянул бы как там это реализовано.
    Видимо сильно заморачиваюсь с этим...
     
  6. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Ага, много заморочек, чисти хоть раз в час, удаляй файлы которым уже 8 часом например