Ir para conteúdo

Arquivado

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

mauricio.imbe

"Filtros" em script de upload de múltiplas imagens - mime ty

Recommended Posts

Olá pessoal, estou na minha caminhada em aprender PHP...

 

A partir de vários scripts de upload que encontrei pela web, montei o meu próprio. Nesta parte do código que estou postando, tem os "filtros" de mime type (para que o tipo de arquivo seja uma imagem válida), e tamanho do arquivo e tamanho da imagem em pixels (x,y). Enfim, o script funciona... mas não como esperado.

 

Por isso preciso da ajuda de vocês do forum.

 

Minhas imagens estão dentro de um array, são quatro campos em um formulário, entretanto nem todos são preenchidos com arquivos selecionados no form - tudo bem if($fotos[$i] != "") resolve o problema. Crio um laço for para pegar os valores da array em ($i) e faz o looping... até ai tudo certo.

 

Ele "filtra" direito, mas na hora de mostrar as mensagens de erro, ERRO!

 

As mensagens de erro são coletadas em arrays para cada foto (ou pelo menos deveria fazer isso). Rodo o script, e ele mostra os erros, mas de forma incorreta e em looping aparente.

 

Erro do código no navegador:

 

3LEO_03.jpg

Arquivo muito grande! A imagem deve ser de no máximo 61440 bytes.

Largura da imagem não deve ultrapassar 640 pixels

Altura da imagem não deve ultrapassar 480 pixels

Fazer Upload de Outra Imagem

 

6LEO_04 1.jpg

Arquivo muito grande! A imagem deve ser de no máximo 61440 bytes.

Largura da imagem não deve ultrapassar 640 pixels

Altura da imagem não deve ultrapassar 480 pixels

Arquivo muito grande! A imagem deve ser de no máximo 61440 bytes.

Largura da imagem não deve ultrapassar 640 pixels

Altura da imagem não deve ultrapassar 480 pixels

Fazer Upload de Outra Imagem

Os números (3 e 6) respectivamene antes dos nomes *.jpg se referem a quantidade de mensagens de erros contidas nos arrays! Onde no máximo seria 3 erros reportados neste exemplo. Dá pra observar o looping repetindo os dados da primeira imagem na segunda.

 

 

Parte do código responsável pela "filtragem":

 

//////////////////////////////////////////////////////////////////////////////////////// configura as variáveis de upload												 ////////////////////////////////////////////////////////////////////////////////////////$erro = $config = array(); // Tamanho máximo do arquivo (em bytes) $config["tamanho"] = 61440; // Largura máxima (pixels) $config["largura"] = 640; // Altura máxima (pixels) $config["altura"]  = 480;//////////////////////////////////////////////////////////////////////////////////////	$fotos = $_FILES['images']['name']; //for($i = 0; $i < sizeof($fotos); $i++)for($i = 0; $i <= count($fotos)-1; $i++){$result = count ($fotos);//echo"$result<br>";//echo"$fotos[$i]<br>";if($fotos[$i] != ""){	if (!eregi("^image\/(pjpeg|jpeg|png|gif|bmp)$", $_FILES['images']['type'][$i])) 	{ //echo $_FILES['images']['type'][$i];			$erro[] = "Arquivo em formato inválido!<br> A imagem deve ser jpg, jpeg, bmp, gif ou png.<br> Envie outro arquivo<br>"; 	} 		else 		{ 			// Verifica tamanho do arquivo 			if ($_FILES['images']['size'][$i] > $config['tamanho']) 			{ 			$erro[] = "Arquivo muito grande! A imagem deve ser de no máximo " . $config["tamanho"] . " bytes."; 			} 		 			// Para verificar as dimensões da imagem 			$tamanhos = getimagesize($_FILES['images']['tmp_name'][$i]); 		 			// Verifica largura 			if ($tamanhos[0] > $config['largura']) 			{ 			$erro[] = "Largura da imagem não deve ultrapassar " . $config["largura"] . " pixels"; 			} 			// Verifica altura 			if ($tamanhos[1] > $config["altura"]) 			{ 			$erro[] = "Altura da imagem não deve ultrapassar " . $config["altura"] . " pixels"; 			} 		} 	 			// Imprime as mensagens de erro 			if (sizeof($erro)) 			{ 			echo sizeof($erro);						echo '<img src="../images/admin/imagem_icone.gif" />' . $fotos[$i] . "<br>";				foreach ($erro as $err) 				{				echo '<img src="../images/admin/alerta_icone.gif" />' . $err . "<BR>";				} 						echo "<a href=\"?pagina=cadastrar\">Fazer Upload de Outra Imagem</a><br><br>"; 						} 			// Verificação de dados OK, nenhum erro ocorrido, executa então o upload... 				}}exit;
Preciso de ajuda, porque não consigo resolver o problema do looping nas mensagens de erro.

 

Toda ajuda é bem vinda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema do looping eu descobri. É porque o print do array $erro[] está dentro do laço for! Entretando, ainda não consigo fazer com que haja uma relação direta entre o arquivo upado, e o respectivo erro.

 

Minha dúvida, agora, é a maneira como posso relacionar itens entre dois arrays distintos e de tamanho variável?

 

Deixe explicar melhor:

 

1º array ($fotos):

 

 

 

0 | arquivo1 (imagem, ok)

1 | arquivo2 (texto, inválido)

2 | não possui valor

3 | não possui valor

 

Neste primeiro array eu tenho os valores dos campos 1 e 2 do meu form $fotos[] de 4 campos. Então, os campos 3 e 4 estão vazios. O campo 1 é uma imagem e não vai reportar $erro[], já o campo 2 do form foi inserido um arquivo txt e vai dar $erro[].

 

 

2º array ($erro[]):

 

0 | formato inválido

1 | tamanho inválido

2 | tamanho vertical em px inválido

3 | tamanhio horizontal em px inválido

 

Seguinte:

 

Se o array 0 estiver ok, ele não mostra erro algum e sequer aparece no report de erro. O array 1 (arquivo de texto) contém erro e vai ser reportado. Como fazer isso da seguinte maneira?

 

1- no item 1 do primeiro array, como fazer print nome do arquivo, print todos os erros do 2º array relacionados com aquele indice do 1º array? Será que me fiz entender?!

2- listar os erros eu consigo, mas não consigo indexar o arquivo aos respectivos erros!

 

 

Poxa vida! Sei que é lógia php mas não to conseguindo...

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.