Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: iframe загрузка файла

Сообщения:  [1-7] 

 
 автор: АЯ   (19.07.2011 в 14:39)   письмо автору
 
   для: kvins   (19.07.2011 в 09:55)
 

Вопрос какой-то дурацкий... честное слово.
Даже и не знаю - как ответить.

Имеете:
Б* - браузер на пользовательском компьютере
К* - кеш Б*

С* - ваша страница, загруженную в Б*
Ф* - форма загрузки картинки на С*
И* - скрытый ифрейм на С*
М* - место на С*, где должна будет отобразиться загруженная картинка

Х* - хост (сервер), куда будет загружаться картинка

Порядок действий:
1. Пользователь выберет у себя на диске картинку и просабмитит Ф*.
2. Данные Ф* уйдут на Х*, куда и загрузится картинка пользователя.
3. Окончание работ на Х* отразится в И*, который указан таргетом в Ф* в виде помещения туда картинки уже с Х*. Тем самым картинка с Х* попадёт в К*
4. Окончание загрузки И* просигнализирует скрипту, что картинку из К* можно помещать в нужное М*

Отсюда следует, что:
1. результатом работы PHP-программы должна быть отдача в браузер загруженной на сервер картинки. Т. е. последние строки PHP-программы должны быть такими (для варианта GIF-файла):
...
$image = ImageCreateFromGIF ("сформированный путь к файлу на сервере");
header ("Content-type: image/gif");
Imagegif ($image);
ImageDestroy ($image);
?>

2. В форме на кнопке сабмита надо прописать:
<input id='zagr2' type="submit" name="send" value="загрузить" onclick="GLB = 1">
Этим мы отсекаем первое срабатывание загрузки в ифрейм (см. вариант ПЕРВЫЙ в моём предыдущем разъяснении)

3. В теге ифрейма надо прописать:
<iframe id="rFrame" name="rFrame" style="display: none" onload="if (self.GLB) myFunc ()">
Этим мы запускаем функцию после загрузки в ифрейм сохранённой на сервере картинки.

4. Страница должна иметь место под картинку. Логичнее всего иметь её в виде невидимого тега IMG:
<img id="myPic" style="visibility: hidden">

5. Функция myFunc () будет иметь тогда простейший вид:
function myFunc ()
{
var HRF = window.frames ['rFrame'].document.images [0].href;
document.getElementById ('myPic').href = HRF;
document.getElementById ('myPic').style.visibility = 'visible';
}

Это - в самом первом приближении...

  Ответить  
 
 автор: kvins   (19.07.2011 в 09:55)   письмо автору
 
   для: АЯ   (17.07.2011 в 20:33)
 

а можете показать как пользоваться onload ? и куда загружать новую картинку в iframe или в обычный div с каким нить клаcсом или id из css

  Ответить  
 
 автор: АЯ   (17.07.2011 в 20:33)   письмо автору
 
   для: kvins   (17.07.2011 в 18:51)
 

Совет Вы получили не совсем точный.
Поясняю.
Если Вы пропишете в HTML-коде
<iframe style="display: none" onload="myFunc ()"></iframe>
, то функция myFunc () будет вызвана сразу, как только парсер браузера при загрузке страницы дойдёт до закрывающего тега </iframe>. Сиречь у Вас будет ЛИШНИЙ (Вам ненужный) вызов функции. И этот ненужный вызов функции произойдёт по-любому - даже если Вы совершенно НИЧЕГО не пропишете в атрибуте SRC ифрейма (или даже если Вы вовсе этот атрибут не укажете). Браузер автоматически грузит в ифрейм страницу "about:blank", по окончании загрузки которой и происходит событие onload.

Чтобы "отсечь" это лишнее срабатывание, существует два способа:
ПЕРВЫЙ: создать глобальную переменную-флаг со значением, например, равным единице var GLB = 1. И в вызываемой функции myFunc () сделать проверку флага. Если он равен единице, значит - это первый лишний вызов, меняем значение флага на ноль и выходим из функции - if (GLB) {GLB = 0; return}. Таким образом, обрабатываться будут второй и последующие вызовы функции (когда переменная GLB будет равна нулю).
ВТОРОЙ: не прописывать в теге <iframe> инструкцию вызова функции по событию onload, а назначить этот вызов скриптом, после загрузки родительской страницы (методами attachEvent для MSIE и addEventListener для Mozilla).

"Советчик", который дал Вам выше "совет", видимо, что-то где-то слышал о проблемах с "лишним" срабатыванием onload и о том, что это дело решается "динамически" (скриптом то есть - см. способ ВТОРОЙ), вот он и брякнул, что ВЕСЬ сам ифрейм надо создавать динамически.

  Ответить  
 
 автор: Emm   (17.07.2011 в 19:22)   письмо автору
 
   для: kvins   (17.07.2011 в 18:51)
 

С помощью JavaScript, в момент когда отправляете форму, скрипт создает фрейм, отправляет через него файл и прочее, вы с серверного скипта отправляете во фрейм ответ успешности загрузки файла..., а на клиенте отлавливаете его(ответ) и дальше делаете что вам нужно. :)

  Ответить  
 
 автор: kvins   (17.07.2011 в 18:51)   письмо автору
 
   для: Emm   (16.07.2011 в 00:58)
 

а динамически это как?

  Ответить  
 
 автор: Emm   (16.07.2011 в 00:58)   письмо автору
 
   для: kvins   (15.07.2011 в 12:09)
 

Поставьте onload на фрейм, только скрытый фрейм желательно создавать динамически.

  Ответить  
 
 автор: kvins   (15.07.2011 в 12:09)   письмо автору
 
 

помогите пожалуста с загрузкой файла

ну вот я отправил картинку в базу данных с этим кодом и как теперь мне сделать callback функцию чтоб обновленая фотография загрузилась? а то я читал в инете там столько лишнего пишут что не поймешь нечего.

к файлам подключен jquery

файл index.php

<div class='upload_ava'> выберите файл
<iframe id="rFrame" name="rFrame" style="display: none">
</iframe>
<form enctype="multipart/form-data" target="rFrame" action="load_image.php" method="POST">
<input id="zagr" name="upload" type="file" />
<input id='zagr2' type="submit" name="send" value="загрузить" />
</form></div>

  Ответить  

Сообщения:  [1-7] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования