Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.01.2018, 05:44
Аватар для kupidon
Аспирант
Отправить личное сообщение для kupidon Посмотреть профиль Найти все сообщения от kupidon
 
Регистрация: 18.03.2016
Сообщений: 69

Как в html форме вместе с файлом передать переменную
Всем доброго времени суток.
Имеется форма по загрузке фото на сервер.
Есть обработчик кода ajaxImageUpload.php
Форма отправляет файл во временную папку сервера, передавая его параметры в файл-обработчик ajaxImageUpload.php.
В обработчике, я манипулирую с полученным файлом и получаю результирующую строку:
echo "<img src='.........'>";


А мне надо получить
echo "<img id="img_1212343" src='.........'>";
. То есть, вместе с файлом я должен передать его ID. Обработчик добавляет файл на сервер в нужное место, делает запись в БД о данном файле, используя ID. И выдает мне мой код: echo "<img id="img_ID" src='.........'>";
Можно ли в этой форме передать еще переменную с номером, вместе с файлом?

<form id="imageform" method="post" enctype="multipart/form-data" action='ajaxImageUpload.php' style="clear:both">
		<h1>Загрузка изображений</h1> 
		<div id='imageloadstatus' style='display:none'><img src="loader.gif" alt="Загрузка ..."/></div>
		<div id='imageloadbutton'>
			<input type="file" name="photos[]" id="photoimg" multiple="true" />
		</div>
	</form>   
</div>
Ответить с цитированием
  #2 (permalink)  
Старый 22.01.2018, 06:06
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от kupidon
То есть, вместе с файлом я должен передать его ID. Обработчик добавляет файл на сервер в нужное место, делает запись в БД о данном файле, используя ID.
Если данные о загруженном файле пишутся в БД, то каким образом их ID могут оказаться на клиенте если записи в БД еще не было?

Вы загружаете на сервер не одно изображение, а несколько. Пусть эти изображения принадлежат владельцу с ID 15. ID владельца можно добавить в форму скрытым полем, а можно и как индекс в имени поля, если кроме передачи файлов отправляются и другие POST данные. Если только загрузка файлов, то можно так - name="photos[15]".

Получив файлы сервер записывает информацию о них для владельца ID 15, формируя их идентификаторы (средствами SQL), которые после записи можно получить, и только после чего их можно использовать.
Ответить с цитированием
  #3 (permalink)  
Старый 22.01.2018, 09:45
Аватар для kupidon
Аспирант
Отправить личное сообщение для kupidon Посмотреть профиль Найти все сообщения от kupidon
 
Регистрация: 18.03.2016
Сообщений: 69

Спасибо за ответ. Чтобы обратиться к БД мне и нужно передать значения в файл.
Могу я добавить в форму скрытое поле?
например
<input name="purch" value="'.$2121212.'" type="hidden">


Сможет обработчик принять его? То есть в обработчик приедет и параметры файла и значение purch ?
Ответить с цитированием
  #4 (permalink)  
Старый 22.01.2018, 10:52
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от kupidon
Чтобы обратиться к БД мне и нужно передать значения в файл
О чем речь? Если о добавлении новых изображений, то как они могут оказаться в БД раньше, чем будут загружены на сервер? Если редактирование существующих изображений принадлежащих кому либо, то да, можно и нужно получать их идентификаторы. Но в этом случае поле выбора каждого из этих изображений не может быть multiple.
Ответить с цитированием
  #5 (permalink)  
Старый 22.01.2018, 11:22
Аватар для kupidon
Аспирант
Отправить личное сообщение для kupidon Посмотреть профиль Найти все сообщения от kupidon
 
Регистрация: 18.03.2016
Сообщений: 69

Речь об интернет магазине. Открываю страницу редактирования товара, добавляю изображения согласно Id товара. У каждого товара их может быть несколько. Фото отлично загружаются на сервер по несколько штук. В обработчике , циклом foreach , я делаю им ресайз, уникальное имя и отправляю каждый файл в нужную папку. В обработчике все это уже сделал. Осталось в обработчике получить id товара, то есть его получить одновременно вместе с файлами, чтобы прописать загруженные фотографии в БД к нужному товару.
Надеюсь не запутал))
Ответить с цитированием
  #6 (permalink)  
Старый 22.01.2018, 13:58
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Не важно что является владельцем, товар ли, статья и прочее, важно формирование связей. Пусть товары, и в таблице их описывающей товары получают уникальный идентификатор - первичный ключ с автоинкрементом.

Прежде чем определять структуру таблицы содержащую информацию об изображениях товаров нужно определиться со структурой каталога хранящего эти изображения. Если товаров много и скинуть все их изображения в одну папку, то работать с такой папкой будет трудно - файловые операции медленные и чем больше загружена файлами директория, тем медленнее будут эти процессы.

То есть, если структура каталога хранящего изображения разбита например на категории товаров, то таблица описывающая изображения помимо ссылки на товар и его изображение, также должна ссылаться и на категорию товара.

Непосредственно ссылка на товар может быть числовым значением - первичным ключом с автоинкрементом, а может быть и именем. Во втором случае уникальность имени изображения и id товара должны быть обеспечены только в пределах категорий товаров - уникальным индексом будет составной индекс "id категории, id товара, имя изображения".

Пусть для простоты все хранится в куче и таблица изображений хранит id изображения формирующихся автоматически при записи в таблицу, и id товара.

Форма для добавления нового товара в базу и редактирования существующего в базе товара может быть одна и та же. Отличие форм только в наличии идентификатора - при добавлении товара он не передается формой, при редактировании присутствует в форме - скрытое поле.

Работа над ошибками

В процессе добавления/редактирования возможны ошибки как в данных так и в загружаемых файлах. Сервер обязан проверять данные поступающие извне и возвращать клиенту ошибки. Загрузка файлов на сервер, это и большой объем данных, и длительный процесс. При этом, если файлы загружены без ошибок, а данные формы имеют ошибки, то повторное отправление формы после устранения ошибок также будет производиться с повторной загрузкой файлов на сервер. Чтобы избежать повторной загрузки, загруженные без ошибок и обработанные без ошибок файлы (изменение размеров, обрезка и т.п.) можно сохранить в сессии. Клиенту возвращается отчет об ошибках, включая и ошибки о загрузке/обработке файлов, а поле/поля выбора файла сбрасываются. Клиент может повторить выбор и загрузку только тех файлов, которые были загружены или обработаны с ошибками.

После удачного добавления/обновления товара файлы из сессии перемещаются в каталог.

Добавление нового товара

После удачного добавления информации о товаре, в таблицу товаров делается запрос на получение ID последней записи - идентификатора присвоенного товару. Производится запись в базу загруженных изображений с одновременным их перемещением в каталог - процесс нужно начинать с перемещения изображения в каталог, а запись в базу производить при отсутствии ошибки перемещения. В случае именования/хранения в этой таблице имен изображений как уникальных идентификаторов, добавление изображений в базу можно производить только циклом, так как после каждого добавления потребуется запрос на получение ID добавленного фото.

Если в таблице изображений формируемый уникальный идентификатор является не именем изображения, а идентификатором записи (однозначно указывает на индекс "id категории, id товара, имя изображения"), то добавления изображений в таблицу можно произвести одним запросом много-строчной вставкой. Имена изображений при этом формируются при обработке и сохранения изображений, а получение ID записи не требуется. Запись в изображений в базу нужно производить после успешного перемещения изображений в каталог, соответственно с обработкой ошибок.

В таблицу пишется и ранее полученный идентификатор товара.

Поле для загрузки изображений именуется как name="name_field[0][]". Поле с множественным выбором.

Редактирование товара

Форма имеет скрытое поле содержащее идентификатор товара.

Можно одновременно редактировать имеющиеся изображения (удалять их, замещая новыми) и добавлять новые.

Как и в случае добавления товара новые изображения можно загружать полем name="name_field[0][]" с множественным выбором. Поля редактирования имеющихся изображений при этом именуются как name="name_field[ID]", где ID - идентификатор изображения/записи. Этим полем можно выбрать только один файл. Также такое поле можно добавлять в форму только по требованию.

Сервер при получении файлов руководствуется индексом ключа name_field - если 0, то добавление новых изображений, если отлично от нуля, то замена старого изображения на новое. При замещении старого изображения новым нужно получить имя этого изображения в базе и после удачного его удаления, и замещения новым, произвести запись нового в базу.

Все остальные принципы обновления в базе такие же как и при добавлении, отличаются только операции - при обновлении ID уже известен.


Вот такие общие принципы могут быть.

Последний раз редактировалось laimas, 22.01.2018 в 14:21.
Ответить с цитированием
  #7 (permalink)  
Старый 22.01.2018, 14:22
Аватар для kupidon
Аспирант
Отправить личное сообщение для kupidon Посмотреть профиль Найти все сообщения от kupidon
 
Регистрация: 18.03.2016
Сообщений: 69

Спасибо Вам за столько огромный ответ. Неожиданно.
Сейчас с работы приеду и буду пережевывать.
Ответить с цитированием
  #8 (permalink)  
Старый 22.01.2018, 14:55
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от kupidon
Неожиданно
Что в этом неожиданного?

Вообще место вашей темы скорее всего должно быть не в этом разделе, ибо на 99% все вопросы ее затрагивающие должен решать сервер. Главное же в данном вопросе, это как связаны данные, структура их (каталоги). Если этот вопрос у вас будет иметь "слабые места", то гарантированно, что рано или поздно у вас появятся проблемы.

Если бы речь была к примеру о добавлении изображений к статье и не просто "притулить", а разместить их в статье, тогда бы ваша тема более тяготела бы к данному разделу.

Пусть не имеется визуального редактора и оперируя полем textarea хочется отформатировать текст как статью с "красивой" вставкой в нее изображений: как есть; указать обтекание текстом; указать размер.

Заголовок статьи передается отдельным полем, а на параграфы разбиваться текст будут по условию - два подряд перевода строки определяют параграфы. Обтекание справа/слева задается именами классов. Размер изображения определяется оценочно, исходя из известной ширины элемента отображающего статью на странице.

В этом случае все, включая и связь добавляемого в статью изображения с местоположением его на странице, будет решаться клиентом. Добавление изображения, это добавление поля file в форму, которое получает в имени индекс по приращению. Этот же индекс добавляется ВВ-тегу [IMG], связывая изображение в тексте с загружаемым изображением. С этим же тегом связывается обтекание, если оно задается, и размер, ели он изменяется. Изменение размера, которые нужно указать и передать на сервер, можно решить оперируя исключительно стилем - указывать ширину/высоту, рассчитывая процентное изменение от исходного размера ширины или высоты.

Серверу останется только сделать разбор текста, загружать изображения, заменяя в тексте ВВ-тег связанный с каждым ссылкой на загруженное.

Последний раз редактировалось laimas, 22.01.2018 в 14:58.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как через HTML ввести переменную в JS и обратно AlVar Общие вопросы Javascript 2 15.04.2017 22:52
как передавать данные из html? carder Общие вопросы Javascript 5 27.02.2016 19:46
Как передать переменную из Java в php& Alex_dark74 Общие вопросы Javascript 1 08.08.2014 13:07
Как передать код html страницы из фрейма на сервер vuler Общие вопросы Javascript 5 20.02.2012 16:31
Как передать переменную в функцию с помощью JQuery??? Иван Я Events/DOM/Window 3 20.01.2012 11:21