Создать систему галереи фотографий - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь создать систему фотографий товара, где администратор, если он хочет добавить, удаляет или меняет положение фотографий, он делает все по форме.

Форма:

image

Содержит кнопку удаления, перетаскивание, чтобы изменить положение и добавить фотографии, все работает отлично. КЛИЕНТСКАЯ СТОРОНА

После отправки формы:

 $("#editProductForm").submit(function(e) {
            e.preventDefault();

            var index = 1;
            $(".draggable").each(function() {
                var image = $(this).find("#preview-img").attr("src");
                var id = $(this).attr("id").substring(4);
                if (image.indexOf("https://") > -1) {
                    $("#photo" + id).attr("id", "photo" + index);
                } else {
                    $("#picture" + id).attr("name", "picture" + index);
                }
                index++;
            });

            var formData = new FormData(this);

            var index = 1;
            $(".draggable").each(function() {
                var image = $(this).find("#preview-img").attr("src");
                var id = $(this).attr("id").substring(4);
                if (image.indexOf("https://") > -1) {
                    formData.append('picture' + index, image);
                } else {
                    $("#picture" + id).attr("name", "picture" + index);
                }
                index++;
            });
            $.post({
                url: '<?php echo $site ?>/admin/painel/modifyproduct.php',
                data: formData,
                cache: false,
                contentType: false,
                processData: false,
                success: function(data) {

                }
            });
        });

Теперь возникает вопрос, мой В коде есть ошибка, и я не знаю, как решить SERVER-SIDE:

function createImage($id, $productCategory)
{
    global $db;


    $db->query("DELETE FROM pictures WHERE ProductID='$id'");

    if (!file_exists("../../../pictures/produtos/$productCategory/MTA$id/")) {
        mkdir("../../../pictures/produtos/$productCategory/MTA$id/", 0777, true);
    }

    $position = 0;
    for ($i = 1; $i <= 10; $i++) {
        if (isset($_FILES['picture' . $i])) {
            $file = $_FILES['picture' . $i]['tmp_name'];

            $nameFile = "picture" . $position;

            $patchImage = "/pictures/produtos/$productCategory/MTA$id/$nameFile.png";

            move_uploaded_file($file, "../../.." . $patchImage);

            saveImageInDataBase($id, $patchImage, $position);
            $position++;
        } else if (isset($_POST['picture' . $i])) {
            $file = $_POST['picture' . $i];

            $nameFile = "picture" . $position;

            $oldName = "../../../" . substr($file, strpos($file, 'pictures/'));

            rename($oldName, "../../../pictures/produtos/$productCategory/MTA$id/$nameFile.png");

            saveImageInDataBase($id, "/pictures/produtos/$productCategory/MTA$id/$nameFile.png", $position);
            $position++;
        }
    }
}

Ошибка: есть ошибка, когда в папке с таким именем уже есть фотография (с позицией) и еще одна фотография, размещенная в той же позиции (move_uploaded_file), старая фотография будет заменена.

Был бы более простой способ заставить эту фотосистему работать хорошо?

1 Ответ

0 голосов
/ 17 апреля 2020

Перед выполнением move_uploaded_file() вы должны проверить, существует ли файл. Если это так, вам нужно создать новое имя файла. Вам придется выполнять эти шаги, пока вы не найдете несуществующий файл.

while ( TRUE ) { // Loop until we find a non-existent destination filename
    $nameFile = "picture" . $position;

    $patchImage = "/pictures/produtos/$productCategory/MTA$id/$nameFile.png";

    if ( ! file_exists( $patchImage ) ) { // We're good
        move_uploaded_file($file, "../../.." . $patchImage);
        saveImageInDataBase($id, $patchImage, $position);
        break; // Get out of the loop
    }

    $position++; // Try next position
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...