Загрузка нескольких файлов (изображений)

Чебурашка

Новичок
Загрузка нескольких файлов (изображений)

Здравствуйте!

Нашел неплохой скрипт отправки нескольких изображений. Проблема состоит в том, что скрипт отправляет в массив xtt[] 5 элементов, даже если загружаешь один файл (1 файл + 4 пустых элемента)! И при этом более 5 файлов тоже отправить нельзя!

Подскажите пожалуйста как снять эти ограничения?


Код формы
PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Загрузка изображений</title>
<script>

function xdropFile(btn)
{
 if(document.getElementById) 
 {
  tr = btn;
  while (tr.tagName != 'TR') tr = tr.parentNode;
  tr.parentNode.removeChild(tr);
  xcheckForLast();
 }
}

function xaddFile(btn)
 {
  if(document.getElementById) 
    {
     tr = btn;
     while (tr.tagName != 'TR') tr = tr.parentNode;
     var idSuffix = Math.round(Math.random()*1000);
     var newTr = tr.parentNode.insertBefore(tr.cloneNode(true),tr.nextSibling);
     thisChilds = newTr.getElementsByTagName('td');
     for (var i = 0; i < thisChilds.length; i++)
	   {
        if (thisChilds[i].className == 'header') thisChilds[i].innerHTML = '';
        if (thisChilds[i].className == 'files') thisChilds[i].innerHTML = '<input size="32" name="xtt[]" class="wideFile" type="file">';
       }
     xcheckForLast();
    }
 }
 
function xcheckForLast()
 {
  btns = document.getElementsByName('xdrop');
  for (i = 0; i < btns.length; i++)
    {
     btns[i].disabled = (btns.length == 1) ? true : false;
    }
 }
 
</script>
</head>
<body>
<form action="obrabotka.php" method="post" name="form" ENCTYPE="multipart/form-data">
<?
echo "
 <table width=20% align=center>
   <tr>
     <td width=\"20%\"><input type=\"file\" size=\"32\" name=\"xtt[]\"></td>
     <td nowrap=\"nowrap\">
	   <input type=\"button\" name=\"xdrop\" value=\" &minus; \" onClick=\"xdropFile(this);\">
       <input type=\"button\" value=\" + \" onClick=\"xaddFile(this);\"></td>
   </tr>
 </table>";
?>
<input name="" type="submit" />
</form>
</body>
</html>
Код обработчика
PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  <html xmlns="http://www.w3.org/1999/xhtml"> 
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /> 
<title>Документ без названия</title>
</head> 
<body> 
<?
  for($i=0;$i<count($_FILES['xtt']);$i++) 
  { 
   $uploaddir = 'foto/';
   $uploadfile = $uploaddir . basename($_FILES['xtt']['name'][$i]);
   if (move_uploaded_file($_FILES['xtt']['tmp_name'][$i], $uploadfile)) 
    { echo "Изображение №".$i." УСПЕШНО загружено.\n<br>";} 
    else { echo "Изображение №".$i." НЕ ЗАГРУЖЕНО!\n<br>";}  } 
?>  
</body>  
</html>
 

mity

Новичок
Скрипт просто ужасный, можно всё сделать куда проще.
Когда приводите код старайтесь сделать его более читабельным, с отступами.

Вы вызываете функцию checkForLast(), а где её определение? Практически любой браузер позволяет отображать ошибки JavaScript, запустите и внимательно посмотрите.

Ну зачем нужно так делать, смысл?
PHP:
<? 
echo " 
<table width=20% align=center> 
<tr> 
<td width=\"20%\"><input type=\"file\" size=\"32\" name=\"xtt[]\"></td> 
<td nowrap=\"nowrap\"><input type=\"button\" name=\"xdrop\" value=\" &minus; \" onClick=\"xdropFile(this);\"> 
<input type=\"button\" value=\" + \" onClick=\"xaddFile(this);\"></td> 
</tr> 
</table>"; 
?>
Начните с чего нибудь более простого
 

Чебурашка

Новичок
Скрипт не мой...

checkForLast() повидимому автор забыл поставить вначале x - xcheckForLast() но это на решение проблемы не влияет.

Вывод можно сделать и так, но это опять-таки ничего не решает

PHP:
<?
print <<<HERE
<form action="obrabotka.php" method="post" name="form" ENCTYPE="multipart/form-data" >
 <table width=20% align=center>
  <tr>
      <td width="20%"><input type="file" size="32" name="xtt[]"></td>
      <td nowrap="nowrap">
         <input type="button" name="xdrop" value=" &minus;" onClick="xdropFile(this);">
         <input type="button" value=" + " onClick="xaddFile(this);">
      </td>
  </tr>
 </table>
 <input name="" type="submit">
</form>
HERE;
?>
Хотелось бы понять причину почему отправляется 5 элементов в массиве не больше и не меньше?
 

mity

Новичок
Вы считаете длину не того массива

for($i=0;$i<count($_FILES['xtt']);$i++)
Нужно так
for($i=0;$i<count($_FILES['xtt']['name']);$i++)

Вот так писать совершенно не нужно
PHP:
<? 
print <<<HERE 
<form action="obrabotka.php" method="post" name="form" ENCTYPE="multipart/form-data" > 
 <table width=20% align=center> 
  <tr> 
      <td width="20%"><input type="file" size="32" name="xtt[]"></td> 
      <td nowrap="nowrap"> 
         <input type="button" name="xdrop" value=" &minus;" onClick="xdropFile(this);"> 
         <input type="button" value=" + " onClick="xaddFile(this);"> 
      </td> 
  </tr> 
 </table> 
 <input name="" type="submit"> 
</form> 
HERE; 
?>
Можно просто так
PHP:
<form action="obrabotka.php" method="post" name="form" ENCTYPE="multipart/form-data" > 
 <table width=20% align=center> 
  <tr> 
      <td width="20%"><input type="file" size="32" name="xtt[]"></td> 
      <td nowrap="nowrap"> 
         <input type="button" name="xdrop" value=" &minus;" onClick="xdropFile(this);"> 
         <input type="button" value=" + " onClick="xaddFile(this);"> 
      </td> 
  </tr> 
 </table> 
 <input name="" type="submit"> 
</form>
 

Чебурашка

Новичок
mity Ура заработало! Спасибо БОЛЬШОЕ!!!!:D

Только не понятно почему в ['xtt'] заносилось 5 элементов :confused:
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Чебурашка
а ты не пробовал отлаживать свой скрипт? print_r($_FILES) сделать например?
 
Сверху