Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: AJAX upload

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (4): [1] 2 3 4 »   

> Описание: передача имени только что загруженного файла
natariga
Отправлено: 15 Августа, 2011 - 20:58:42
Post Id


Частый гость


Покинул форум
Сообщений всего: 199
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




Наверное, не трудный вопрос. Но не могу никак словить. Помогите, плис.

Использую ajaxupload.3.5.js. Все классно, все получается и всем управляю. В чем трудность возникла:

1. Нажимаем Кнопку Upload File
2. Выбираем файл
3. Передается все через ajax в php модуль
4. PHP-модуль: загрузка файла, проверка на ошибки, возврат результата - или номера ошибки или имени файла (записывается файл под новым именем)
5. Отображение или ошибки, или превью загруженного файла
6. Запись имени файла в value input hidden, для передачи потом POST form
Все 6 шагов работают суперски!

Не получается новое имя файла присвоить какой-то переменной, которую бы я при очередном вызове функции ajax отправляла бы в php модуль (чтоб удалить предыдущий файл, когда решили загрузить новый)
Не получается именно присвоить. Потому что когда я приравниваю какуюнить константу, то в php модуль все передается и я ее вижу. Мне надо nameoldfile приравнять только что полученному ответу response

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. $(function(){
  3.         var btnUpload=$('#upload');
  4.         var status=$('#status');
  5.         var nameoldfile=$('#TempNameFileUpload').val();
  6.         new AjaxUpload(btnUpload, {
  7.                 action: 'upload_file.php',
  8.                 name: 'uploadfile',
  9.  
  10.                     data: {
  11.                         valueFile : nameoldfile
  12.                         },
  13.                 onSubmit: function(file, ext){
  14.                         $("#status").show();
  15.                         },
  16.                 onComplete: function(file, response){
  17.                         $("#status").hide();
  18.                         var result = response.substring(0,1);
  19.                         if (result == '*')
  20.                         {
  21.                         var resultMess = response.substring(1,2);
  22. ...
  23.                         }
  24.                         else
  25.                         {
  26.                     $("#files").html('<img src="./photos/th_'+response+'" alt="" /><br />'+file).css("color","#F26262");
  27.                     document.ExpertRegistr.TempName_FilePhoto.value = response;
  28.                
  29.                         }
  30.                         }
  31.                         }
  32.                 });
  33.  
  34.         });
  35.  
  36. <input type="hidden" id="TempNameFileUpload" name="TempName_FilePhoto" value="<? echo $_POST['TempName_FilePhoto']; ?>" />
  37.  

Т.е. вот эта переменая nameoldfile никак не хочет принимать нужное мне значение. Я, думаю, что мое не важное знание JS не дает мне правильно решить эту задачу. Помогите, добрые и умные люди, плис! Растерялся

(Отредактировано автором: 16 Августа, 2011 - 07:25:46)

 
 Top
natariga
Отправлено: 15 Августа, 2011 - 23:44:12
Post Id


Частый гость


Покинул форум
Сообщений всего: 199
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




не, никак не получается. Может я не так пытаюсь это сделать. Но суть в том, что мне надо передать имя предыдущего загруженного через ajax файла, чтоб я в php могла бы его delete перед загрузкой следующего.... Не понял
 
 Top
natariga
Отправлено: 16 Августа, 2011 - 08:09:35
Post Id


Частый гость


Покинул форум
Сообщений всего: 199
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




Читаю, читаю инет и нигде не вижу ответа. А как удаляют файлы (картинки) при обновлении (загрузки) других....
Может я, вообще, не тем путем иду...
Задача:
Клиент выбирает файл - ему превьюха (через ajax), не нравится - он выбирает другой, ему опять превьюха.
А на стороне сервера - загрузился первый файл, ему присвоилось уникальное имя и передалось в форму клиенту. При выборе другого файла - удаляется предыдущий, грузится новый, присваивается уникальное имя, передается в форму клиенту....
Не понял Хм Не понял
 
 Top
Viper
Отправлено: 16 Августа, 2011 - 09:04:20
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




natariga ну так а что мешает отдавать обратно json'ом имя предыдущего файла и тулить его имя в скрытую форму или в сессию(безопаснее)?


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
natariga
Отправлено: 16 Августа, 2011 - 09:15:57
Post Id


Частый гость


Покинул форум
Сообщений всего: 199
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




Viper пишет:
natariga ну так а что мешает отдавать обратно json'ом имя предыдущего файла и тулить его имя в скрытую форму или в сессию(безопаснее)?


Так я ж вроде все так и делаю. Немножко другим путем. Имя загруженного файла помещаю в основной программе в value скрытого инпута.
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. document.ExpertRegistr.TempName_FilePhoto.value = response;
  3.  

А при очередной загрузки превьюхи передаю в виде доп.данных в ajax-php значение этого value
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. var nameoldfile=$('#TempNameFileUpload').val();
  3. ...
  4.  data: {valueFile : nameoldfile},
  5.  


а не может быть такого, что в этом плагине чтото с доп.данными для передачи. Потому что я добавила еще один функционал. Когда загрузили превью, добавляется кнопка - Удалить. И по ее нажатию в другой функции ajax-php точно таким же способом выбирается имя из input и спокойненько передается на сервер. Все работает, все передается... А?!
 
 Top
Viper
Отправлено: 16 Августа, 2011 - 09:50:05
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




natariga document.ExpertRegistr.TempName_ FilePhoto.value = response; зачем так?
можно проще
CODE (javascript):
скопировать код в буфер обмена
  1. $("input:hidden").val(response);


Я бы предложил вам перевести ответ сервера в json-формат.
т.е. схема такая.
при отсылке данных в php-скрипт проверяем не пустое ли скрытое поле, если да, то просто загружаем данные и отвечаем скрипту обратно

PHP:
скопировать код в буфер обмена
  1. header("Content-type: application/json");
  2. $json = json_encode(array('filename'=>'тут переменная содержащая имя загруженного файла', 'success'=>1));
  3. echo $json;

в коде выше можно сделать дополнительно проверку на успешность обработки файла(сохранилось или нет и т.д.). И в success пихать код ответа.

Далее в js-скрипте

...
CODE (javascript):
скопировать код в буфер обмена
  1. onComplete: function(response){
  2.         $("#status").hide();
  3.         var obj = $.parseJSON(response);
  4.         if (obj.success == 1) {
  5.                 // записываем obj.filename в скрытое поле и выполняем какие-то доп. действия
  6.         } else {
  7.                 alert('Ошибка!');
  8.         }
  9. }


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
natariga
Отправлено: 16 Августа, 2011 - 10:20:01
Post Id


Частый гость


Покинул форум
Сообщений всего: 199
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




Viper пишет:
Я бы предложил вам перевести ответ сервера в json-формат.

да, Ваш ответ понятен, и, конечно, все изящнее смотрится, но у меня другая проблема. Я не могу в php передать имя файла. Она почему-то не передается из этой скрытой переменной!!!!!
Т.е. не отрабатывает вот этот кусок!
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2.     var qIdenitfF=$('#TempNameFileUpload').val();
  3.  
  4.    data: {valueFile : qIdenitfF },
  5.  


вначале это имя пустое, но потом скрипт его все время заполняет.
в скрипте по окончанию стоит:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. $("input:hidden").val(resultMess);
  3.  

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <input type="hidden" id="TempNameFileUpload" name="TempName_FilePhoto" value="<? echo $_POST['TempName_FilePhoto']; ?>" />
  3.  

Вот где беда...
Кстати, очень красиво выходит по Вашему с json-формат. только я чтото не правильно сделала с этой шапкой
PHP:
скопировать код в буфер обмена
  1.  
  2. header("Content-type: application/json");
  3.  

выскакивает поп-апокно и результат потом не в броузер идет, а в нотепад. Но даже пока не про то вопрос. Почему имя файла не передается из скрипта в пхп.... Нахмурился
 
 Top
SAD
Отправлено: 16 Августа, 2011 - 10:30:58
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




вы уверены, что имя приходит из php в js?
(Добавление)
есть где потестить?
(Добавление)
вот так нужно header('Content-type: text/json');

(Отредактировано автором: 16 Августа, 2011 - 10:38:49)

 
 Top
natariga
Отправлено: 16 Августа, 2011 - 10:39:02
Post Id


Частый гость


Покинул форум
Сообщений всего: 199
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




Выкладываю полные тексты, чтоб не кусочками, а картинка вся складывалась. Помогите умные умные добровольцы помошники, пожайлуста. Просто уже горестно,от чего не срабатывает! Ниндзя
Итак.
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2.         $(document).ready(function() {
  3.                 var qIdenitfF=$('#TempNameFileUpload').val();
  4.                 var btnUpload=$('#upload');
  5.                 var status=$('#status');
  6.                 new AjaxUpload(btnUpload, {
  7.                         action: 'upload_filenew.php',
  8.                         name: 'uploadfile',
  9.  
  10.                 data: "IDC=" + qIdenitfF,
  11.                         cache: false,
  12.                         onSubmit: function(file, ext){
  13.                                 $("#status").show();
  14.                                 },
  15.                         onComplete: function(file, response){
  16.                                 $("#status").hide();
  17.                                 var obj = $.parseJSON(response);
  18.                                 var resultMess = obj.filename;
  19.                                 if (obj.success == '3')
  20.                                 {
  21.                                         $("#SpanError").text(resultMess);
  22.                                 }
  23.                                 if (obj.success == '2')
  24.                                 {
  25.                                         if (resultMess == '1')  {$("#SpanError").text('error - файл не загрузился');}
  26.                                         if (resultMess == '2')  {$("#SpanError").text('error - размер больше максимально допустимого');}
  27.                                         if (resultMess == '3')  {$("#SpanError").text('error - тип файла не jpeg');}
  28.                                 }
  29.                                 if (obj.success == '1')
  30.                                 {
  31.                                         $("#img_exp").hide();
  32.                     $("#files").html('<img src="./photos/th_'+resultMess+'" alt="" /><br />'+file).css("color","#F26262");
  33.                         $("input:hidden").val(resultMess);
  34.                         $("#delfile").text('delete');
  35.  
  36.                                 }
  37.                         }
  38.                 });
  39.  
  40.  
  41.  
  42. $("#delfile").click(function() {
  43.  
  44.         var qIdenitf  = $('#TempNameFileUpload').val();
  45.          $.ajax({
  46.                 url: "delupload.php",
  47.                 type: "POST",
  48.         data: "IDC=" + qIdenitf,
  49.                 cache: false,
  50.                 success: function (result)
  51.                 {
  52.                         $("#SpanError").text(result).css("color","#F26262");
  53.                 }
  54.         });
  55. });
  56.  

теперь 2 пхп програмки.
1 - загрузка файла
PHP:
скопировать код в буфер обмена
  1.  
  2. if (!empty($_POST['IDC']))
  3. {
  4.         $nameFileSend = $_POST['IDC'];
  5.         echo $json = json_encode(array('filename'=>$nameFileSend, 'success'=>3));
  6. }
  7. else
  8. {
  9.  
  10. $error_download = photo_value("uploadfile");
  11. if ($error_download==0)
  12. {
  13.         $x=0;
  14.         while ($x==0)
  15.         {
  16.                 $numerok = novoe_name_foto($f);
  17.                 $filename_jpg   = $link_photo.$numerok.'.jpg';
  18.                 if (!file_exists($filename_jpg)) $x=1;
  19.         }
  20.         $FilePhoto  =   photo_upload_resize("uploadfile",$numerok,0,$link_photo);
  21.         $json = json_encode(array('filename'=>$FilePhoto, 'success'=>1));
  22. }
  23. else
  24. {
  25.         $json = json_encode(array('filename'=>$error_download, 'success'=>2));
  26. }
  27. echo $json;
  28. }
  29.  

и вторая программка, для удаления по кнопке удалить:
(не сделанная, она просто пока печатает имя файла на удаление.

И сам html
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <form action="<? echo "$editFormAction";  ?>"  method="post" enctype="multipart/form-data" name="ExpertRegistr" id="main_form_reg_exp" >
  3.         <div id="mainbody" >
  4.                 <div id="person_photo">
  5.                         <p>Фотография:</p>
  6.                         <span class="commentField">Требуемый формат:*.jpg</span><br>
  7.                         <span class="commentField">Макс.размер: 3mb</span>
  8.             <div class="clear_row">&nbsp;</div>
  9.  
  10.                         <div id="img_exp">
  11.                                 <img src="../images/navphotobig.jpg" alt="" class="nav_photo">
  12.                         </div>
  13.  
  14.                         <div id="files" ></div>
  15.                         <div id="SpanError"></div>
  16.                         <input type="hidden" id="TempNameFileUpload" name="TempName_FilePhoto" value="<? echo $_POST['TempName_FilePhoto']; ?>" />
  17.  
  18.                         <div id="delfile" ></div>
  19.                         <div id="upload" ><span>Upload File<span></div>
  20.                         <span id="status" style="display:none;"><img src="../images/small_preloader.gif"></span>
  21.  
  22.                 </div>
  23.         </div>
  24.         <input type="submit" class="buttons updateCart" name="submit" id="updateCart" value=" Отправить " />
  25. </form>
  26.  

ПОЧЕМУ НЕ ПЕРЕДАЕТСЯ ИЗ ПЕРВОГО СКРИПТА ИМЯ ФАЙЛА в ПХП. Т.е. у меня ни разу не получается obj.success == '3'

При этом аналогичный скрпитик по удалению все передает.............. Однако

(Отредактировано автором: 16 Августа, 2011 - 10:44:32)

 
 Top
SAD
Отправлено: 16 Августа, 2011 - 10:43:10
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




как все ж некрасиво... можете это выложить в сеть? хочу потестить
 
 Top
natariga
Отправлено: 16 Августа, 2011 - 10:46:41
Post Id


Частый гость


Покинул форум
Сообщений всего: 199
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




SAD пишет:
как все ж некрасиво... можете это выложить в сеть? хочу потестить

щас
(Добавление)
[url]
http://hpsite[dot]natariga[dot]lv/test_uploadfilenew.php
[/url]
 
 Top
SAD
Отправлено: 16 Августа, 2011 - 10:59:19
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




не знаю как оно там это превью показывать умудряется, но у меня вываливается ошибка в jquery

CODE (javascript):
скопировать код в буфер обмена
  1. Security error"  code: "1000
  2. http://hpsite.natariga.lv/js/jquery-1.4.4.min.js
  3. Line 53


это не самый лучший uploader, который вы нашли
и если грузится одно фото, то можно из без него обойтись - обычными стандартными методами загрузки фото, правда без сабмита формы
 
 Top
natariga
Отправлено: 16 Августа, 2011 - 11:12:58
Post Id


Частый гость


Покинул форум
Сообщений всего: 199
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




субмит нужен, потому что это лишь одно из многих полей, да еще и несколько шаговой регистрации.
и все же работает и делает так, как мне надо, я всем могу управлять, кроме удаления предыдущего файла.
Хорошо, готова на другой uploader глянуть. Только уже теряюсь. Потому чтоэто мне показался самым доступным и лаконичным.
Не подскажите тогда какой лучше?
Растерялся
 
 Top
SAD
Отправлено: 16 Августа, 2011 - 11:32:34
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




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

привожу пример. загрузили фото стандартным способом, задали ему имя, например, 1111.
пользователь смотрит, ага, фотка плохая, опять загружает файл, даете ему имя 1111, и скрипт заменит предыдущий файл - удалять не нужно.
 
 Top
natariga
Отправлено: 16 Августа, 2011 - 11:47:36
Post Id


Частый гость


Покинул форум
Сообщений всего: 199
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




SAD пишет:
загрузили фото стандартным способом


Что такое стандартным способом? Мне ведь надо без перерисовки экрана. Потому ajax.

Я не против давать одно и тоже имя. Яготова под ним все время записывать и ничего в результате не удалять.
Проблема одна и та же!
Как мне в этом скрипте передать в php тоже имя, которое было накануне из него же и прочитано.
Отличная идея, я, действительно, под этим же именем бы и дальше записывала картинки. Только как мне его в php получить........ Не понял
 
 Top
Страниц (4): [1] 2 3 4 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB