Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   < input type=file > не попадают в $_FILES (https://javascript.ru/forum/dom-window/3984-input-type%3Dfile-ne-popadayut-v-%24_files.html)

ce39 10.06.2009 23:32

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

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

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

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

Кто раскажет, кто подскажет что за нюанс?

Gvozd 11.06.2009 00:21

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

рискну предположить, что вы забыли enctype="multipart/form-data"

ce39 11.06.2009 00:46

история такая, была форма с этим примутом, суть: назначение задания с прикреплением файла, понадобилось в назначении многим юзерам сделать для каждого attachments, по сути копипаст только добавил user_id и вот. Таже история была с общим добавлением но както сама по себе решилась.:wacko:

ce39 11.06.2009 00:53

Это работает:
Код:

<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++;
      }
  }


Gozar 19.09.2009 11:01

Знаю что пост старый, но все же напишу всем кто будет в будущем сталкиваться с проблемой создания динамических 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

B~Vladi 21.09.2009 10:37

Цитата:

Сообщение от Gozar
var e = document.createElement('<form id="form_id" name="form_name" enctype="multipart/form-data" target="upl_frame" method="POST" action="index.php">');

Ой... а разве так можно?!:blink:

Riim 21.09.2009 12:24

Цитата:

Сообщение от 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();
};

B~Vladi 21.09.2009 12:49

Цитата:

Сообщение от Riim
Вот, по изучай:

Ой, спс, поковыряем:)

ЗЫ: ишак, как обычно, не перестаёт удивлять:)

B~Vladi 01.10.2009 15:33

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

А в общем суть ясна:)


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