Загрузить JQuery и PHP/MySQL - изменить имя файла при загрузке

Я использую Uploadify как часть формы. Позвольте мне дать вам немного предыстории, это может помочь. У меня есть форма, в которой пользователь может добавлять «проекты» на веб-сайт. Сначала они вводят название проекта и описание. При отправке это обновляет таблицу базы данных PHP/MySQL с именем «проект» и получает идентификатор.

Затем пользователь может загружать файлы в расположение на сервере. Я хочу добавить имя проекта в начало имени файла для загрузки И идентификатор проекта (который мне нужно добавить в базу данных) до начала загрузки, а затем, когда загрузка завершится, добавьте сведения о файле в таблицу базы данных «изображение» - связан с «проектом» через идентификатор проекта.

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

РЕШЕНИЕ:

Мне пришлось использовать описанный ниже метод загрузки, чтобы отправить идентификатор проекта в сценарий загрузки, предварительно заполнив переменную pid результатом mysql_insert_id:

'onSelectOnce': function(event,data) {
     $('#file_upload').uploadifySettings('scriptData', {'pid': pid});
 }

Затем я мог бы получить переменную pid в PHP-скрипте загрузки, используя простой пост:

$pid = $_POST['pid'];

Затем нужно было запустить выбор в этом скрипте, чтобы получить данные, необходимые для базы данных (псевдоним проекта), и добавить их к имени файла перед загрузкой:

    $targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/' . $alias . '-';
    $targetFile =  str_replace('//','/',$targetPath) . $_FILES['Filedata']['name'];

Надеюсь, это поможет людям в будущем.


person Dan Hanly    schedule 14.01.2011    source источник


Ответы (3)


Мне пришлось использовать приведенный ниже метод загрузки, чтобы отправить идентификатор проекта в сценарий загрузки, предварительно заполнив переменную pid результатом mysql_insert_id:

'onSelectOnce': function(event,data) {
     $('#file_upload').uploadifySettings('scriptData', {'pid': pid});
 }

Затем я мог бы получить переменную pid в PHP-скрипте загрузки, используя простой пост:

$pid = $_POST['pid'];

Затем нужно было запустить выбор в этом скрипте, чтобы получить данные, необходимые для базы данных (псевдоним проекта), и добавить их к имени файла перед загрузкой:

$targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/' . $alias . '-';
$targetFile =  str_replace('//','/',$targetPath) . $_FILES['Filedata']['name'];

Надеюсь, это поможет людям в будущем.

person Dan Hanly    schedule 19.01.2011
comment
Я использую этот плагин вместе с загруженным классом php. Найдите в гугле upload.class.php. Я использую PHP для обработки имен файлов и загрузки моего файла на мой сервер. Затем я могу отправить новое имя или переименовать на лету с помощью скрипта, чтобы JS подхватил его и вывел все, что захочу, с помощью функций обратного вызова. - person Eli; 31.01.2011
comment
@ravz, тогда в вашем коде должно быть что-то еще. Я опубликовал это как решение своего собственного вопроса, потому что это решение, которое я использовал, чтобы заставить его работать. Этому почти год, и я использовал его для многих проектов, поэтому по опыту знаю, что он работает. Возможно, задайте новый вопрос и опубликуйте свой код, чтобы мы могли помочь вам напрямую. - person Dan Hanly; 28.12.2011

В скрипте uploadify есть часть, которая дает синтаксис для файла, обрабатываемого формой загрузки. У меня нет сценария под рукой, но я обновил функции обратного вызова onbefore и полного обратного вызова.

используйте перед завершением и добавьте имя к запросу ajax, который сохранит его в вашей базе данных, оттуда просто выполните 2 запроса, загрузите имя изображения и установите user_id для идентификатора пользователя, который, вероятно, из вашего сеанса.

   var = file_before_upload_name: filename // here use the sytax that Uploadify uses to capture the name of the file
   var = file_after_upload_name: filename // here use the sytax that Uploadify uses to capture the name of the file

затем при обратном вызове aftercomplete используйте запрос ajax и установите

uid: uid // из сеанса до: file_before_upload_name, после: file_after_upload_name

в ajax ваши запросы будут выглядеть так

mysql_queries("INSERT INTO `tbl-projects` SET `user_id` = {$_POST['uid']}, `file` = {$_POST['after']}");

//another query here to set the data to your other table that relates to tbl-projects
person Eli    schedule 14.01.2011
comment
Никогда не вставляйте $_POST полей в такой запрос. Вы только что создали ошибку SQL-инъекции. Лучше использовать mysql_real_escape_string для всех входных данных или использовать существующий API базы данных, который привязывает значения к строке SQL. - person vdboor; 14.01.2011
comment
это был пример того, как это сделать, я уверен, что он знает, что должен очистить свои данные перед обновлением в базе данных = P - person Eli; 14.01.2011
comment
ничего страшного, я не собирался оставлять свой сайт открытым для атаки, мне нужен именно принцип настройки кода, индивидуальный синтаксис в порядке :) - person Dan Hanly; 14.01.2011

Попробуйте это http://programmintalk.blogspot.com/2011/02/jquery-uploadify-rename-uploaded-file.html

person rronyy    schedule 12.02.2011
comment
то, как вы передаете имя изображения uploadify.php?=imagename, не будет работать. Если вы передаете какие-либо переменные, вам нужно использовать метод scriptData в моем ответе выше. В остальном наши методы одинаковы - person Dan Hanly; 12.02.2011
comment
и это не uploadify.php?=imagename, это должно быть uploadify.php?image=imagename. попробуй мой пример, у меня сработало и все просто - person rronyy; 01.05.2011