Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

P3rukao

[Resolvido] Adicionar Inputs Dinâmicos e pegar os valores em outr

Recommended Posts

Olá pessoal... eu estou com uma duvida "mixta" aqui...

 

Eu preciso criar um sistema de upload de multiplas imagens... (parcialmente resolvido)

 

Nesse sistema... deve haver um botão para adicionar mais campos de upload... caso necessário o envio de mais de uma imagem.

<html>
<head>
<title>Multiplas imagens</title>
<script type="text/javascript">
	var my_div = null;
	var newDiv = null;
	
	function addElement()
	{
	  var n = document.getElementById("qtdImgs").value;
	  n++;
	  
	  newDiv = document.createElement("div");
	  newDiv.innerHTML = '<p style="height:25px" id="container_img_1">		  <label for="arquivo'+n+'">Imagem(84x84): </label>		<input id="arquivo'+n+'" name="arquivo'+n+'" type="file" size="40" value="arquivo'+n+'" />	</p>	<p style="height:25px" id="container_img_1">		<label for="arquivog'+n+'">Imagem(420x420): </label>		<input id="arquivog'+n+'" name="arquivog'+n+'" type="file" size="40" value="arquivo'+n+'" />	</p>	<p>		<label for="legenda'+n+'">Legenda: </label>		<input id="legenda'+n+'" name="legenda'+n+'" type="text" maxlength="100" size="40" />	<input type="hidden" id="tipo'+n+'" name="tipo'+n+'" value="foto" /></p>';
	
	  // add the newly created element and it's content into the DOM
	  my_div = document.getElementById("aqui");
	  document.form1.insertBefore(newDiv, my_div);
	}
</script>
</head>
<body>

<form id="form1" name="form1" action="recebe.php" method="post" enctype="multipart/form-data"> 
	   
	<p>
		<label for="nome">Nome: </label>
		<input type="text" name="nome"  />
	</p>
	
	<p>
		<label for="img">Imagem Descritiva: </label>
		<input type="hidden" name="MAX_FILE_SIZE" value="10000000" />
		<input class="input_file" type="file" name="img"  />
	</p>
	
	<p class="but" id="aqui">		  
		<input type="hidden" id="qtdImgs" name="qtdImgs" value="0" />
		<input type="button" value="Nova Imagem" onClick="addElement()" id="btnNovaImg" />
	</p>
		
	<p class="but">
		<input name="submit" type="submit" value="Enviar" />
	</p>
</form>
</body>
</html>

 

 

E... deve haver uma página que irá receber esses dados e enviar para um banco ou outra "coisa"..

 

<?

	$c = $_POST['qtdImgs'];
	
	for ($i=0; $i <= $c; $i++)
	{
		$arquivo = $_FILES["arquivo".$i];
		
		echo "NOME ".$i.": ".$arquivo["name"]."<br />";
		
		
	}
?>

 

Estou tentando aqui em casa.. mas não estou conseguindo pegar os dados do outro lado (na outra página) TT.TT

Tentei usar ajax para gerar os campos de inputs dinamicamente... mas naum consegui... ainda não sei muito da lógica do "ajax"...

 

» Alguem sabe onde estou errando??

» Alguem conhece algum script que faça o que estou precisando??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá

 

Veja se te ajuda este outro tópico

 

 

OU então...

 

 

form_conta.php

<form action="form_gera.php" method="post">

<b>Envio das fotos</b><br />

Qual a quantidade de imagens do Evento?<br /><br />

<input type="text" name="quantidade" size="5"/><br />

<input type="submit" value="OK"/>

</form>

 

form_gera.php

<?php

// Obtém quantidade enviada. Perceba que é verificado se foi fornecido um número inteiro,
// caso contrário é usada uma quantidade padrão, 5.
$Quantidade = (isset($_POST['quantidade']) && is_int(intval($_POST['quantidade']))) ? (int)$_POST['quantidade'] : 5;

// Abre formulário de upload
echo '<form action="processa_upload.php" method="POST" enctype="multipart/form-data">';
echo '<b>Envio das fotos</b><br />';

// Imprime os campos para upload, de acordo com a quantidade pedida
for($i = 1; $i <= $Quantidade; ++$i)
{
	echo 'Foto #' . $i . ': <input type="file" name="fotos[]" /><br/>';
}

// Fecha formulário
echo '<br /><input type="submit" value="OK"/>';
echo '</form>';

?>

 

processa_upload.php

<?php

 // Pasta de destino das fotos
$Destino = './eventoxyz/fotos/';
 // Obtém dados do upload
$Fotos = $_FILES['fotos'];
// Contagem de fotos enviadas
$Conta = 0;

// Itera sobre as enviadas e processa as validações e upload
for($i = 0; $i < sizeof($Fotos); $i++)
{
   // Passa valores da iteração atual
	$Nome	= $Fotos['name'][$i];
	$Tamanho = $Fotos['size'][$i];
	$Tipo	= $Fotos['type'][$i];
	$Tmpname = $Fotos['tmp_name'][$i];

	// Verifica se tem arquivo enviado
	if($Tamanho > 0 && strlen($Nome) > 1)
	{
	   // Verifica se é uma imagem
		if(preg_match('/^image\/(gif|jpeg|jpg|png)$/', $Tipo))
		{
			// Caminho completo de destino da foto
			$Caminho = $Destino . $Nome;

			// Tudo OK! Move o upload!
			if(move_uploaded_file($Tmpname, $Caminho))
			{
				echo 'Foto #' . ($i+1) . ' enviada.<br/>';
				
				// Faz contagem de enviada com sucesso
				$Conta++;
			}			
			else // Erro no envio
			{
				// $i+1 porque $i começa em zero
				echo 'Não foi possível enviar a foto #' . ($i+1) . '<br/>';
			}
		}
	}
}

if($Conta) // Imagens foram enviadas, ok!
{
	echo '<br/>Foi(am) enviada(s) ' . $Conta . ' foto(s).';
}
else // Nenhuma imagem enviada, faz alguma ação
{
	echo 'Você não enviou fotos!';
}

?>

 

OBS: Usei este código uma fez para um sistema que fiz....

Retirado deste link

Compartilhar este post


Link para o post
Compartilhar em outros sites

lgl..... tá bem bacana esse script aí... eu dei uma adaptada... e ficou "supimpa" ;)

 

O único problema eh que depois dessa adaptada... eu não estou conseguindo pegar o valor do numero total de dados dos inputs com o nome de arquivo[]...

 

tipo... na segunda pagina, onde eu pego os valores da primeira.... eu não consigo pegar o valor do numero total de dados que tem no array enviado... que seria usando o sizeof()...

 

Mas aqui naum tá funfando... =$

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eh o mesmo que eu postei mais acima (praticamente):

 

PAGINA INICIAL

<html>
<head>
<title>Multiplas imagens</title>
<script type="text/javascript">
	function adiciona_Upload() {
		
		var n = document.getElementById("qtdImgs");
		
		var p = document.createElement("p");
		p.setAttribute("style", "height:25px");
		
		var input = document.createElement("input");
		input.setAttribute("name", "arquivo[]");
		input.setAttribute("type", "file");
		input.setAttribute("size", "40");

		var div = document.getElementById("mais_Upload");
		
		p.appendChild(input);
		div.appendChild(p);
		
		++n;
		n.value = n;
	}
</script>
</head>
<body>
<form id="form1" name="form1" action="recebe2.php" method="post" enctype="multipart/form-data"> 

	
	<div id="mais_Upload" style="background:#acd;"></div>
	
	<p class="but" id="aqui">		  
		<input type="hidden" id="qtdImgs" name="qtdImgs" value="0" />
		<input type="button" value="Nova Imagem" onClick="adiciona_Upload()" id="btnNovaImg" />
	</p>
		
	<p class="but">
		<input name="submit" type="submit" value="Enviar" />
	</p>
</form>
</body>
</html>

 

ESSE EH O SEUGUNDO SCRIPT

 

 

<?
	$Fotos = $_FILES['arquivo'];
	echo "Tamanho Total de imagens: ".count($Fotos)."<br />";
	
	for($i = 0; $i < sizeof($Fotos); $i++)
	{
		// Passa valores da iteração atual
		$Nome	= $Fotos['name'][$i];
		$Tamanho = $Fotos['size'][$i];
		$Tipo	= $Fotos['type'][$i];
		$Tmpname = $Fotos['tmp_name'][$i];
			
		echo 'Foto #' . ($i) . ' ['.$Nome.'] enviada.<br/>';
	}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu tentei o seguinte tbm... soh pra tirar o peso da consiencia!!!

 

Lah no formulário, eu substituí todo o conteudo por isso aqui:

<input type="file" name="arquivo[]" value="dfdgdgf" />
	<input type="file" name="arquivo[]" value="rtyrtb" />
	<input type="file" name="arquivo[]" value="dfwerwdgdgf" />

E na segunda página:

$Fotos = $_FILES['arquivo'];
	echo "Tamanho Total de imagens: ".count($Fotos)."<br />";

for($i = 0; $i < sizeof($Fotos); $i++)
	{
		// Passa valores da iteração atual
		$Nome	= $Fotos['name'][$i];
		$Tamanho = $Fotos['size'][$i];
		$Tipo	= $Fotos['type'][$i];
		$Tmpname = $Fotos['tmp_name'][$i];
			
		echo 'Foto #' . ($i) . ' ['.$Nome.'] enviada.<br/>';
	}

O erro é o mesmo: sempre aparece como se tivessem 5 arquivos;

 

Eu substituí tbm os tipos de FILE para TEXT... e alterei lah na seguna pagina para $_POST onde era $_FILES...

daí funciona beleza... conta certinho....

 

Só posso concluir que o erro está no inputFILE... mas.

 

 

 

» Por que que está dando esse erro... e

» O que eu faço pra ajeitar???

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara troca o arquivo recebe2.php por este aqui ó:

 

$Fotos = $_FILES['arquivo'];
	echo "Tamanho Total de imagens: ".count($Fotos)."<br>"; 

	
	for($i = 0; $i < sizeof($Fotos['name']); $i++)
	{
		// Passa valores da iteração atual
		$Nome	= $Fotos['name'][$i];
		$Tamanho = $Fotos['size'][$i];
		$Tipo	= $Fotos['type'][$i];
		$Tmpname = $Fotos['tmp_name'][$i];
			
		echo 'Foto #' . ($i) . ' ['.$Nome.'] enviada.<br/>';
	}

Explicação:

 

Cada item passado é um array com 5 posições dá um print_r($Fotos) que você vai entender...

 

falou...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ahhh... bixo, agora eu saqueeei.... http://forum.imasters.com.br/public/style_emoticons/default/yay.gif

 

eu tava pedindo para exibir o tamanho do array $Fotos... que por padrão já tem os seus elementos (name, size, type, etc...) que pertencem ao inputFile...

não me liguei mesmo nisso... :wacko:

 

 

novato, tu num sabe o quanto me ajudou com esse "pequeno detalhe de programação" kra... vlw msm http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

 

 

 

Grato pela ajuda!

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.