<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" onSubmit="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 onClick="sub_upl_form();">
</form>
<div id="result"></div>
загрузка файлов через iframe
есть 2 проблемы:
1) инпуты, что есть в форме почему-то не передаются.. метод POST
2) после отправки файла, работы с ним в серверной части и посылки ответа, если попытаться загрузить ещё один файл через эту же форму, то он не грузится... js-часть отрабатывает, а файл на сервер не заливается и серверная часть не отрабатывает...
А где это всё? Код.
форма
Код:
обработчик что-то типа такого:
Код:
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 );
}
// и здесь уже работа с фалом, копирование, обработка, ресайзинг, наклеивание полупрозрачного рисунка и т. д.
// $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 ну и сессии..
В JavaScript не допускается использование таких "loading-layer" идентификаторов.
Следует использовать знак подчеркивания.
Если это не поможет, скажите. Тогда попробую разобраться.
хз... для загрузки одного файла из окна всё работает... только поле acomment не передаётся почему-то... Firebug показывает что вообще не передаётся... а сам файл грузится... а потом если в ответе убирать disabled у формы и пытаться второй файл загрузить, то уже не грузится
2Ghirik Допускает и я всегда именно такие и делаю, т.к. они более читаемы + xml чуствителен к строчная/прописная и поэтому рекомандуется использовать маленькие.
Цитата:
Допускает и я всегда именно такие и делаю
Странно, IE выдает, ошибку синтаксиса.
loading-layer это же арифметическая операция.
В одиночных кавычках всё трактуется как строка.
И как к элементу с таким именем обращаться? Что, только через getElementById?
Не напишешь ведь document.form.loading-layer
На vingrad-е то же, написали имя фрейма - iframe, а id - frame, голова кругом от таких примочек :)
и код работает, одна картинка нормально закачивается) почему больше нельзя закачать с той же страницы, и почему другие поля формы не передаются, вот в чём вопрос)
Попробуйте выводить методом "write" только содержимое "action".
Или всю форму(без фрейма) методом innerHTML
writeом там выводится только чтобы файл не кешировался... можно вообще статичный хтмл поставить... от этого ничего не меняется, $_POST всё равно не передаётся..
Вот, уже подумал. Не пробовали использовать что нибудь одно? GET или POST. А то, Вы указываете метод POST, а сами лепите аргументы к файлу обработчика, а это уже GET.
Код:
<form name="upl_form" onSubmit="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 onClick="sub_upl_form();" id=go>
</form>
<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 onClick="sub_upl_form();" id=go>
</form>
в итоге ничего не работает) по firebugу в out.php POST-параметры вообще не передаются
здесь есть мой код, он работает во всех браузерах. Мне проще написать своё чем разбираться в чужом. чем я сейчас и займусь. Потом выложу.
Я не видел, что бы использовали GET и POST одновременно, по одному событию субмит, вот и предположил, что может не заработать.
Я сейчас буду для себя делать такую же штуку - ответ обработчика в скрытый фрейм. JavaScript уже сделал. вот
Я не видел, что бы использовали GET и POST одновременно, по одному событию субмит, вот и предположил, что может не заработать.
Страница с формой и скрытым фреймом:
[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 на странице с формой.
Использовать событие onload в iframe нежелательно. В IE это событие возникает даже при отсутствии контента.
хм... работает)) репу кинул.. ушёл разбираться со своим скриптом)
Вот короткий работающий пример: