Ir para conteúdo

POWERED BY:

Arquivado

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

Fabyo

Upload de Imagem

Recommended Posts

|Outra Dúvida Fabyo,

 

tenho a opção de alterar notícia na pagina restrita, só que ele não altera se o campo imagem estiver vazio, tem como eu chamar do bd o nome da foto no form do arquivo ou fazer uma verificação se o campo estiver vaziu ele não faz insert da imagem no bd?

Compartilhar este post


Link para o post
Compartilhar em outros sites

daew galera

tava olhando o script eh show de bola

 

e tava com um galhao para mandar a $nome_foto para o bd

 

dai eu tava pensando ... e tentei algo banal .....

 

mandar por session

e nao eh q deu certo...

 

eu fiz assim

			   reduz_imagem_png($this->arquivo['tmp_name'], 400, 300, $diretorio_g.$nome_foto);
				//passo o tamanho da thumbnail
				reduz_imagem_png($this->arquivo['tmp_name'], 120, 90, $diretorio_p.$nome_thumb);
			}
			
			echo "<span style=\"color: white; border: solid 1px; background: purple;\">".$this->erro[$this->arquivo['error']]."</span>";
			
			$ft = $diretorio . $nome_foto;
	 		   $_SESSION['foto'] = $ft;
e no sql eu fiz assim

 

include_once('class.upload.php');

$upload = new Upload();
$upload->Envia_Arquivo();

if(IsSet($_SESSION["foto"]))


$nome = $_SESSION["foto"];

...................

		$sql = "insert into item values 
				(null, $idcat, $idc, '$ite_nom', '$ite_des', '$ite_val','$nome')";

espero que isso ajude alguem

pq pra mim ajudou bastante

valeu fabyo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal estou utilizando o script modificado para uso de PNG e GIF!

 

Só que o mesmo apresentou erro no upload de arquivos PNG!

 

Caso alguem tenha o mesmo problema!

 

Aqui ta a solução!

return imagepng($image_p, $nome_foto, 100);
Mudar para

return imagepng($image_p, $nome_foto, 9);

Retirei a solução daqui, se alguem quiser dar uma olhada, o responsável pela correção explica melhor!

http://forum.imasters.com.br/index.php...=3&t=308307

 

Espero ter ajudado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Salve galera,

Fiz uma pequena modificação no código dentro do class.upload.php,

$get = getimagesize($this->arquivo['tmp_name']);
		if(($get["mime"] != "image/jpeg") AND ($get["mime"] != "image/gif") AND ($get["mime"] != "image/png")) {
			echo "<span style=\"color: white; border: solid 1px; background: red;\">Este Arquivo Não é um Tipo de Imagem Válida. Aceitos ( .jpg, .gif, .png)!</span>";
			exit;
		}

adicionei uma verificação do tamanho da imagem, no caso, abaixo do código que está acima,

 

$size = filesize($this->arquivo['tmp_name']);
		if( $size >= 204800 ) {
			echo "<span style=\"color: white; border: solid 1px; background: red;\">Este Arquivo Ultrapassa o Tamanho Limite(200kb)!</span>";
			exit;
		}

Devido a minha necessidade de manter o site navegável e não lotado de imagens gigantescas, já que eu utilizo também uma imagem em seu tamanho original!

 

^^

 

E tenho uma dúvida, não vi qual a real aplicação da seguinte parte e tambem não sei como manipulala!

var $erro = array ( "0" => "Imagem Enviada Com Sucesso!!",
							 "1" => "O Arquivo é Maior Que o Permitido pelo Servidor!",
							 "2" => "O Arquivo é Maior Que o Permitido pelo Sistema!",
							 "3" => "Imagem Enviada Parcialmente!", 
							 "4" => "A Imagem Não Foi Enviada!");

Se alguém puder me ajudar agradeço!

 

Tenham uma boa noite!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como eu consigo aproveitar esse código para multiplos uploads???

 

classUpload.php

<?php
	set_time_limit(0);
	class Upload {
		var $arquivo = "";
		var $erro = array ( "0" => "Upload realizado com sucesso!",
							"1" => "O arquivo é maior que o permitido pelo servidor",
							"2" => "O arquivo é maior que o permitido pelo formulario",
							"3" => "O upload do arquivo foi feito parcialmente",
							"4" => "Não foi realizado nenhum upload!");
		
		function Verifica_Upload() {
			$this->arquivo = isset($_FILES['arquivo']) ? $_FILES['arquivo'] : FALSE;
			if(!is_uploaded_file($this->arquivo['tmp_name'])) {
				return false;
			}
			$get = getimagesize($this->arquivo['tmp_name']);
			
			if(($get["mime"] != "image/jpeg") and ($get["mime"] != "image/gif") and ($get["mime"] != "image/png")) {
				echo "<div id='no_succes' align='center'><span class='font_texto_branco'>O arquivo selecionado não é uma imagem válida.</span></div>";
				echo"<meta http-equiv='refresh' content='2;URL=java script:history.go(-1);' />"; // REDIRECIONA A PAGINA
				exit;
			}
			return true;
		}
		
		function Envia_Arquivo() {
			if($this->Verifica_Upload()) {
				$this->gera_fotos();
				return true;
				} else {
					echo "<div id='no_succes' align='center'><span class='font_texto_branco'>".$this->erro[$this->arquivo['error']]."</span></div>";
			}
		}
		
		function gera_fotos() {
			$diretorio = "upload/";
			$diretorio_g = "upload/";
			$diretorio_p = "upload/thumb/";
			if(!file_exists($diretorio)) {
				mkdir($diretorio);
			}
			if(!file_exists($diretorio_g)) {
				mkdir($diretorio_g);
			}
			if(!file_exists($diretorio_p)) {
				mkdir($diretorio_p);
			}
			
			$get2 = getimagesize($this->arquivo['tmp_name']); /* VERIFICAR SE A IMAGEM GIF ou JPG ou PNG*/
			$aux_tipo_imagem = $get2["mime"]; /* VERIFICAR SE A IMAGEM GIF ou JPG ou PNG*/
			
			// SE A IMAGEM FOR JPG
			if ($aux_tipo_imagem == "image/jpeg") {
			   $_POST['imagem_g'] = $nome_foto  = "imagem_".time().".jpg";
			   $_POST['imagem_p'] = $nome_thumb = "thumb_".time().".jpg";
			  // DEFINE RESOLUÇÃO MÁXIMA, SE A IMAGEM FOR MAIOR ELA SERÁ REDUZIDA
			   reduz_imagem_jpg($this->arquivo['tmp_name'], 400, 300, $diretorio_g.$nome_foto);
				// DEFINE O TAMANHO DO THUMB
			   reduz_imagem_jpg($this->arquivo['tmp_name'], 120, 90, $diretorio_p.$nome_thumb);
			}
			
			// SE A IMAGEM FOR GIF
			if ($aux_tipo_imagem == "image/gif") {
			   $_POST['imagem_g'] = $nome_foto = "imagem_".time().".gif";
			   $_POST['imagem_p'] = $nome_thumb = "thumb_".time().".gif";
			   // DEFINE RESOLUÇÃO MÁXIMA, SE A IMAGEM FOR MAIOR ELA SERÁ REDUZIDA
				reduz_imagem_gif($this->arquivo['tmp_name'], 400, 300, $diretorio_g.$nome_foto);
			   // DEFINE O TAMANHO DO THUMB
				reduz_imagem_gif($this->arquivo['tmp_name'], 120, 90, $diretorio_p.$nome_thumb);
			}
			
			// SE A IMAGEM FOR PNG
			if ($aux_tipo_imagem == "image/png") {
				$_POST['imagem_g'] = $nome_foto = "imagem_".time().".png";
				$_POST['imagem_p'] = $nome_thumb = "thumb_".time().".png";
				// DEFINE RESOLUÇÃO MÁXIMA, SE A IMAGEM FOR MAIOR ELA SERÁ REDUZIDA
				reduz_imagem_png($this->arquivo['tmp_name'], 400, 300, $diretorio_g.$nome_foto);
			   // DEFINE O TAMANHO DO THUMB
				reduz_imagem_png($this->arquivo['tmp_name'], 120, 90, $diretorio_p.$nome_thumb);
			}
			
			echo "<div id='succes' align='center'><span class='font_texto_branco'>".$this->erro[$this->arquivo['error']]."</span></div>";
		}
	}
?>

Formulario.html

...
<input type="file" name="arquivo" />
...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz umas pequenas modificações, agora ele funciona com multiplos ulploads, deixei com 3, mas você pode mudar e colocar mais ou menos

 

mudem a vontade, pois eu so fiz umas pequenas modificações rapidas

 

index.php

<?php
if(!(file_exists("class_upload.php"))){
exit("Classe class_upload.php nao encontrada");
} else {	
require_once "class_upload.php";
} 	

if($_SERVER["REQUEST_METHOD"] == "POST"){
$upload = new Upload();
$upload->Enviar_Fotos();
exit;
}	

?>
<html>
<head>
<title>Upload</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<form action="<?php echo $_SERVER["PHP_SELF"];?>" method="post" enctype="multipart/form-data" name="form1">
<input type="file" name="arquivo[]"><br />
<input type="file" name="arquivo[]"><br />	
<input type="file" name="arquivo[]">
<input type="submit" name="Submit" value="Enviar">
</form>
</body>
</html>

 

funcoes.php

<?php
/*Fabyo Guimaraes de Oliveira */
function reduz_imagem($img, $max_x, $max_y, $nome_foto) {
//pega o tamanho da imagem ($original_x, $original_y)
list($width, $height) = getimagesize($img);

$original_x = $width;
$original_y = $height;

// se a largura for maior que altura
if($original_x > $original_y) {
   $porcentagem = (100 * $max_x) / $original_x;	  
}
else {
   $porcentagem = (100 * $max_y) / $original_y;  
}

$tamanho_x = $original_x * ($porcentagem / 100);
$tamanho_y = $original_y * ($porcentagem / 100);

$image_p = imagecreatetruecolor($tamanho_x, $tamanho_y);
$image   = imagecreatefromjpeg($img);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $tamanho_x, $tamanho_y, $width, $height);

return imagejpeg($image_p, $nome_foto, 100);
}

?>

 

class_upload.php

<?php
set_time_limit(0);
if(!(file_exists("funcoes.php"))){
exit("funcoes.php nao encontrada");
} else {	
require_once "funcoes.php";
} 	

class Upload
{
var $arquivo = "";
var $erro = array ( "0" => "upload execultado com sucesso!",
					"1" => "O arquivo é maior que o permitido pelo Servidor",
					"2" => "O arquivo é maior que o permitido pelo formulario",
					"3" => "O upload do arquivo foi feito parcialmente",	
					"4" => "Não foi feito o upload do arquivo"
				   );

function Enviar_Fotos()
{
	$this->arquivo = isset($_FILES['arquivo']) ? $_FILES['arquivo'] : FALSE;

	for($i = 0; $i < 3; $i++){
		$name	 = $this->arquivo['name'][$i];
		$type	 = $this->arquivo['type'][$i];
		$tmp_name = $this->arquivo['tmp_name'][$i];
		$error	= $this->arquivo['error'][$i];
		$size	 = $this->arquivo['size'][$i];			

		if(is_uploaded_file($tmp_name)) {
			$this->salvar_fotos($tmp_name, $error);
		} else {
			echo "<span style=\"color: white; border: solid 1px; background: red;\">".$this->erro[$error]."</span><br />";
		}				
	}
}

function salvar_fotos($tmp_name, $error)
{
	$diretorio = "fotos/";
	if(!file_exists($diretorio)){
		if(!(mkdir($diretorio))) die("Nao foi possivel criar a pasta fotos");
	}

	$get = getimagesize($tmp_name);

	if($get["mime"] != "image/jpeg"){	
		die("<span style=\"color: white; border: solid 1px; background: red;\">Esse arquivo nao é uma imagem valida</span>");
	}

	$nome_foto  = "imagem_".microtime().".jpg";		
	$nome_thumb = "thumb_".microtime().".jpg";

	if (!(is_writable($diretorio))) {
		die('O diretorio fotos não possui permissão de escrita');
	}
	//determino uma resolução maxima e se a imagem for maior ela sera reduzida
	reduz_imagem($tmp_name, 400, 300, $diretorio.$nome_foto);		 
	//passo o tamanho da thumbnail
	reduz_imagem($tmp_name, 120, 90, $diretorio.$nome_thumb);
	echo "<span style=\"color: white; border: solid 1px; background: blue;\">".$this->erro[$error]."</span><br />";
}	
}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado Fabyo, deu certinho...

 

Só mais uma dúvida...

 

Na classe como eu posso armazenar em um array as imagens para inserir depois no aquivo index.php

Com um campo estava fazendo assim:

$_POST['imagem_g'] = $nome_foto  = "imagem_".time().".jpg";
$_POST['imagem_p'] = $nome_thumb = "thumb_".time().".jpg";

Estou fazendo assim no index.php

$mySQL = new MySQL; 
$rsQuery = $mySQL->executeQuery("INSERT INTO links(nome, link, logo, logo_thumb, tipo) VALUES ('".$_POST['nome']."', '".$_POST['link']."', '".$_POST['imagem_g']."', '".$_POST['imagem_p']."', 'Links')");

Com multiplos ficaria como se colocasse mais 2 campos na minha tabela LOGO_02 e LOGO_THUMB_02?

 

,

Compartilhar este post


Link para o post
Compartilhar em outros sites

E Ae Pessoal,

 

La vai mais uma coisa que eu achei um tanto quanto interessante para adicionar no script!

 

Para quem também faz upload de arquivos .PNG com fundo transparente, pode alterar essa parte!

function reduz_imagem_png($img, $max_x, $max_y, $nome_foto) {
list($width, $height) = getimagesize($img);
	$original_x = $width;
	$original_y = $height;

	if($original_x > $original_y) {
		$porcentagem = (100 * $max_x) / $original_x;
	} else {
		$porcentagem = (100 * $max_y) / $original_y;
	}
	$tamanho_x = $original_x * ($porcentagem / 100);
	$tamanho_y = $original_y * ($porcentagem / 100);

	$image_p = imagecreatetruecolor($tamanho_x, $tamanho_y);

	imagesavealpha($image_p, true);

	$tranparente = imagecolorallocatealpha($image_p, 0, 0, 0, 127);
	imagefill($image_p, 0, 0, $tranparente);

	$image   = imagecreatefrompng($img);

	imagecopyresampled($image_p, $image, 0, 0, 0, 0, $tamanho_x, $tamanho_y, $width, $height);

	return imagepng($image_p, $nome_foto, 9);
}

Assim as imagens se mantem transparentes por completo e não com fundo preto!

 

Abraços pra Geral!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pegando os nomes das fotos...

 

Galera alterei o arquivo class_upload.php para pegar os nomes da imagem

<?php
	set_time_limit(0);

	class Upload {
		
		//METODO PARA ENVIAR IMAGEM
		public function getImagem(){
			  return $this->imagem;
		}
		public function setImagem($im){
 			$this->imagem = $im;
		}
		
		//METODO PARA ENVIAR THUMB
		public function getThumb(){
			  return $this->thumb;
		}
		public function setThumb($t){
 			$this->thumb = $t;
		}
		
		var $arquivo = "";
		var $thumb = "";
	var $imagem = "";

...
			
	// SE A IMAGEM FOR JPG
			if ($aux_tipo_imagem == "image/jpeg") {
			   $nome_imagem  = "imagem_".time().".jpg";
			   $nome_thumb = "thumb_".time().".jpg";
		$this->imagem = $nome_imagem;
		 $this->thumb = $nome_thumb;
	// DEFINE RESOLUÇÃO MÁXIMA, SE A IMAGEM FOR MAIOR ELA SERÁ REDUZIDA
			   reduz_imagem_jpg($tmp_name, 400, 300, $diretorio_g.$nome_imagem);
			   // DEFINE O TAMANHO DO THUMB
			   reduz_imagem_jpg($tmp_name, 120, 90, $diretorio_p.$nome_thumb);
			}
			

?>

index.php

$upload = new Upload();  // ESTÂNCIA A CLASSE UPLOAD
$upload->Envia_Arquivo(); // CHAMA A CLASSE
$nome_imagem = $upload->getImagem();// PEGA NOME DA IMAGEM 
$nome_thumb = $upload->getThumb(); // PEGA NOME DA THUMB

Mais ainda estou com duvida na hora inserir.

EX: Quando eu faço dois uploads ele passa primeiro pela classe e substitui o nome da primeira imagem na segunda, eu queria ver se tem algum jeito de armazenar os nomes e depois passar para ser inserido

 

$mySQL = new MySQL; // ESTÂNCIA A CLASSE MYSQL
$rsQuery = $mySQL->executeQuery("INSERT INTO links(nome, link, logo, logo_thumb, logo_02, logo_thumb_02, tipo) VALUES ('".$_POST['nome']."', '".$_POST['link']."', '".$nome_imagem."', '".$nome_thumb."', '".NOME_IMAGEM2."', '".NOME_IMAGEM_THUMB2."', 'Links')");

 

Alguem poderia me ajudar??

 

,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, vou postar aqui algumas coisa que uni e que modifiquei para meu uso:

As alterações:

 

Enviar múltiplas imagens, e se a imagem for menor não alterar, etc.

 

class.upload.php:

<?php
	set_time_limit(0);
	
	 // Incluo as funcões
	require_once ("funcoes.php");
	
	class Upload {
		var $arquivo = "";
		var $topico_id = topico_id; // id de algum tópico que você acabou de inserir e quer relcionar com as imagens em uma tabela diferente
		var $opcao_envio = opcao_envio; // Opcao usar diferente tabelas
		var $diretorio = diretorio; // diretorio das imagens
		var $erro = array ( "0" => "Imagem enviada com sucesso!",
							"1" => "O arquivo é maior que o permitido pelo Servidor",
							"2" => "O arquivo é maior que o permitido pelo formulario",
							"3" => "O upload do arquivo foi feito parcialmente",
							"4" => "Não foi feito o upload do arquivo");
		
		function Verifica_Upload() {
			
			$this->arquivo = isset($_FILES['arquivo']) ? $_FILES['arquivo'] : FALSE;
			
			$num = count($_FILES['arquivo']['name']);

			for ($i = 0;$i < $num; $i++){					
									 
			if(!is_uploaded_file($this->arquivo['tmp_name'][$i])) {
				return false;
			}						
			$get = getimagesize($this->arquivo['tmp_name'][$i]);
			
			if(($get["mime"] != "image/jpeg") AND ($get["mime"] != "image/gif") AND ($get["mime"] != "image/png")) {
				echo "<span style=\"color: white; border: solid 1px; background: red;\">Tipo de Arquivo não permitido, por favor envie uma imagem jpeg, png ou gif.</span>";
				exit;
			}						
			return true;
			}
			
		}
		
		function Envia_Arquivo($xp,$yp,$xg,$yg) {
			if($this->Verifica_Upload()) {
				$this->gera_fotos($xp,$yp,$xg,$yg);
				return true;
				} else {
					echo "<span style=\"color: white; border: solid 1px; background: red;\">".$this->erro[$this->arquivo['error']]."</span>";
			}
		}

		function gera_fotos($xp,$yp,$xg,$yg) {
			$num = count($_FILES['arquivo']['name']);
			
				$diretorio = "../img/{$this->diretorio}/";
				$diretorio_g = "../img/{$this->diretorio}/g/"; // Diretorio imagens grandes
				$diretorio_p = "../img/{$this->diretorio}/p/"; // Diretorio Imagens pequenas				
			
			if(!file_exists($diretorio)) {
				mkdir($diretorio);
			}
			if(!file_exists($diretorio_g)) {
				mkdir($diretorio_g);
			}
			if(!file_exists($diretorio_p)) {
				mkdir($diretorio_p);
			} 

			for ($i=0; $i < $num; $i++){		   
			$get2 = getimagesize($this->arquivo['tmp_name'][$i]); /* Vai servir para verificar se eh GIF ou JPG ou PNG*/
			$aux_tipo_imagem = $get2["mime"]; /* Vai servir para verificar se eh GIF ou JPG ou PNG*/
			
			$gera_nome = time() + $i;
		  
			if ($aux_tipo_imagem == "image/jpeg") {
				$nome_foto  = "".$gera_nome.".jpg";
				

				if ($this->opcao_envio == 'opcaodefinida'){		   	
					$resultado = $SQL->Query("INSERT INTO ptunet_imagens (imagem,topicoid) VALUES('$nome_foto','$this->topico_id')");

				}				
					//determino uma resolução maxima e se a imagem for maior ela sera reduzida
					reduz_imagem_jpg($this->arquivo['tmp_name'][$i], $xg, $yg, $diretorio_g.$nome_foto);
					//passo o tamanho da thumbnail
					reduz_imagem_jpg($this->arquivo['tmp_name'][$i], $xp, $yp, $diretorio_p.$nome_foto);
				
			}
			
			if ($aux_tipo_imagem == "image/gif") {
				$nome_foto  = "".$gera_nome.".gif";
   
				if ($this->opcao_envio == 'opcaodefinida'){		   	
					$resultado = $SQL->Query("INSERT INTO tabela_imagens (imagem,topicoid) VALUES('$nome_foto','$this->topico_id')");

				}
				
					//determino uma resolução maxima e se a imagem for maior ela sera reduzida
					reduz_imagem_gif($this->arquivo['tmp_name'][$i], $xg, $yg, $diretorio_g.$nome_foto);
					//passo o tamanho da thumbnail
					reduz_imagem_gif($this->arquivo['tmp_name'][$i], $xp, $yp, $diretorio_p.$nome_foto);
			}
			
			if ($aux_tipo_imagem == "image/png") {
				$nome_foto  = "".$gera_nome.".png";

				if ($this->opcao_envio == 'opcaodefinida'){		   	
					$resultado = $SQL->Query("INSERT INTO tabela_imagens (imagem,topicoid) VALUES('$nome_foto','$this->topico_id')");

				}
					//determino uma resolução maxima e se a imagem for maior ela sera reduzida
					reduz_imagem_png($this->arquivo['tmp_name'][$i], $xg, $yg, $diretorio_g.$nome_foto);
					//passo o tamanho da thumbnail
					reduz_imagem_png($this->arquivo['tmp_name'][$i], $xp, $yp, $diretorio_p.$nome_foto);
			}
									  
			}
  
		}
	}
?>

Funcoes.php:

<?php
//########################  Função para imagem JPG ###########################

	function reduz_imagem_jpg($img, $max_x, $max_y, $nome_foto) {
	  
		//pega o tamanho da imagem ($original_x, $original_y)
		list($width, $height) = getimagesize($img);
		
		$original_x = $width;
		$original_y = $height;
		
		// Se a imagem original for menor que o tamanho configurado, matenho as dimensões originais		
		if ($original_x > $max_x){		
		// se a largura for maior que altura
			if($original_x > $original_y) {
				$porcentagem = (100 * $max_x) / $original_x;
				} else {
					$porcentagem = (100 * $max_y) / $original_y;
				}
				$tamanho_x = $original_x * ($porcentagem / 100);
				$tamanho_y = $original_y * ($porcentagem / 100);		
			}else{
				$tamanho_x = $original_x;
				$tamanho_y = $original_y;
				}
				
		$image_p = imagecreatetruecolor($tamanho_x, $tamanho_y);
		$image   = imagecreatefromjpeg($img);
		
		imagecopyresampled($image_p, $image, 0, 0, 0, 0, $tamanho_x, $tamanho_y, $width, $height);
		
		return imagejpeg($image_p, $nome_foto, 100);
 
	}
	

//########################  Função para imagem GIF ###########################
	
	function reduz_imagem_gif($img, $max_x, $max_y, $nome_foto) {
		
		//pega o tamanho da imagem ($original_x, $original_y)
		list($width, $height) = getimagesize($img);
		
		$original_x = $width;
		$original_y = $height;
	   
	   // Se a imagem original for menor que o tamanho configurado, matenho as dimensões originais		
		if ($original_x > $max_x){		
		// se a largura for maior que altura
			if($original_x > $original_y) {
				$porcentagem = (100 * $max_x) / $original_x;
				} else {
					$porcentagem = (100 * $max_y) / $original_y;
				}
				$tamanho_x = $original_x * ($porcentagem / 100);
				$tamanho_y = $original_y * ($porcentagem / 100);		
			}else{
				$tamanho_x = $original_x;
				$tamanho_y = $original_y;
				}
		
		$image_p = imagecreatetruecolor($tamanho_x, $tamanho_y);
		$image   = imagecreatefromgif($img);
		
		imagecopyresampled($image_p, $image, 0, 0, 0, 0, $tamanho_x, $tamanho_y, $width, $height);
		
		return imagegif($image_p, $nome_foto, 50);
	}
	
	

//########################  Função para imagem PNG ###########################
	
	function reduz_imagem_png($img, $max_x, $max_y, $nome_foto) {
		
		//pega o tamanho da imagem ($original_x, $original_y)
		list($width, $height) = getimagesize($img);
		
		$original_x = $width;
		$original_y = $height;
		
	   // Se a imagem original for menor que o tamanho configurado, matenho as dimensões originais		
		if ($original_x > $max_x){		
		// se a largura for maior que altura
			if($original_x > $original_y) {
				$porcentagem = (100 * $max_x) / $original_x;
				} else {
					$porcentagem = (100 * $max_y) / $original_y;
				}
				$tamanho_x = $original_x * ($porcentagem / 100);
				$tamanho_y = $original_y * ($porcentagem / 100);		
			}else{
				$tamanho_x = $original_x;
				$tamanho_y = $original_y;
				}
		  
		$image_p = imagecreatetruecolor($tamanho_x, $tamanho_y);
		imagealphablending($image_p, false);
		imagesavealpha($image_p,true);
		$image   = imagecreatefrompng($img);
		
		imagecopyresampled($image_p, $image, 0, 0, 0, 0, $tamanho_x, $tamanho_y, $width, $height);
		
		return imagepng($image_p, $nome_foto, 9);
	}
?>

Usando:

Form

<? for ($i=0; $i < 3 - $contador_img; $i++){?>
							<label><? echo $i + 1; ?> - Imagem:</label><input name="arquivo[]" type="file" /><br />

							<?}?>

No arquivo que vai receber o formulário:

// Loop para caso o cliente não preencha os campos, ele não chamar a class e gerar vários erros
for ($i=0; $i <3; $i++){
			if (!empty($_FILES['arquivo']['name'][$i])){
					$verdade++;
					}
		}

		if ($verdade >= '1'){
				define("topico_id", id de registro que quer relacionar);
				define("opcao_envio","valor opcao envio");
				define("diretorio","imagens");
				require_once("./include/class.upload.php");
				$upload = new Upload();
// Dimensões tumb e grande
				$upload->Envia_Arquivo(120,100,320,300);
		}

Se alguém souber melhorar mais ainda ou reduzir códigos, por favor postem e contribuam.

Compartilhar este post


Link para o post
Compartilhar em outros sites
  Fabyo disse:

Fiz umas pequenas modificações, agora ele funciona com multiplos ulploads, deixei com 3, mas você pode mudar e colocar mais ou menos

 

mudem a vontade, pois eu so fiz umas pequenas modificações rapidas

 

index.php

<?php
if(!(file_exists("class_upload.php"))){
	exit("Classe class_upload.php nao encontrada");
} else {	
	require_once "class_upload.php";
} 	

if($_SERVER["REQUEST_METHOD"] == "POST"){
	$upload = new Upload();
	$upload->Enviar_Fotos();
	exit;
}	

?>
<html>
<head>
<title>Upload</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<form action="<?php echo $_SERVER["PHP_SELF"];?>" method="post" enctype="multipart/form-data" name="form1">
	<input type="file" name="arquivo[]"><br />
	<input type="file" name="arquivo[]"><br />	
	<input type="file" name="arquivo[]">
	<input type="submit" name="Submit" value="Enviar">
</form>
</body>
</html>

funcoes.php

<?php
/*Fabyo Guimaraes de Oliveira */
function reduz_imagem($img, $max_x, $max_y, $nome_foto) {
	//pega o tamanho da imagem ($original_x, $original_y)
	list($width, $height) = getimagesize($img);

	$original_x = $width;
	$original_y = $height;

	// se a largura for maior que altura
	if($original_x > $original_y) {
	   $porcentagem = (100 * $max_x) / $original_x;	  
	}
	else {
	   $porcentagem = (100 * $max_y) / $original_y;  
	}

	$tamanho_x = $original_x * ($porcentagem / 100);
	$tamanho_y = $original_y * ($porcentagem / 100);

	$image_p = imagecreatetruecolor($tamanho_x, $tamanho_y);
	$image   = imagecreatefromjpeg($img);
	imagecopyresampled($image_p, $image, 0, 0, 0, 0, $tamanho_x, $tamanho_y, $width, $height);

	return imagejpeg($image_p, $nome_foto, 100);
}

?>

class_upload.php

<?php
set_time_limit(0);
if(!(file_exists("funcoes.php"))){
	exit("funcoes.php nao encontrada");
} else {	
	require_once "funcoes.php";
} 	

class Upload
{
	var $arquivo = "";
	var $erro = array ( "0" => "upload execultado com sucesso!",
						"1" => "O arquivo é maior que o permitido pelo Servidor",
						"2" => "O arquivo é maior que o permitido pelo formulario",
						"3" => "O upload do arquivo foi feito parcialmente",	
						"4" => "Não foi feito o upload do arquivo"
					   );
		
	function Enviar_Fotos()
	{
		$this->arquivo = isset($_FILES['arquivo']) ? $_FILES['arquivo'] : FALSE;
		
		for($i = 0; $i < 3; $i++){
			$name	 = $this->arquivo['name'][$i];
			$type	 = $this->arquivo['type'][$i];
			$tmp_name = $this->arquivo['tmp_name'][$i];
			$error	= $this->arquivo['error'][$i];
			$size	 = $this->arquivo['size'][$i];			
			
			if(is_uploaded_file($tmp_name)) {
				$this->salvar_fotos($tmp_name, $error);
			} else {
				echo "<span style=\"color: white; border: solid 1px; background: red;\">".$this->erro[$error]."</span><br />";
			}				
		}
	}
	
	function salvar_fotos($tmp_name, $error)
	{
		$diretorio = "fotos/";
		if(!file_exists($diretorio)){
			if(!(mkdir($diretorio))) die("Nao foi possivel criar a pasta fotos");
		}

		$get = getimagesize($tmp_name);
		
		if($get["mime"] != "image/jpeg"){	
			die("<span style=\"color: white; border: solid 1px; background: red;\">Esse arquivo nao é uma imagem valida</span>");
		}
		
		$nome_foto  = "imagem_".microtime().".jpg";		
		$nome_thumb = "thumb_".microtime().".jpg";
		
		if (!(is_writable($diretorio))) {
			die('O diretorio fotos não possui permissão de escrita');
		}
		//determino uma resolução maxima e se a imagem for maior ela sera reduzida
		reduz_imagem($tmp_name, 400, 300, $diretorio.$nome_foto);		 
		//passo o tamanho da thumbnail
		reduz_imagem($tmp_name, 120, 90, $diretorio.$nome_thumb);
		echo "<span style=\"color: white; border: solid 1px; background: blue;\">".$this->erro[$error]."</span><br />";
	}	
}

?>

Consegui tudo certinho, meu problema era justamente esse de conseguir fazer o upload de mais de uma foto. PORÉM, surgiu mais um problema. Como inserir o endereço da foto no BD? tenho 3 campos: foto1, foto2 e foto3.

 

Eu consegui inserir quando era apenas uma foto, mas quando foram 3 fotos não consegui mais.

 

Eu melhorei para as minhas necessidades esse código e também usei o do Raziel Nomack, que usa apenas 1 campo no BD para inserir as fotos, e coloca a thumbs em pasta separada.

 

Mas na hora de inserir as fotos no BD não estou conseguindo, alguém me da um help?

 

<?php
set_time_limit(0);
if(!(file_exists("funcoes.php"))){
	exit("funcoes.php nao encontrada");
} else {	
	require_once "funcoes.php";
}	 

class Upload
{
	var $arquivo = "";
	var $erro = array ( "0" => "upload executado com sucesso!",
						"1" => "O arquivo é maior que o permitido pelo Servidor",
						"2" => "O arquivo é maior que o permitido pelo formulario",
						"3" => "O upload do arquivo foi feito parcialmente",	
						"4" => "Não foi feito o upload do arquivo"
					   );
		
	function Enviar_Fotos()
	{
		$this->arquivo = isset($_FILES['arquivo']) ? $_FILES['arquivo'] : FALSE;
		
		for($i = 0; $i < 3; $i++){
			$name	 = $this->arquivo['name'][$i];
			$type	 = $this->arquivo['type'][$i];
			$tmp_name = $this->arquivo['tmp_name'][$i];
			$error	= $this->arquivo['error'][$i];
			$size	 = $this->arquivo['size'][$i];			
			
			if(is_uploaded_file($tmp_name)) {
				$this->salvar_fotos($tmp_name, $error);
			} else {
				echo "<span style=\"color: white; border: solid 1px; background: red;\">".$this->erro[$error]."</span><br />";
			}				
		}
	}
	
	function salvar_fotos($tmp_name, $error)
	{
		$diretorio = "fotos/";
		if(!file_exists($diretorio)){
			if(!(mkdir($diretorio))) die("Nao foi possivel criar a pasta fotos");
		}

		$get = getimagesize($tmp_name);
		
		if($get["mime"] != "image/jpeg"){	
			die("<span style=\"color: white; border: solid 1px; background: red;\">Esse arquivo nao é uma imagem valida</span>");
		}
		
		$nome_foto  = "imagem_".microtime().".jpg";		
		$nome_thumb = "thumb_".microtime().".jpg";
		
		if (!(is_writable($diretorio))) {
			die('O diretorio fotos não possui permissão de escrita');
		}
		//determino uma resolução maxima e se a imagem for maior ela sera reduzida
		reduz_imagem($tmp_name, 400, 300, $diretorio.$nome_foto);		
		//passo o tamanho da thumbnail
		reduz_imagem($tmp_name, 120, 90, $diretorio.$nome_thumb);
		echo "<span style=\"color: white; border: solid 1px; background: blue;\">".$this->erro[$error]."</span><br />";
		
		
		// ----------------- Gravar no Banco de Dados ------------------- //

		
	$conexao = mysql_connect("localhost","root","");
		mysql_select_db("upload9");
		
 // ----------------- AQUI EU ME PERCO ------------------- //
   $sql = "insert INTO dados (foto1, foto2, foto3) Values ('$nome_foto')";
		$query = mysql_query($sql);
		
		mysql_close($conexao);
	
	}	
}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites
  Alan Douglas disse:

// ----------------- AQUI EU ME PERCO ------------------- //

$sql = "insert INTO dados (foto1, foto2, foto3) Values ('$nome_foto')";

$query = mysql_query($sql);

 

mysql_close($conexao);

 

}

}

 

?>

Como você, está gravando em cada campo, acho que você pode fazer um for, está retornando o nome das 3 fotos geradas?

 

tenta assim:

$fotos_gravar = array();
$fotos_gravar[] = $nome_foto;
$salvar = join(",",$fotos_gravar);
$sql = "insert INTO dados (foto1, foto2, foto3) Values ('$salvar')";

tenta ai... eu uso pra gravar alguns dados e dá certo.. se ele conseguir montar uma array co o nome das imagens vai dar certo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

pessoal nao precisa quotar o post todo senao o topico fica gigante sem necessidade

 

podem responder e so quotem o que for necessario

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mário, desculpe.. sou "novo" por aqui e aos poucos vou pegando as manhas.

 

 

 

THIAGO

Tentei desse jeito mas não funcionou também!

 

Outras maneiras que eu estava tentando era assim:

$sql = "insert INTO dados (foto1, foto2, foto3) Values ('{$_FILES['nome_foto']['nome_thumb'][$i]}')";

 

Mas não fui feliz, até fui em um momento mas acabei não salvando e perdi o código. Mas nele eu só conseguia gravar a primeira foto, as demais não iam para o BD, ou seja, não resolvia muito meu problema. =/

Compartilhar este post


Link para o post
Compartilhar em outros sites
  'Alan Douglas' disse:

Mário, desculpe.. sou "novo" por aqui e aos poucos vou pegando as manhas.

 

 

 

THIAGO

Tentei desse jeito mas não funcionou também!

 

Outras maneiras que eu estava tentando era assim:

$sql = "insert INTO dados (foto1, foto2, foto3) Values ('{$_FILES['nome_foto']['nome_thumb'][$i]}')";

 

Mas não fui feliz, até fui em um momento mas acabei não salvando e perdi o código. Mas nele eu só conseguia gravar a primeira foto, as demais não iam para o BD, ou seja, não resolvia muito meu problema. =/

 

 

Olá, sou iniciante e nova por aqui. Como estão passando ?

Gostaria de parabenizar a nova versão que o Fábyo fez deste script, muito bom!!!

 

Estou com o mesmo problema do colega Alan Douglas.

Como gravo no Banco de dados os nomes das fotos e os Thumbs gerados por este script ??

bjs pra vcs. http://forum.imasters.com.br/public/style_emoticons/default/bye1.gif

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.