Перейти к содержимому


Передача файла из формы


Сообщений в теме: 17

#1 dolphin

    Активный участник

  • Пользователи
  • PipPipPip
  • 341 сообщений

Отправлено 13 Июнь 2012 - 14:10

Здравствуйте.

Как начинающий программист столкнулся я с проблемой:

<form action="uploader.php" method="post" enctype="multipart/form-data">
		 <label for="file">Filename:</label>
	    <input type="file" name="file" id="file" />
	    <br />
	    <input type="submit" name="submit" value="Submit" />
</form>

В данном скрипте в представлении(отображение) загружаю файл любой на выбор...

Собственно вопрос, как указать завместо
form action="uploader.php"
Чтобы загруженный файл отправлялся на "обработку" в представление(подготовка данных)???

#2 Гость_Roman_*

  • Гости

Отправлено 13 Июнь 2012 - 14:28

В отображении стоит закрыть тег <form>, поскольку он открыт раньше и не показан в коде отображения, а в action пишется адрес текущей страницы. Примерно так:

</form>
<form action="report.php?id={$report.id}" method="post" enctype="multipart/form-data">


#3 dolphin

    Активный участник

  • Пользователи
  • PipPipPip
  • 341 сообщений

Отправлено 13 Июнь 2012 - 14:30

Благодарю.

#4 dolphin

    Активный участник

  • Пользователи
  • PipPipPip
  • 341 сообщений

Отправлено 14 Июнь 2012 - 06:25

Спасибо. А как теперь принять его в подготовке данных?

$file = file('???');


#5 Гость_Roman_*

  • Гости

Отправлено 14 Июнь 2012 - 07:56

Файлы, переданные через форму, хранятся в глобальном массиве $_FILES. Более подробно о загрузке и работе с файлами можно прочитать здесь.

#6 dolphin

    Активный участник

  • Пользователи
  • PipPipPip
  • 341 сообщений

Отправлено 14 Июнь 2012 - 08:01

Читал, не помогло, такое чувство, что файл не загружается. Хотя в папку tmp помещаются какие то странные "пустые" файлы.

У меня в подготовке следующее:
echo "<h3>Информация о загруженном на сервер файле: </h3>";
echo "<p><b>Оригинальное имя загруженного файла: ".$_FILES['uploadfile']['name']."</b></p>";
echo "<p><b>Mime-тип загруженного файла: ".$_FILES['uploadfile']['type']."</b></p>";
echo "<p><b>Размер загруженного файла в байтах: ".$_FILES['uploadfile']['size']."</b></p>";
echo "<p><b>Временное имя файла: ".$_FILES['uploadfile']['tmp_name']."</b></p>";
В отображение так:
</form>
<br /><br /><br />
<form action="report.php?id={$report.id}" method="post" enctype="multipart/form-data">
		 <label for="file">Выберите SSOD файл:</label>
	    <input type="file" name="file" id="file" />
	    <br /> <br /> <br />
	    <input style="width:200px; height:50px"  type="submit" name="submit" value="Загрузить" />
</form>

Все верно ведь?

#7 Гость_Roman_*

  • Гости

Отправлено 14 Июнь 2012 - 08:07

Не совсем. В подготовке Вы обращаетесь к массиву $_FILES['uploadfile'], а в отображении в поле выбора файла атрибут name указан как file.
Массив должен иметь то же имя, что и атрибут name в форме. Нужно заменить все вхождения $_FILES['uploadfile'] на $_FILES['file'] и всё должно быть нормально.

#8 dolphin

    Активный участник

  • Пользователи
  • PipPipPip
  • 341 сообщений

Отправлено 14 Июнь 2012 - 08:09

Вот я булка! :) спасибо Вам огромнейшее!

#9 dolphin

    Активный участник

  • Пользователи
  • PipPipPip
  • 341 сообщений

Отправлено 14 Июнь 2012 - 08:28

И еще один вопрос, файл загружается, все хорошо, но кодировка странная, где копать?

#10 Гость_Roman_*

  • Гости

Отправлено 14 Июнь 2012 - 08:35

Сервер работает в кодировке UTF-8, а файл, скорее всего, в кодировке Win-1251. Для перевода кодировки воспользуйтесь функцией iconv.

#11 dolphin

    Активный участник

  • Пользователи
  • PipPipPip
  • 341 сообщений

Отправлено 14 Июнь 2012 - 08:44

Кстати вот это:
echo "<p><b>Временное имя файла: ".$_FILES['file']['tmp_name']."</b></p>";
Возвращает:
C:\Users\�������������\AppData\Local\Temp\2\phpD414.tmp

Может быть в настройках php ini что то необходимо переключить?

#12 Гость_Roman_*

  • Гости

Отправлено 14 Июнь 2012 - 08:49

Данную строчку тоже можно корректно отобразить с помощью функции iconv.

#13 dolphin

    Активный участник

  • Пользователи
  • PipPipPip
  • 341 сообщений

Отправлено 14 Июнь 2012 - 09:07

echo iconv("CP-1251", "UTF-8", $_FILES['file']['tmp_name']);
Вообще строчка не отображается :(

#14 dolphin

    Активный участник

  • Пользователи
  • PipPipPip
  • 341 сообщений

Отправлено 14 Июнь 2012 - 09:14

Все, понял. Оказывается кодировка без тире должна указываться, просто CP1251

#15 Гость_Roman_*

  • Гости

Отправлено 14 Июнь 2012 - 09:15

Попробуйте прописать вместо "CP-1251" - "cp1251", если мне память не изменяет, так корректнее.

#16 Zver

    Активный участник

  • Пользователи
  • PipPipPip
  • 80 сообщений

Отправлено 13 Ноябрь 2012 - 11:27

Продолжу тему. Что мне нужно сделать что бы полученный файл "сохранить" в БД? Т.е в какую папочку его положить и какую запись сделать в БД?

PS Имеется ввиду поле типа файл.

Сообщение отредактировал Zver: 13 Ноябрь 2012 - 11:28


#17 Zver

    Активный участник

  • Пользователи
  • PipPipPip
  • 80 сообщений

Отправлено 14 Ноябрь 2012 - 12:04

Млин, я уже все представление доделал, кроме этого момента. Может я не корректно вопрос задал? Или надо новую тему создать?
Ответьте пожалуйста на вопрос.

#18 Гость_Roman_*

  • Гости

Отправлено 14 Ноябрь 2012 - 14:59

Запись в поле типа файл делается просто именем файла. Если файлов несколько, то они разделяются символами возврата каретки и новой строки (\r\n). Сохранение в папку files можно произвести с помощью функции save_data_file($field_id, $line_id, $fname, $data).





Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных