Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > загрузка файлов динамически


Автор: bazzjr 19.1.2009, 20:47
Всем привет.
Вопрос в следущем:

есть форма, и маленький скриптик принимающаи файл от юзера.

Код

function sub_upl_form(){
    window.document.getElementById('loading-layer').style.display='block';
    window.document.upl_form.submit();
}
</script>
<form name="upl_form" id="upl_form"  onSubmit="sub_upl_form();" method="post" enctype="multipart/form-data" action="upload.php" target="upl_frame">


<div id="loading-layer"><div id="loading-layer-text">Загрузка. Пожалуйста, подождите...</div></div>


<iframe id="upl_frame" name="upl_frame" width=0 height=0 style="display:none;"></iframe>
<form name="upl_form" id="upl_form" method="post" enctype="multipart/form-data"  target="upl_frame">
    <input name="userfile" type="file">
    <input type="button" value="Загрузить" name="submit">
</form>

<span id="foto"></span>


ну и естественно все это обрабатывается в пхп файле, и выдает картинку.

как сделать так чтобы файл загружался при "onChange" а не при submit?
вообщем хочу так же как и на сайте dom.ru, когда подаешь объявление и добавляешь фото к обьяве.

Спасибо.

Автор: NNaarreekk 20.1.2009, 00:03
Код

function sub_upl_form(){
    window.document.getElementById('loading-layer').style.display='block';
    window.document.upl_form.submit();
}

Код

<form name="upl_form" id="upl_form" method="post" enctype="multipart/form-data" action="upload.php" target="upl_frame">
<div id="loading-layer"><div id="loading-layer-text">Загрузка. Пожалуйста, подождите...</div></div>
<iframe id="upl_frame" name="upl_frame" width=0 height=0 style="display:none;"></iframe>
<form name="upl_form" id="upl_form" method="post" enctype="multipart/form-data"  target="upl_frame">
    <input name="userfile" type="file" onchange="sub_upl_form();">
    <input type="button" value="Загрузить" name="submit">
</form>
<span id="foto"></span>

Автор: bazzjr 20.1.2009, 06:34
 <input name="userfile" type="file" onchange="sub_upl_form();">

К сожалению этот вариант я и сам делал, но он не работает.
При использовании onchange="sub_upl_form(), почему то не вызывается файл upload.php.

Автор: NNaarreekk 20.1.2009, 09:10
Говорили же мне люди проверяй перед тем кк написать smile 

Код

function sub_upl_form(){
    window.document.getElementById('loading-layer').style.display='block';
    window.document.upl_form.submit();
}


Код

<div id="loading-layer"><div id="loading-layer-text">Загрузка. Пожалуйста, подождите...</div></div>
<iframe id="upl_frame" name="upl_frame" width=0 height=0 style="display:none;"></iframe>

<form name="upl_form" id="upl_form" method="post" enctype="multipart/form-data" action="upload.php" target="upl_frame">
    <input name="userfile" type="file" onchange="sub_upl_form();">
</form>

<span id="foto"></span>


Обяснишь почему два <form-а? ;)

Автор: bazzjr 20.1.2009, 20:19
Непойму прикол... почему то так работает только на локальной машине... выкладываю в инет файл не загружается, только появляится и висит табличка "Загрузка. Пожалуйста, подождите..."

В чем может быть ошибка?..
Причем на серваке все настройки  по файлам и т.п. в поряде.

КОД upload.php:

Код

<?php

require("inc/config.php");


$directory_location="files/domfoto/";
if (is_uploaded_file($_FILES['userfile']['tmp_name'])){
        $sim = strlen($_FILES['userfile']['name']);
        $type = trim(substr($_FILES['userfile']['name'],$sim-3,$sim));
        $time_=time();
        $filename = $time_.".$type";
        copy($_FILES['userfile']['tmp_name'], $directory_location.$filename);
}
$error=0;
if ($error==0){
    echo '<script>';
    echo 'window.parent.document.getElementById(\'foto\').innerHTML=\''.$err.'<center><img align=center src="'.$url_foto.$filename.'"></center>\';';
    echo 'window.parent.document.getElementById(\'loading-layer\').style.display=\'none\';';
    echo '</script>';
}else{
    echo '<script>alert("Ошибка при загрузке файла");</script>';
    echo '<script>';
    echo 'window.parent.document.getElementById(\'loading-layer\').style.display=\'none\';';
    echo '</script>';
}
?>

Автор: NNaarreekk 20.1.2009, 22:37
Убери display:none; из фрейма и посмотри какие Warrning-и появляются

Автор: bazzjr 21.1.2009, 00:48
Убрал... все осталось так же... т.е. при при выборе файла появляется табличка, и все... висит так... занрузки файла не происходит.
На localhost все работает, файл грузится табличка убирается (после загрузки).

Блин третий день АП клаву бьюсь гологой,  и танцевал с бубнами уже...  непомогает...
неужели нет вариков реализовать такую же загрузку файлов как и на сайте dom.ru????   smile 

Автор: unicross 21.1.2009, 01:26
bazzjr, Ваш вопрос больше по JS, чем по PHP. Если бы вы задали вопрос там, то сразу получили бы ответ...

Код

<script language="JavaScript">
function sub_upl_form(){
    window.document.getElementById('loading-layer').style.display='block';
    window.document.getElementById('upl_form').submit();
}
</script>

<div id="loading-layer" style="display: none;"><div id="loading-layer-text">Загрузка. Пожалуйста, подождите...</div></div>

<iframe id="upl_frame" name="upl_frame" width=20 height=20 style="display:none;"></iframe>
<form name="upl_form" id="upl_form" method="post" enctype="multipart/form-data"  target="upl_frame" action="upload.php">
    <input name="userfile" type="file" onchange="sub_upl_form();">
</form>

<span id="foto"></span>


Файл upload.php:
Код

<?php
if (is_uploaded_file($_FILES['userfile']['tmp_name'])){
        $sim = strlen($_FILES['userfile']['name']);
        $type = trim(substr($_FILES['userfile']['name'],$sim-3,$sim));
        $time_=time();
        $filename = $time_.".$type";
        copy($_FILES['userfile']['tmp_name'], $filename);
    $error=0;
}
if ($error==0){
    echo '<script>';
    echo 'window.parent.document.getElementById(\'foto\').innerHTML=\''.$err.'<center><img align=center src="'.$url_foto.$filename.'"></center>\';';
    echo 'window.parent.document.getElementById(\'loading-layer\').style.display=\'none\';';
    echo '</script>';
}else{
    echo '<script>alert("Ошибка при загрузке файла");</script>';
    echo '<script>';
    echo 'window.parent.document.getElementById(\'loading-layer\').style.display=\'none\';';
    echo '</script>';
}
?>


Удачи!

Автор: bazzjr 21.1.2009, 17:06
unicross  вставил пути  и все разаботало!  smile  smile
выходит прикол в том что вместо window.document.upl_form.submit(); надо писать window.document.getElementById('upl_form').submit(); ????? 

Автор: unicross 21.1.2009, 17:40
Цитата(bazzjr @  21.1.2009,  17:06 Найти цитируемый пост)
выходит прикол в том что вместо window.document.upl_form.submit(); надо писать window.document.getElementById('upl_form').submit(); ????? 

Нет. Думаю будет работать и так...

bazzjr, во-первых у вас было 2 формы:
Цитата(bazzjr @  19.1.2009,  20:47 Найти цитируемый пост)
<form name="upl_form" id="upl_form"  onSubmit="sub_upl_form();" method="post" enctype="multipart/form-data" action="upload.php" target="upl_frame">

Цитата(bazzjr @  19.1.2009,  20:47 Найти цитируемый пост)
<form name="upl_form" id="upl_form" method="post" enctype="multipart/form-data"  target="upl_frame">

Как видете во втором теге <form> нет action="upload.php".

Во-вторых, не было параметра style со значением none в div
Код

<div id="loading-layer" style="display: none;">


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)