Скрипт загрузки изображений

Статус
Закрыто для дальнейших ответов.

KDES70

Well-Known Member
Регистрация
16.02.2012
Сообщения
73
[background=rgb(250, 250, 250)]Здравствуйте !!! помогите найти скрипт загрузки изображений ограниченного количества[/background]
[background=rgb(250, 250, 250)](например разрешить пользователям загружать только три файла и не болие)[/background]
[background=rgb(250, 250, 250)]перерыл весь гугл ,нашел только множественную загрузку с бесконечным количеством [/background]
 

mrlasking

$_GET['rich'] or die('trying');
Регистрация
22.05.2012
Сообщения
323
ну дык вставь ограничение сам в самый удобный для тебя аплоадер с множественной загрузкой :blink:
 

KDES70

Well-Known Member
Регистрация
16.02.2012
Сообщения
73
ну дык вставь ограничение сам в самый удобный для тебя аплоадер с множественной загрузкой :blink:
так знал бы как не задавал бы вопроса......

вот нашел скрипт который мне понравился помогите пожалуйста написать такой ограничитель
с js вообще не знаком
заранее благодарю за любую помощь!!!

Код:
<form action="upserver.php" method="POST" target="uploadresult" name="upfiles" enctype="multipart/form-data">
  <!--
	   Цель бытиЯ этого дива здесь - это то, что мы имеем
	   общий контейнер, для всех динамически создаваемых полей.
	   Так ими удобнее управлять.
  //-->
  <div id="filewrapper">
  
    <p><input name="file[]" type="file" size="30" maxlength="2" /><button type="button" onclick="uploader.delfield(this)">DEL</button></p>
	
  </div>
  
  <p>
    <button type="button" onclick="uploader.addfield(window)">Добавить поле</button>
    <button type="submit" name="send" value="true">Отправить</button>
  </p> 
  
</form>
<!-- В этом фрейме будем выводить данные о загрузке файлов //-->
<iframe name="uploadresult" frameborder="0" id="uploadresult" width="600" height="400"></iframe>
<script type="text/javascript">

// Объект "нэймспейса"
var uploader = uploader || {};

// Функция "Удалить поле"
uploader.delfield  = function (obj) {  
    obj.onclick = null;
    obj.parentNode.parentNode.removeChild(obj.parentNode); 
}

// Функция "Добавить поле"
uploader.addfield  = function (GLOB) { 
    /*
	 * Здесь код формирует очередное поле загрузки файла,
	 * т.е. html код элементов, эквивалентный следующему:
	 *  
	 * <p>
	 *	  <input name="file[]" type="file" size="30" />
	 *	  <button type="button" onclick="uploader.delfield(this)">DEL</button>
	 * </p>
	 *
	 * Только обработчик onclick назначиться чуть по - другому.
	 */   
  var DOC		    = GLOB.document,
	  wrapper	    = DOC.getElementById("filewrapper"),
	  htmlP		  = DOC.createElement("P"),
	  htmlInput	  = DOC.createElement("INPUT"),
	  htmlButton	 = DOC.createElement("BUTTON"),
	  htmlButtonText = DOC.createTextNode("DEL");
			
  htmlInput.name	 = "file[]";
  htmlInput.type	 = "file";
  htmlInput.size	 = "30";
	
  htmlButton.onclick = function() { uploader.delfield(htmlButton) };   
	
  // Добавляем всё это хозяйство в DOM дерево документа:
  wrapper.appendChild(htmlP);
  htmlP.appendChild(htmlInput);
  htmlP.appendChild(htmlButton);
  htmlButton.appendChild(htmlButtonText);  
}
</script>
 

lekzd

parse error: parse error, unexpected T_STRING...
Регистрация
17.02.2011
Сообщения
1 125
Код:
<form action="upserver.php" method="POST" target="uploadresult" name="upfiles" enctype="multipart/form-data">
  <!--
		   Цель бытиЯ этого дива здесь - это то, что мы имеем
		   общий контейнер, для всех динамически создаваемых полей.
		   Так ими удобнее управлять.
  //-->
  <div id="filewrapper">

		<p><input name="file[]" type="file" size="30" maxlength="2" /><button type="button" onclick="uploader.delfield(this)">DEL</button></p>
	  
  </div>

  <p>
		<button type="button" onclick="uploader.addfield(window)">Добавить поле</button>
		<button type="submit" name="send" value="true">Отправить</button>
  </p>

</form>
<!-- В этом фрейме будем выводить данные о загрузке файлов //-->
<iframe name="uploadresult" frameborder="0" id="uploadresult" width="600" height="400"></iframe>
<script type="text/javascript">
var inp_cnt = 1;
// Объект "нэймспейса"
var uploader = uploader || {};
// Функция "Удалить поле"
uploader.delfield  = function (obj) {
		obj.onclick = null;
		obj.parentNode.parentNode.removeChild(obj.parentNode);
  inp_cnt--;
}
// Функция "Добавить поле"
uploader.addfield  = function (GLOB) {
if (inp_cnt > 3) return false;
		/*
		 * Здесь код формирует очередное поле загрузки файла,
		 * т.е. html код элементов, эквивалентный следующему:
		 *
		 * <p>
		 *		<input name="file[]" type="file" size="30" />
		 *		<button type="button" onclick="uploader.delfield(this)">DEL</button>
		 * </p>
		 *
		 * Только обработчик onclick назначиться чуть по - другому.
		 */  
  var DOC					   = GLOB.document,
		  wrapper			   = DOC.getElementById("filewrapper"),
		  htmlP		   = DOC.createElement("P"),
		  htmlInput	   = DOC.createElement("INPUT"),
		  htmlButton	 = DOC.createElement("BUTTON"),
		  htmlButtonText = DOC.createTextNode("DEL");
					  
  htmlInput.name		 = "file[]";
  htmlInput.type		 = "file";
  htmlInput.size		 = "30";
	  
  htmlButton.onclick = function() { uploader.delfield(htmlButton) };  
	  
  // Добавляем всё это хозяйство в DOM дерево документа:
  wrapper.appendChild(htmlP);
  htmlP.appendChild(htmlInput);
  htmlP.appendChild(htmlButton);
  htmlButton.appendChild(htmlButtonText);

  inp_cnt++;
}
</script>
не проверял, но должно работать)

ну и еще, я бы на серверной стороне обрабатывал бы в массиве $_FILES только 3 первых значения
 

KDES70

Well-Known Member
Регистрация
16.02.2012
Сообщения
73
а можно как то спрятать кнопку добавления поля после того как добавил 3-4 поля??
 

lekzd

parse error: parse error, unexpected T_STRING...
Регистрация
17.02.2011
Сообщения
1 125
Код:
<form action="upserver.php" method="POST" target="uploadresult" name="upfiles" enctype="multipart/form-data">
  <!--
		   Цель бытиЯ этого дива здесь - это то, что мы имеем
		   общий контейнер, для всех динамически создаваемых полей.
		   Так ими удобнее управлять.
  //-->
  <div id="filewrapper">
 
	    <p><input name="file[]" type="file" size="30" maxlength="2" /><button type="button" onclick="uploader.delfield(this)">DEL</button></p>
	   
  </div>
 
  <p>
	    <button type="button" onclick="uploader.addfield(window)">Добавить поле</button>
	    <button type="submit" name="send" id="send_file_btn" value="true">Отправить</button>
  </p>
 
</form>
<!-- В этом фрейме будем выводить данные о загрузке файлов //-->
<iframe name="uploadresult" frameborder="0" id="uploadresult" width="600" height="400"></iframe>
<script type="text/javascript">
var inp_cnt = 1;
// Объект "нэймспейса"
var uploader = uploader || {};
// Функция "Удалить поле"
uploader.delfield  = function (obj) { 
	    obj.onclick = null;
	    obj.parentNode.parentNode.removeChild(obj.parentNode);
  inp_cnt--;
 
  if (inp_cnt < 3) {
   document.getElementById('send_file_btn').style.display = 'block';
  }
}
// Функция "Добавить поле"
uploader.addfield  = function (GLOB) {
if (inp_cnt > 3) {
  document.getElementById('send_file_btn').style.display = 'none';
  return false;
} else {
  document.getElementById('send_file_btn').style.display = 'block';
}
	    /*
		 * Здесь код формирует очередное поле загрузки файла,
		 * т.е. html код элементов, эквивалентный следующему:
		 * 
		 * <p>
		 *	    <input name="file[]" type="file" size="30" />
		 *	    <button type="button" onclick="uploader.delfield(this)">DEL</button>
		 * </p>
		 *
		 * Только обработчик onclick назначиться чуть по - другому.
		 */  
  var DOC					   = GLOB.document,
		  wrapper			   = DOC.getElementById("filewrapper"),
		  htmlP		   = DOC.createElement("P"),
		  htmlInput	   = DOC.createElement("INPUT"),
		  htmlButton	 = DOC.createElement("BUTTON"),
		  htmlButtonText = DOC.createTextNode("DEL");
					   
  htmlInput.name		 = "file[]";
  htmlInput.type		 = "file";
  htmlInput.size		 = "30";
	   
  htmlButton.onclick = function() { uploader.delfield(htmlButton) };  
	   
  // Добавляем всё это хозяйство в DOM дерево документа:
  wrapper.appendChild(htmlP);
  htmlP.appendChild(htmlInput);
  htmlP.appendChild(htmlButton);
  htmlButton.appendChild(htmlButtonText); 
 
  inp_cnt++;
}
</script>
ну как-то так
 

KDES70

Well-Known Member
Регистрация
16.02.2012
Сообщения
73
Огромное спасибо !!!
вот выложу обработчик может кому пригодится

Код:
header( 'content-type: text/html; charset="cp1251"' );

if( !isset($_FILES['file']) ) exit( "Ошибка: файлы не дошли." );

$errors = array();

for( $i = 0, $length = count( $_FILES['file']['name'] ); $i < $length; $i++)
{
    // Если текущий элемент подмассива 'error' имеет значение отличное от 0
    // Значит с файлом проблемы...
    if( $_FILES['file']['error'][$i] !== 0 )
    {
	    // Наполняем массив $errors - ключ это имя проблемного файла, а значение код ошибки.
	    $errors[ $_FILES['file']['name'][$i] ] = $_FILES['file']['error'][$i];
	    // Пропускаем итерацию:
	    continue;
    }
    // Выводим информацию пользователю:
  echo '<p>Файл успешно загружен :
		    <strong style="color:green"> '.$_FILES['file']['name'][$i].'</strong>
		    - '.$_FILES['file']['size'][$i].' Byte
	    </p>';
	    $filename[] = "img_".date("YmdHis")."_".$_FILES['file']['name'][$i];
  // Перемещаем файл из временной директории в постоянную 'upfiles' - директория должна существовать
  // и иметь соответствующие права, разрешающие запись в неё. К имени нового файла добавим префикс,
  // состоящий из мд5 хеша времени загрузки в микросек. таким образом даже, если мы загрузим два идентичных
  // файла - ошибки задвоения не произойдет ( идея заимствована в Joomla )
  move_uploaded_file( $_FILES['file']['tmp_name'][$i],
					  $_SERVER['DOCUMENT_ROOT'].DIRECTORY_SEPARATOR.
					  'files'.DIRECTORY_SEPARATOR.$filename[$i] );
					 
}

// Смотрим были ли ошибки загрузки:
if( count($errors) > 0 )
{
    echo '<p>Эти файлы не были загружены: </p>';
	
	    // $errors - ассоциативный массив, у которого ключ это имя проблемного файла,
	    // а значение ключа - это код ошибки:
	    foreach( $errors AS $fileName => $error )
	    {
		    echo '<p>'.$fileName.' - <strong style="color:red">'.getError( $error ).'</strong></p>';
	    }
}

/*
* Получить описание ошибки по номеру.
* @param string: $error - номер ошибки из иассива $_FILES['...']['error']
* return string
*/
function getError( /*int*/ $error )
{
    switch( $error )
    {
	    case UPLOAD_ERR_INI_SIZE   : ;
	    case UPLOAD_ERR_FORM_SIZE  : return 'Файл слишком большой.';
		  break;
		
	    case UPLOAD_ERR_PARTIAL    : return 'Файл получен частично.';
		    break;
			
	    case UPLOAD_ERR_NO_FILE    : return 'Файл не был загружен.';
		    break;
			
	    case UPLOAD_ERR_NO_TMP_DIR : return 'Ошибка сервера: отсутствует временная папка.';
		    break;
			
	    case UPLOAD_ERR_CANT_WRITE : return 'Ошибка сервера: не удалось записать файл на диск.';
		    break;
			
	    case UPLOAD_ERR_EXTENSION  : return 'PHP-расширение остановило загрузку файла.';
		    break;
    }
}
$img1 = $filename[0];
$img2 = $filename[1];
$img3 = $filename[2];
 
Статус
Закрыто для дальнейших ответов.
Верх Низ