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


Загрузка файлов в доп. действии


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

#1 alexandr2194

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

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

Отправлено 29 Июнь 2016 - 15:46

Здравствуйте.
Требуется реализовать загрузку изображений в поле таблицы через доп действие.
Массив $_FILES не содержит изображений.
Код формы:

	<form method="post">
		<input type="hidden" name="id" value="{$button_id}"/>
		<input type="hidden" name="line_id" value="{$ID}"/>
		<input type="hidden" name="csrf" value="{$csrf}"/>
		<p>Документация</p>
		<input type="file" name = "docs" />
		<p>Фотографии</p>
		<input type="file" name = "photos" multiple="true" />
		<p>
		<input type="submit" name="submit" value="Подтвердить проверку" />
	</form>

Php код выдает NULL
echo var_dump($_FILES);


Заранее спасибо.

P.S.
Сразу же следующий вопрос: как в Вашей системе происходит загрузка в поля таблицы?

P.P.S.
фотографий несколько. Для загрузки документов создано поле типа файл, для фотографий - с типом "изображение"

Сообщение отредактировал alexandr2194: 29 Июнь 2016 - 17:24


#2 CbCoder

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

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 29 Июнь 2016 - 18:25

Цитата

Массив $_FILES выдает NULL

http://htmlbook.ru/html/form/enctype

#3 alexandr2194

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

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

Отправлено 29 Июнь 2016 - 18:31

Дошел до этого сам. Файлы грузятся, изображения - нет

#4 alexandr2194

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

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

Отправлено 29 Июнь 2016 - 18:32

if (!empty($_FILES['photos'])) {
	    $filesName = trim($_FILES['photos']['name']);
	    $filesTmpName = $_FILES['photos']['tmp_name'];
	    $data = file_get_contents($filesTmpName);
	    save_data_file(22961, $line['ID'], $filesName, $data);
	    $line['f22961'] = $filesName;
	    echo "<script>alert('ok');</script>";
    }


#5 CbCoder

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

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 30 Июнь 2016 - 08:55

Т.к. у вас в поле с изображениями включена мультизагрузка, возможно $_FILES['photos'] представляет собой массив файлов, а не один файл.

#6 alexandr2194

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

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

Отправлено 30 Июнь 2016 - 12:53

Загружаю пять фотографий. Дамп:
["photos"]=> array(5) { ["name"]=> string(15) "w-6szmqm-Xs.jpg" ["type"]=> string(0) "" ["tmp_name"]=> string(0) "" ["error"]=> int(2) ["size"]=> int(0) } 

Это все, что там есть


for($i=0;$i<count($_FILES['photos']);$i++){
	    echo $_FILES['photos'][$i]['name'];
}

ничего не выводит

Сообщение отредактировал alexandr2194: 30 Июнь 2016 - 13:04


#7 alexandr2194

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

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

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

Проблема была в имени input. У меня "photos", а нужно "photos[]".

Следующий вопрос, как загружать несколько фотографий в одно поле типа "изображение"? если загружать обычным методом, как документы, указывая имя файла в поле, то появляется черный квадрат и ничего больше

#8 CbCoder

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

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

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

Логика загрузки в поле "изображение" абсолютно ничем не отличается от загрузки в поля с типом "файл". Внутренняя структура полностью одинакова, отличается только их отображение программой.

Если у вас несколько файлов, то разумеется нужно обрабатывать их по отдельности. Непосредственно в поле в этом случае пишутся имена всех файлов, разделенных переводом строки ("\r\n").

#9 alexandr2194

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

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

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

Спасибо, сейчас попробую

#10 alexandr2194

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

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

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

[html]EerNCvR1zZs.jpg\r\nkwzu4-9BPTE.jpg\r\nMwc6ZOc9RDc.jpg\r\nw-6szmqm-Xs.jpg\r\naRvdywa86qI.jpg (файл не существует)[html]
Это в поле написано после загрузки.

 for($i=0;$i<count($_FILES['photos']['name']);$i++){
		$fileName = trim($_FILES['photos']['name'][$i]);
		$filesTmpName = $_FILES['photos']['tmp_name'][$i];
		$data = file_get_contents($filesTmpName);
		save_data_file(22961, $line['ID'], $fileName, $data);
		$line['f22961'] = $line['f22961'] ? ($line['f22961']."\\r\\n".$fileName) : $fileName;
	}


Это код

Сообщение отредактировал alexandr2194: 30 Июнь 2016 - 13:52


#11 CbCoder

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

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

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

"\\r\\n"

А двойной слэш то зачем? Вам же сам перевод нужен, а не отображение текста "\r\n". Что хотели, то и получили (см. текст в поле)

#12 alexandr2194

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

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

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

Спасибо. Идем дальше.
Черные квадратики на месте фотографий. Когда на них нажимаешь, открывается новое пустое окно.

#13 alexandr2194

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

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

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

for($i=0;$i<count($_FILES['photos']['name']);$i++){
	    $filesName = $_FILES['photos']['name'][$i];
	    $filesTmpName = $_FILES['photos']['tmp_name'][$i];
	    $data = file_get_contents($filesTmpName);
	    save_data_file(22961, $line['ID'], $filesName, $data);
	    $line['f22961'] = $line['f22961'] ? ($line['f22961']."\r\n".$filesName) : $filesName;
    }

На всякий случай дублирую код

#14 CbCoder

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

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

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

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

#15 alexandr2194

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

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

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

Перечитал несколько записей на вашем форуме, вся загрузка происходит из tmp_name. Я делаю так же как для файла, так и для этих фотографий. сейчас вывел дамп,
["tmp_name"]=>
  array(6) {
	[0]=>
	string(0) ""
	[1]=>
	string(0) ""
	[2]=>
	string(0) ""
	[3]=>
	string(0) ""
	[4]=>
	string(0) ""
	[5]=>
	string(0) ""
  }

Пусто.
Возможно этот метод подходит для тех, у кого на локальной машине КБ установлена, а не удаленно.


P.S.
$data = file_get_contents($filesTmpName);

Сообщение отредактировал alexandr2194: 30 Июнь 2016 - 14:05


#16 CbCoder

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

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

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

Тут почитайте: http://php.net/manua...post-method.php, может найдете в чем проблема. Скорее всего с настройками сервера что-то не то, локальность машины тут не причем.

#17 CbCoder

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

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

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

Насчет настроек кстати, еще у нас написано: https://clientbase.r...vaniya/#basedir. Может upload_tmp_dir не настроен как надо.

#18 alexandr2194

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

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

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

Спасибо.





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

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