Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

загрузка файлов через iframe

271
26 августа 2007 года
MrXaK
721 / / 31.12.2002
есть обычная форма для загрузки файлов, только в таргете указано имя ифрэйма...
есть 2 проблемы:
1) инпуты, что есть в форме почему-то не передаются.. метод POST
2) после отправки файла, работы с ним в серверной части и посылки ответа, если попытаться загрузить ещё один файл через эту же форму, то он не грузится... js-часть отрабатывает, а файл на сервер не заливается и серверная часть не отрабатывает...
1.8K
26 августа 2007 года
Ghirik
260 / / 15.03.2007
А где это всё? Код.
271
26 августа 2007 года
MrXaK
721 / / 31.12.2002
ну если надо, то вот:
форма
Код:
<script>
function sub_upl_form(){
    window.document.getElementById('loading-layer').style.display='block';
    window.document.upl_form.submit();
    window.document.getElementById('file').disabled = true;
    window.document.getElementById('go').disabled = true;
}
</script>

<a href="gallery.php" target=_top>Вернуться к галерее</a><br/>
<div id="loading-layer" style="display: none;"><div style="font-weight: bold;" id="loading-layer-text">Загрузка. Пожалуйста, подождите...</div><br><img src="/images/progress.gif" border="0"></div>

<iframe src="" name="upl_frame" width=0 height=0 style="display:none;"></iframe>
<script>
document.write('<form name="upl_form" &#111;&#110;Submit="sub_upl_form();" method="post" enctype="multipart/form-data" action="out.php?act=doupload&rnd='+(new Date().getTime())+'" target="upl_frame">');
</script>
<b>Адрес файла:</b> <input type=file name=file id=file>
<br />
<b>Ваш комментарий к фото: </b><input type=text name=acomment value=""><br />
<input type=button name=go value=go id=go &#111;&#110;Click="sub_upl_form();">
</form>
<div id="result"></div>


обработчик что-то типа такого:
 
Код:
if( $_FILES['file']['error'] == 0 ) {
 // и здесь уже работа с фалом, копирование, обработка, ресайзинг, наклеивание полупрозрачного рисунка и т. д.
 // $num - кол-во фоток юзера +1 (берётся из бд)
    $x = $_SESSION['id']."n".$num;
    $fn = "IM".$x.".jpg";
    $fn2 = $this->out->rootPath."/gallery/gal/".$fn;
    copy( $_FILES['file']['tmp_name'], $fn2 );
}


дык вот, если в обработчике сделать print_r($_POST) то он пустой... print_r($_REQUEST) показывает только то что в $_GET ну и сессии..
1.8K
26 августа 2007 года
Ghirik
260 / / 15.03.2007
На вскидку.
В JavaScript не допускается использование таких "loading-layer" идентификаторов.
Следует использовать знак подчеркивания.
Если это не поможет, скажите. Тогда попробую разобраться.
271
27 августа 2007 года
MrXaK
721 / / 31.12.2002
хз... для загрузки одного файла из окна всё работает... только поле acomment не передаётся почему-то... Firebug показывает что вообще не передаётся... а сам файл грузится... а потом если в ответе убирать disabled у формы и пытаться второй файл загрузить, то уже не грузится
15
27 августа 2007 года
shaelf
2.7K / / 04.05.2005
2Ghirik Допускает и я всегда именно такие и делаю, т.к. они более читаемы + xml чуствителен к строчная/прописная и поэтому рекомандуется использовать маленькие.
1.8K
27 августа 2007 года
Ghirik
260 / / 15.03.2007
Цитата:
Допускает и я всегда именно такие и делаю



Странно, IE выдает, ошибку синтаксиса.
loading-layer это же арифметическая операция.

15
27 августа 2007 года
shaelf
2.7K / / 04.05.2005
В одиночных кавычках всё трактуется как строка.
1.8K
27 августа 2007 года
Ghirik
260 / / 15.03.2007
Ага, вот этого я не знал. Но у него двойные стоят. Нужно вначале записать названия правильно, прежде чем дальше разбираться.
И как к элементу с таким именем обращаться? Что, только через getElementById?
Не напишешь ведь document.form.loading-layer

На vingrad-е то же, написали имя фрейма - iframe, а id - frame, голова кругом от таких примочек :)
271
27 августа 2007 года
MrXaK
721 / / 31.12.2002
дык loading-layer это див, и он даж не внутри формы) а в getElementById('loading-layer') одиночные стоят..
и код работает, одна картинка нормально закачивается) почему больше нельзя закачать с той же страницы, и почему другие поля формы не передаются, вот в чём вопрос)
1.8K
27 августа 2007 года
Ghirik
260 / / 15.03.2007
Ладно, если глотает такие названия, пускай глотает.
Попробуйте выводить методом "write" только содержимое "action".

Или всю форму(без фрейма) методом innerHTML
271
27 августа 2007 года
MrXaK
721 / / 31.12.2002
writeом там выводится только чтобы файл не кешировался... можно вообще статичный хтмл поставить... от этого ничего не меняется, $_POST всё равно не передаётся..
1.8K
27 августа 2007 года
Ghirik
260 / / 15.03.2007
Я говорил про action не для передачи $_POST, а для повторной загрузки файла. Про $_POST я ещё не думал. времени нет.

Вот, уже подумал. Не пробовали использовать что нибудь одно? GET или POST. А то, Вы указываете метод POST, а сами лепите аргументы к файлу обработчика, а это уже GET.
271
28 августа 2007 года
MrXaK
721 / / 31.12.2002
мм, ну по-моему никто не запрещает при методе POST пихать GET в action.. тем не менее сделал так как вы посоветовали:
 
Код:
<form name="upl_form" &#111;&#110;Submit="sub_upl_form();" method="post" enctype="multipart/form-data" action="out.php" target="upl_frame">
<input type=hidden name=act value=doupload>
<input type=hidden name=do value=gallery>
<input type=file name=file>
<input type=text name=acomment value="">
<input type=button name=go value=go &#111;&#110;Click="sub_upl_form();" id=go>
</form>

в итоге ничего не работает) по firebugу в out.php POST-параметры вообще не передаются
1.8K
28 августа 2007 года
Ghirik
260 / / 15.03.2007
Я сейчас буду для себя делать такую же штуку - ответ обработчика в скрытый фрейм. JavaScript уже сделал. вот здесь есть мой код, он работает во всех браузерах. Мне проще написать своё чем разбираться в чужом. чем я сейчас и займусь. Потом выложу.

Я не видел, что бы использовали GET и POST одновременно, по одному событию субмит, вот и предположил, что может не заработать.
1.8K
28 августа 2007 года
Ghirik
260 / / 15.03.2007
Сделал, работает везде.
Страница с формой и скрытым фреймом:
[HTML]
<html>
<body>
<div id=div1></div>
<iframe id=I1 name=I1 style="display: none">
</iframe>
<form method=POST action=answer.php target=I1 enctype=multipart/form-data>
<input type=text name=T1>
<input type=submit value=Отправить name=B1>
</form>
</body>
</html>[/HTML]

Файл answer.php :

[HTML]
<html>
<body onload="parent.document.getElementById('div1').innerHTML=document.body.innerHTML">
<p id=txt>
<?php
print_r($_POST);
?>
</p>
</body>
</html>[/HTML]
Данные передаются в div на странице с формой.
1.8K
28 августа 2007 года
Ghirik
260 / / 15.03.2007
Отредактировал предыдущее сообщение.
Использовать событие onload в iframe нежелательно. В IE это событие возникает даже при отсутствии контента.
271
28 августа 2007 года
MrXaK
721 / / 31.12.2002
хм... работает)) репу кинул.. ушёл разбираться со своим скриптом)
32K
20 сентября 2007 года
amo25
6 / / 20.09.2007
Вот короткий работающий пример: загрузка файла через iframe
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог