10.06.2009, 23:32
|
Новичок на форуме
|
|
Регистрация: 10.06.2009
Сообщений: 3
|
|
< input type=file > не попадают в $_FILES
Такая трабла:
Создаю < input type=file > на JS . Все чудно.
Но при субмите формы поля не попадают в $_FILES (PHP)
Вариант: "поля не в форме" отпадает, добавляю в DIV, а он в форме. Да и прикол такой, что в $_POST попадает, а в $_FILES нет.
Уже сталкивался когдато, но както само попустило.
Кто раскажет, кто подскажет что за нюанс?
|
|
11.06.2009, 00:21
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
как форму объявили?
надо так:
<form enctype="multipart/form-data" action="_URL_" method="post">
рискну предположить, что вы забыли enctype="multipart/form-data"
|
|
11.06.2009, 00:46
|
Новичок на форуме
|
|
Регистрация: 10.06.2009
Сообщений: 3
|
|
история такая, была форма с этим примутом, суть: назначение задания с прикреплением файла, понадобилось в назначении многим юзерам сделать для каждого attachments, по сути копипаст только добавил user_id и вот. Таже история была с общим добавлением но както сама по себе решилась.:wacko:
|
|
11.06.2009, 00:53
|
Новичок на форуме
|
|
Регистрация: 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()'> <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.=" ";
$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."')> <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 в 20:11.
Причина: оформление кода
|
|
19.09.2009, 11:01
|
|
猫
|
|
Регистрация: 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
|
|
21.09.2009, 10:37
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
Сообщение от Gozar
|
var e = document.createElement('<form id="form_id" name="form_name" enctype="multipart/form-data" target="upl_frame" method="POST" action="index.php">');
|
Ой... а разве так можно?!
|
|
21.09.2009, 12:24
|
|
Рассеянный профессор
|
|
Регистрация: 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();
};
|
|
21.09.2009, 12:49
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
Сообщение от Riim
|
Вот, по изучай:
|
Ой, спс, поковыряем
ЗЫ: ишак, как обычно, не перестаёт удивлять
|
|
01.10.2009, 15:33
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
Riim, слух, по-моему тут чего-то не хватает
Откуда взялось $d и $(). Хотя про второе я догадываюсь
А в общем суть ясна
|
|
|
|