Показать сообщение отдельно
  #37 (permalink)  
Старый 15.02.2018, 20:21
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от kupidon
Но меня интересует только то что касается ссылки. Остальное я уже сделал
Если сделано так как в коде, то это никуда не годится.

Сообщение от kupidon
товар есть. Нужно загрузить фото по ссылке, обработать его( переименовать, изменить размеры), переместить и прописать в БД принадлежность к данному ид товара
Значит редактирование/обновление товара, следовательно либо в форме есть скрытое поле со значением id товара, либо id товара, это ключ в имени полей формы.

Одной формой можно добавлять как локальные файлы, так указывать загрузку сетевых файлов.

<form>
<div id="url_file">
<input name="file[]" />
</div>
<div id="local_file">
<input type="file" name="file[]" />
</div>
<input type="hidden" name="id" value="<?=$id?>" />
</form>

Поле file[] бокса url_file можно клонировать тем самым определять для загрузки множество файлов. Поле file[] бокса local_file также может загружать множество файлов, нужно только проверять на клиенте при выборе файлов соответствие выбранного ограничениям накладываемых сервером.

На сервере если передан id товара и если это действительно товар имеющийся в базе, а не просто число, то загрузка файлов, если массив $_FILES не пуст.

Обходом в цикле загружаем файлы загруженные без ошибок - !file["error"][$i]. Если файл отвечает требованиям: тип, размер если определено, то file["tmp_name"][$i] передается в функцию на обработку: изменение размеров, обрезка, наложение логотипа и т.п. Если все Ок, эта функция генерирует имя файла, а не использует загруженное "Огурцы на грядке", даже если товар и огурец, и под этим именем сохраняет в указанном каталоге (если каталоги связаны к примеру с категориями, помимо id товара сервер должен знать и о категории). Эта же функция может обновлять и запись в базе о новом добавленном фото, либо возвращать его из функции, одновременно указывая им и удачное выполнение. Имена всех возвращенных функцией файлов одним запросом по окончании загрузки записать в базу. Если есть ошибки, то функция возвращает false.

Если массив $_POST["file"] не пуст, то в цикле загружается сетевой файл по указанному url, также проверяется на условия по типу/размеру, и отдается в функцию на обработку.

То есть, если есть загруженные $_FILES и указаны сетевые, то и те, и другие обрабатываются одной функцией. Либо одни из - локальные или сетевые. Если и то, и другое пусто - ошибка.
Ответить с цитированием