Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Не работает скрипт в Опере (https://javascript.ru/forum/dom-window/2047-ne-rabotaet-skript-v-opere.html)

stosen 25.10.2008 20:27

Не работает скрипт в Опере
 
Доброго времени суток!
Пользователь загружает путь файла в текстовое поле с помощью скрипта.
Подскажите мне, плиз, почему этот скрипт в IE работает нормально, а в Опере не хочет работать
<SCRIPT language="javascript">  

function DialogFileOpen(OId)  
{  
var df=document.createElement("INPUT");  
df.id="df";  
df.setAttribute("type", "file");  
df.style.visibility="hidden";  
document.Form1.appendChild(df);  
df.click();  
if(df.value) { document.getElementById(OId).value=df.value; }  
document.Form1.removeChild(df);  
}  
</SCRIPT>  
...............  
...............  
<INPUT id="ThemeFile" name="ThemeFile" type="text" >  
<INPUT type="button" value="Ссылка" onclick="DialogFileOpen('ThemeFile')" >  
...............

Kolyaj 25.10.2008 22:05

Потому что принудительно открыть окно загрузки файла можно только в ИЕ и Сафари.

stosen 26.10.2008 14:16

А как же мне быть? Можно ли открыть это окно загрузки файлов как-то по-другому?

Kolyaj 26.10.2008 14:17

Дайте пользователю элемент file, пусть сам на него нажимает.

stosen 26.10.2008 16:01

Дело в том, что у меня есть несколько полей. При нажатии на кнопку отправки формы у меня выполняется скрипт по проверке правильности ввода данных на сервере на PHP. Если какие-то данные введены неверно, то эта страница загружается повторно, но уже с введенными правильными значениями (я беру их из сессии). Если я поставлю элемент file, то не смогу задать атрибут value, чтобы записать в поле ранее выбранный пользователем путь

Kolyaj 26.10.2008 16:07

А если вы не поставите элемент file, то вы не сможете закачать файл на сервер.

stosen 26.10.2008 16:31

Почему нет. Мне просто нужно передать методом POST абсолютный путь к файлу.
А можно ли как-нибудь задать значение value в поле file (например, при загрузке страницы)?

Kolyaj 26.10.2008 16:43

Цитата:

Сообщение от stosen
Мне просто нужно передать методом POST абсолютный путь к файлу.

И что вы с ним будете делать?

Цитата:

Сообщение от stosen
А можно ли как-нибудь задать значение value в поле file (например, при загрузке страницы)?

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

stosen 26.10.2008 16:54

В PHP есть функция copy(path1,path2), где path1 - это новый путь к файлу на сервере, а path2- это абсолютный путь к этому файлу на диске пользователя.

Подскажите как задать value. Попробую...

Kolyaj 26.10.2008 20:03

Цитата:

Сообщение от stosen
path2- это абсолютный путь к этому файлу на диске пользователя

Это вот вы с чего такое взяли?

EugenyK 26.10.2008 20:32

stosen,
Вам надо прочитать про особенности загрузки только имени файла и самого содержимого файла на сервер средствами PHP

stosen 26.10.2008 23:49

path1 и path2 нужно поменять местами. Может я ошибаюсь, но эта функция copy('C:\doc1.txt','/docs/doc1.txt') на локальном хосте работает нормально. Может на удаленном она выдаст ошибку:confused:

Kolyaj 27.10.2008 12:13

А с чего бы ей на локалхосте не работать? Компьютер-то один.

stosen 28.10.2008 13:31

Цитата:

Сообщение от Kolyaj (Сообщение 7605)
А с чего бы ей на локалхосте не работать? Компьютер-то один.

Я так понял, что пользователь должен обязательно выбрать файл в диалоговом окне, чтобы отправить его на сервер. И средствами javascript выбор файла осуществить нельзя. Или можно?

Kolyaj 28.10.2008 13:33

Цитата:

Сообщение от stosen
Или можно?

Нельзя. Иначе можно было бы воровать у пользователя файлы.

stosen 28.10.2008 14:49

Спасибо за помощь. Я так понял, что наилучшим вариантом будет поставить поле file, и делать проверку файла на стороне пользователя средствами javascript.

Kolyaj 28.10.2008 14:51

Что значит "проверку файла"?

stosen 28.10.2008 16:56

Цитата:

Сообщение от Kolyaj (Сообщение 7705)
Что значит "проверку файла"?

Мне нужно проверить является ли файл картинкой, его размер (не более 1мб). Подскажите, плиз, можно ли сделать так, чтобы в диалоговом окне в выборе типа файла были только файлы изображений. И как получить размер картинки?

Kolyaj 28.10.2008 17:05

Цитата:

Сообщение от stosen
Подскажите, плиз, можно ли сделать так, чтобы в диалоговом окне в выборе типа файла были только файлы изображений. И как получить размер картинки?

Никак. Для того, чтобы загружать файлы не более N байт, нужно создать hidden-элемент MAX_FILE_SIZE с соответствующим value.

stosen 30.10.2008 18:26

Цитата:

Сообщение от Kolyaj (Сообщение 7734)
Никак. Для того, чтобы загружать файлы не более N байт, нужно создать hidden-элемент MAX_FILE_SIZE с соответствующим value.

Спасибо за подсказку. Но я все-равно решил сделать проверку файла на стороне сервера, т.к. MAX_FILE_SIZE легко обойти, да и тип файла проверить нужно. Думаю теперь как это все реализовать. Но это уже не вопрос javascript.

Kolyaj 30.10.2008 18:28

Цитата:

Сообщение от stosen
Но я все-равно решил сделать проверку файла на стороне сервера

Ну это само собой. Это для того, чтобы нормальные пользователи зря не грузили большие файлы.

stosen 30.10.2008 18:41

Но все-таки, скажите мне, плиз, как задать значение value в поле file при загрузке страницы. Зачем мне это нужно? Как я уже говорил проверка полей на наличие ошибок у меня делается на стороне сервера. Если есть ошибки, то я делаю редирект на эту же страницу и вывожу их. При повторной отправке формы мне уже не нужно передавать выбранный ранее файл на сервер. Ведь он уже загружен во временную папку. Не так ли? И дабы не смутить пользователя, что нужно файл выбирать еще раз, я хочу, чтобы в поле file был прописан путь к выбранному файлу (его я возьму из сессии).

Kolyaj 30.10.2008 18:49

Цитата:

Сообщение от stosen
Но все-таки, скажите мне, плиз, как задать значение value в поле file при загрузке страницы.

Никак.
Цитата:

Сообщение от stosen
И дабы не смутить пользователя, что нужно файл выбирать еще раз, я хочу, чтобы в поле file был прописан путь к выбранному файлу

Вместо поля file напишите "Файл уже загружен". Ну или на обычный инпут замените. Вариантов масса.

stosen 30.10.2008 18:56

Я думал уже об этом. А если пользователь захочет выбрать другой файл? Если передается другой файл - то предыдущий удаляю, новый записываю.

Kolyaj 30.10.2008 18:58

Ну тогда оставляйте поле file с соответствующей припиской.

Лучше в вашем случае вообще проверку данных без перезагрузки страницы делать.

stosen 30.10.2008 19:56

Цитата:

Сообщение от Kolyaj (Сообщение 7907)
Ну тогда оставляйте поле file с соответствующей припиской.

Значит, я так понимаю, value поля file поставить нельзя

Цитата:

Сообщение от Kolyaj (Сообщение 7907)
Лучше в вашем случае вообще проверку данных без перезагрузки страницы делать.

Я понимаю, что было бы лучше. А как это сделать?

Kolyaj 30.10.2008 20:02

Цитата:

Сообщение от stosen
А как это сделать?

Гуглите по слову ajax.

EugenyK 30.10.2008 20:07

stosen

>> Значит, я так понимаю, value поля file поставить нельзя

Жжошь однозначно!

>> А как это сделать?

Например, перед печатью страницы делать проверку, что если файл загружен, то поле file получает атрибут disabled='disabled', а ниже печатается ссылка на файл и кнопка удалить файл, на которую вешается ajax-запрос на сервер, по приходу ответа ссылка удаляется, а атрибут убирается.

stosen 30.10.2008 20:20

Цитата:

Сообщение от Kolyaj (Сообщение 7916)
Гуглите по слову ajax.

Ajax - это выход. Я читал, что на пользовательском уровне можно и с базы данных информацию вытащить. Но не овладев PHP и javascript пока лезть в дебри Ajaxa не хочу

stosen 31.10.2008 00:21

Цитата:

Сообщение от EugenyK (Сообщение 7919)
Например, перед печатью страницы делать проверку, что если файл загружен, то поле file получает атрибут disabled='disabled', а ниже печатается ссылка на файл и кнопка удалить файл, на которую вешается ajax-запрос на сервер, по приходу ответа ссылка удаляется, а атрибут убирается.

Классный алгоритм! На многих сайтах такой наблюдаю. Ajax - сила!
Но пока ограничусь рекомендациями Kolyaj и сделаю приписку к полю. А в скором будущем буду совершенствовать свой скрипт и обязательно применю эту технологию. Спасибо за ответы!!!

alexKniaz 01.11.2008 22:01

Без file в той или иной форме вы не получите файл от пользователя. А если получите, то имя этому методу - хак, и он гразит уголовной наказуемотью.

Kolyaj 02.11.2008 20:37

Цитата:

Сообщение от alexKniaz
А если получите, то имя этому методу - хак, и он гразит уголовной наказуемотью.

Бредим?

alexKniaz 03.11.2008 02:22

А как без file полч=учить файл от клиента? Кроме закладочки клиенту на комп - не знаю. Тольк, если конечно клиент сам согласится поставить такую прогу, но я чёт в этом сомневаюсь...
Если по поводу того, что где-то про это уже сказали - то наверно, я плохо прочёл тему....

alexKniaz 03.11.2008 02:24

Цитата:

В PHP есть функция copy(path1,path2), где path1 - это новый путь к файлу на сервере, а path2- это абсолютный путь к этому файлу на диске пользователя.


Это вот вы с чего такое взяли? такое взяли?
Ужас... Copy к клиенту отношения не имеет!!!

stosen 03.11.2008 20:38

Цитата:

Сообщение от alexKniaz (Сообщение 8053)
Ужас... Copy к клиенту отношения не имеет!!!

Этот вопрос мы уже решили. Клиент через поле file передает свой файл во временную папку на сервере. А посредством функции copy я переношу этот файл из временной в нужную мне папку.


Часовой пояс GMT +3, время: 12:25.