Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.12.2012, 15:17   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
Радость Неограниченное кол-во файлов через POST запрос

Доброго времени суток!
как отправить несколько файлов и обработать их на сервере?

Сейчас есть это:
Код HTML:
    <br>
	Прикрепить файл:<br>
	<input type=file name="Attach">
	<hr> 
    <br>
и это:
PHP код:
$msgAttach $_FILES['Attach'];
...
if (!empty(
$msgAttach))
{
$mail->AddAttachment($msgAttach['tmp_name'],$msgAttach['name']);

1 файл проходит нормально, а как несколько создать?
Сейчас у меня есть идея:
На сервер уходят файлы с именами AttachN где N - целое число от 0 до N.
Затем переменная AttachCount и указывает сколько ушло файлов.

На сервере задается динам. массив из $_FILES['AttachN'] и по ним идет цикл и дальше уже обработка.


Может можно проще?
Человек_Борща вне форума Ответить с цитированием
Старый 28.12.2012, 15:27   #2
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,159
По умолчанию

не надо велосипедов...
читаем про загрузку нескольких файлов ... что есть в стандартном php
ADSoft вне форума Ответить с цитированием
Старый 28.12.2012, 15:30   #3
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

PHP & Upload
Andkorol вне форума Ответить с цитированием
Старый 28.12.2012, 15:42   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Уже читал и перечитал и не понимаю...
Я могу создать несколько раз
Код HTML:
<input type=file name="Attach">
<input type=file name="Attach">
<input type=file name="Attach">
<input type=file name="Attach">
<input type=file name="Attach">
и будет массив:
$_FILES['Attach']['name'][0] - 1й файл
$_FILES['Attach']['name'][1] - 2й файл
$_FILES['Attach']['name'][2] - 3й файл
$_FILES['Attach']['name'][3] - 4й файл

? Правильно понял?
Человек_Борща вне форума Ответить с цитированием
Старый 28.12.2012, 15:51   #5
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,159
По умолчанию

Код:
<input type="file" name="Attach[]">
и вроде
Код:
$_FILES['Attach'][0]['name'] - 1й файл
ADSoft вне форума Ответить с цитированием
Старый 28.12.2012, 16:00   #6
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

и таких штук:
Код:
<input type="file" name="Attach[]">
может быть сколь угодно.

Спасибо! Теперь я понял.
Человек_Борща вне форума Ответить с цитированием
Старый 28.12.2012, 19:31   #7
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Теперь другая проблема...
Массив $_FILES надо как-то очистить, и почему он не очищается, ведь скрипт отработал?

Код:
Код:
        //Если вложения есть и массив не пустой
        if (isset($msgAttach) & !empty($msgAttach)) {
            for ($i = 0; $i <= Count($msgAttach);$i++) {
                echo "Путь(".$i."): ".$msgAttach['tmp_name'][$i]." <br>";
                echo "Файл(".$i."): ".$msgAttach['name'][$i]." <br>";
			if (!$msgAttach['tmp_name'][$i] == "")	{
			 $mail->AddAttachment($msgAttach['tmp_name'][$i], $msgAttach['name'][$i]);
			 }
            } 
        }
Скрипт работал ранее и я посылал 5 файлов.
Теперь же решил послать 2 файла, в итоге скрипт выписывает такое:
Цитата:
Путь(0): C:\Windows\Temp\phpEF24.tmp
Файл(0): 47hZTQ4Q.png
Путь(1):
Файл(1):
Путь(2):
Файл(2):
Путь(3):
Файл(3):
Путь(4):
Файл(4):
Путь(5):
Файл(5):
SEND
Я послал 1 файл, почему в массиве аж 4 лишние ячейки?

Как от этого избавится, и можно ли как-то удалять файлы после завершения работы скриптом?

пока что проблему решает костыль в роли:
PHP код:
if (!$msgAttach['tmp_name'][$i] == "")    { 
Но я знаю, что есть решение проще.. но не вижу его.

Последний раз редактировалось Человек_Борща; 28.12.2012 в 19:33.
Человек_Борща вне форума Ответить с цитированием
Старый 28.12.2012, 21:16   #8
dem66
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 316
По умолчанию

Код:
<input name="images[]" type="file" multiple='true'/>
$_FILES И $_POST КЕШИРУЮТСЯ БРАУЗЕРОМ, ОНИ САМИ НЕ ОЧИСТЯТСЯ, поможет только редирект. Тоесть сам ответ не кешируется а кешируется только данные которые передаются серверу.
Проблема кнопки "Back" и проблема кнопки "Refresh"

PHP код:
for ($i 0$i <= Count($msgAttach);$i++) 
Нельзя так делать, нужно
PHP код:
$count sizeof($msgAttach['tmp_name']);
for (
$i 0;  $i <= $count$i++){


Вот конечный вариант:
PHP код:
<?php
        $msgAttach 
$_FILES['images'];
        
        
//Если вложения есть и массив не пустой
        
if(isset($msgAttach) & !empty($msgAttach)) {
            
$count sizeof($msgAttach['tmp_name']);
            for(
$i 0$i <= $count$i++){
                if(
$files['tmp_name'][$i] != ""){
                    echo 
"Путь(".$i."): ".$msgAttach['tmp_name'][$i]." <br>";
                    echo 
"Файл(".$i."): ".$msgAttach['name'][$i]." <br>";
                    
$mail->AddAttachment($msgAttach['tmp_name'][$i], $msgAttach['name'][$i]);
                 }
            } 
        }
PS: после тогда все отработало, пользователя нужно перенаправить на другую страницу на которой уже и будет выведено сообщение с результатом. Иначе если юзер нажмет F5 или "обновить" данные вновь отправятся на сервер.

Последний раз редактировалось dem66; 29.12.2012 в 12:13.
dem66 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
html текст через post запрос Armatus PHP 3 20.08.2012 10:51
POST запрос через CHttpConnection harimambura Visual C++ 1 29.06.2012 13:27
Post запрос через Synapse Lauri Общие вопросы Delphi 11 22.03.2011 12:18
Качать неограниченное количество файлов с Инета SoftKoc Работа с сетью в Delphi 4 07.11.2009 04:48