Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.06.2009, 22:32
Новичок на форуме
Отправить личное сообщение для ce39 Посмотреть профиль Найти все сообщения от ce39
 
Регистрация: 10.06.2009
Сообщений: 3

< input type=file > не попадают в $_FILES
Такая трабла:
Создаю < input type=file > на JS . Все чудно.

Но при субмите формы поля не попадают в $_FILES (PHP)

Вариант: "поля не в форме" отпадает, добавляю в DIV, а он в форме. Да и прикол такой, что в $_POST попадает, а в $_FILES нет.

Уже сталкивался когдато, но както само попустило.

Кто раскажет, кто подскажет что за нюанс?
Ответить с цитированием
  #2 (permalink)  
Старый 10.06.2009, 23:21
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 03.04.2008
Сообщений: 6,233

как форму объявили?
надо так:
<form enctype="multipart/form-data" action="_URL_" method="post">

рискну предположить, что вы забыли enctype="multipart/form-data"
Ответить с цитированием
  #3 (permalink)  
Старый 10.06.2009, 23:46
Новичок на форуме
Отправить личное сообщение для ce39 Посмотреть профиль Найти все сообщения от ce39
 
Регистрация: 10.06.2009
Сообщений: 3

история такая, была форма с этим примутом, суть: назначение задания с прикреплением файла, понадобилось в назначении многим юзерам сделать для каждого attachments, по сути копипаст только добавил user_id и вот. Таже история была с общим добавлением но както сама по себе решилась.:wacko:
Ответить с цитированием
  #4 (permalink)  
Старый 10.06.2009, 23:53
Новичок на форуме
Отправить личное сообщение для ce39 Посмотреть профиль Найти все сообщения от ce39
 
Регистрация: 10.06.2009
Сообщений: 3

Это работает:
Код:
<form name=f1 action='admin.php?id=$uid&taskid=$task_id' method=post enctype=multipart/form-data>
        
        
        
        <div id=items>
         <input type=hidden name=taskid value=".$task_id.">
         <input type=hidden name=uid value=$uid>
         <span>
        <div id=ddd_0><input type=file size=44 id=fff_0 name='uploadfile_0' onchange='AddItem()'>&nbsp;&nbsp;&nbsp;&nbsp;<b style='display: none;' class=span_link id=iii_0 onclick=delete_file('0')>Delete</b></div>
         
         
         <input type=hidden name=important_0 value='on'>
               </span>  ";

А это попадает только в пост, кроме поля которое создал вручную
Код:
 foreach($arr as $v) 
   {
       if($_POST['ch'.$v->id]=='on' || $v->id==$_GET['id'])$ch="CHECKED";
       else $ch="";
       
       if($v->role!=9 && $ch!="")
       {
       
       $out.="<div id=user_".$v->id.">";    
       
       $out.= "<input $ch name=ch".$v->id." type=checkbox>";
       $out.=a("admin.php?id=".$v->id,$v->get_fio());$out.="&nbsp;&nbsp;&nbsp;";

       $out.="<br />";
       $out.="<div id=u_div_".$v->id."_0>";
       $out.="<input type=file name=up_".$v->id."_0 size=44 id=u_f_".$v->id."_0 onchange=Add_file('".$v->id."')>&nbsp;&nbsp;&nbsp;&nbsp;<b style='display: none;' class=span_link id=u_d_".$v->id."_0 onclick=delete_user_file('0','".$v->id."')>Delete</b>";
       $out.="</div>";
       $out.="<input type=hidden id=add_".$v->id.">";                                                                                                                                                                                                       
       
       //$out.="<br />";
  //    $out.="<br />";
       
       $out.="</div>";
       $ind++;
       }
   }

Последний раз редактировалось Octane, 18.09.2009 в 19:11. Причина: оформление кода
Ответить с цитированием
  #5 (permalink)  
Старый 19.09.2009, 10:01
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

Знаю что пост старый, но все же напишу всем кто будет в будущем сталкиваться с проблемой создания динамических input file и не попадания их в $_FILES в IE

Если Вы динамически создаете форму, а в ней есть поля <input type="file" name="name">, то для того чтобы IE отправил форму на сервер с файлами нужно создавать форму так:

if(IE){ //персонально для IE
	  var e = document.createElement('<form id="form_id" name="form_name" enctype="multipart/form-data" target="upl_frame" method="POST" action="index.php">');
	  document.getElementById('par').appendChild(e);
	} 
	else { // для всех остальных
		var e = document.createElement('FORM');
			e.id = 'form_id';
			e.name = 'form_name';
			e.enctype = 'multipart/form-data';
			e.action = 'index.php';
			e.method = 'POST';
			e.target = 'upl_frame';
		document.getElementById('par').appendChild(e);
	}


На этом сайте есть статья про ajax транспорт iframe там об этом почти сказано
http://javascript.ru/ajax/transport/iframe
Ответить с цитированием
  #6 (permalink)  
Старый 21.09.2009, 09:37
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,022

Сообщение от Gozar
var e = document.createElement('<form id="form_id" name="form_name" enctype="multipart/form-data" target="upl_frame" method="POST" action="index.php">');
Ой... а разве так можно?!
Ответить с цитированием
  #7 (permalink)  
Старый 21.09.2009, 11:24
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Сообщение от B~Vladi
Ой... а разве так можно?!
Для IE не только можно, но иногда и нужно. Например, в IE не получится просто приписать некоторые атрибуты: elem.name = 'name';

Вот, по изучай:
var $E = Element.create = function(tagName, attributes) {
	if (tagName) {
		if (IE && attributes) {
			if (attributes.type) tagName += ' type="' + attributes.type + '"';
			if (attributes.name) tagName += ' name="' + attributes.name + '"';
			if (attributes.checked) tagName += ' checked="checked"';
			delete attributes.type;
			delete attributes.name;
			delete attributes.checked;
			tagName = '<' + tagName + '>';
		}
		var elem = $($d.createElement(tagName)).setAttributes(attributes), i = 2, length = arguments.length;
		while (i < length) {
			var I = arguments[i++];
			I != null && elem.appendChild(I.nodeType ? I : $d.createTextNode(I));
		}
		return elem;
	}
	throw new Error();
};
Ответить с цитированием
  #8 (permalink)  
Старый 21.09.2009, 11:49
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,022

Сообщение от Riim
Вот, по изучай:
Ой, спс, поковыряем

ЗЫ: ишак, как обычно, не перестаёт удивлять
Ответить с цитированием
  #9 (permalink)  
Старый 01.10.2009, 14:33
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,022

Riim, слух, по-моему тут чего-то не хватает
Откуда взялось $d и $(). Хотя про второе я догадываюсь

А в общем суть ясна
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск