Как в 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> |
Цитата:
Вы загружаете на сервер не одно изображение, а несколько. Пусть эти изображения принадлежат владельцу с ID 15. ID владельца можно добавить в форму скрытым полем, а можно и как индекс в имени поля, если кроме передачи файлов отправляются и другие POST данные. Если только загрузка файлов, то можно так - name="photos[15]". Получив файлы сервер записывает информацию о них для владельца ID 15, формируя их идентификаторы (средствами SQL), которые после записи можно получить, и только после чего их можно использовать. |
Спасибо за ответ. Чтобы обратиться к БД мне и нужно передать значения в файл.
Могу я добавить в форму скрытое поле? например <input name="purch" value="'.$2121212.'" type="hidden"> Сможет обработчик принять его? То есть в обработчик приедет и параметры файла и значение purch ? |
Цитата:
|
Речь об интернет магазине. Открываю страницу редактирования товара, добавляю изображения согласно Id товара. У каждого товара их может быть несколько. Фото отлично загружаются на сервер по несколько штук. В обработчике , циклом foreach , я делаю им ресайз, уникальное имя и отправляю каждый файл в нужную папку. В обработчике все это уже сделал. Осталось в обработчике получить id товара, то есть его получить одновременно вместе с файлами, чтобы прописать загруженные фотографии в БД к нужному товару.
Надеюсь не запутал)) |
Не важно что является владельцем, товар ли, статья и прочее, важно формирование связей. Пусть товары, и в таблице их описывающей товары получают уникальный идентификатор - первичный ключ с автоинкрементом.
Прежде чем определять структуру таблицы содержащую информацию об изображениях товаров нужно определиться со структурой каталога хранящего эти изображения. Если товаров много и скинуть все их изображения в одну папку, то работать с такой папкой будет трудно - файловые операции медленные и чем больше загружена файлами директория, тем медленнее будут эти процессы. То есть, если структура каталога хранящего изображения разбита например на категории товаров, то таблица описывающая изображения помимо ссылки на товар и его изображение, также должна ссылаться и на категорию товара. Непосредственно ссылка на товар может быть числовым значением - первичным ключом с автоинкрементом, а может быть и именем. Во втором случае уникальность имени изображения и 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 уже известен. Вот такие общие принципы могут быть. |
Спасибо Вам за столько огромный ответ.:blink: Неожиданно.
Сейчас с работы приеду и буду пережевывать. |
Цитата:
Вообще место вашей темы скорее всего должно быть не в этом разделе, ибо на 99% все вопросы ее затрагивающие должен решать сервер. Главное же в данном вопросе, это как связаны данные, структура их (каталоги). Если этот вопрос у вас будет иметь "слабые места", то гарантированно, что рано или поздно у вас появятся проблемы. Если бы речь была к примеру о добавлении изображений к статье и не просто "притулить", а разместить их в статье, тогда бы ваша тема более тяготела бы к данному разделу. Пусть не имеется визуального редактора и оперируя полем textarea хочется отформатировать текст как статью с "красивой" вставкой в нее изображений: как есть; указать обтекание текстом; указать размер. Заголовок статьи передается отдельным полем, а на параграфы разбиваться текст будут по условию - два подряд перевода строки определяют параграфы. Обтекание справа/слева задается именами классов. Размер изображения определяется оценочно, исходя из известной ширины элемента отображающего статью на странице. В этом случае все, включая и связь добавляемого в статью изображения с местоположением его на странице, будет решаться клиентом. Добавление изображения, это добавление поля file в форму, которое получает в имени индекс по приращению. Этот же индекс добавляется ВВ-тегу [IMG], связывая изображение в тексте с загружаемым изображением. С этим же тегом связывается обтекание, если оно задается, и размер, ели он изменяется. Изменение размера, которые нужно указать и передать на сервер, можно решить оперируя исключительно стилем - указывать ширину/высоту, рассчитывая процентное изменение от исходного размера ширины или высоты. Серверу останется только сделать разбор текста, загружать изображения, заменяя в тексте ВВ-тег связанный с каждым ссылкой на загруженное. |
Часовой пояс GMT +3, время: 15:53. |