Ir para conteúdo

POWERED BY:

Arquivado

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

Alaerte Gabriel

Upload de várias imagens e salvando o caminho no banco

Recommended Posts

Olá pessoal, devido ao auto índice de usuários se perguntando como fazer o upload de mais de uma imagem e como salvar seu caminho na base de dados, fiz algumas modificações na class feita pelo Fabyo neste tópico: http://forum.imasters.com.br/index.php?showtopic=164120 que serve para upload e redimensionamento da imegem, vamos modificar apenas a class responsável pelo upload, irei mostrar como salvar cada tipo de dados em suas respectivas tabelas, vejamos:

 

teremos que fazer alterações na class e na página que enviará estes dados para a class, o primeiro passo é fazer a página do form passar todos os dados dos arquivos para a class, faremos o seguinte:

Um formulário com os 4 campos, sendo 3 deles para as imagens e um para escrever qualquer nome que também será inserido no DB os dados deverão ser gravados em uma tabela, e o nome das imagens e uma tabela separada,vamos usar relacionamento de tabelas para este caso, iremos inserir as imagens com o mesmo ID da inserção dos dados, para fazermos o relacionamento via IDs, já vou avisando que o processo é complicado, também teremos outro campo que irá armazenar alguns números que irá nos garantir que o upload não vai repetir as fotos:

 

crie as tabelas serão 3

 

imgs

 

CREATE TABLE IF NOT EXISTS `imgs` (
`cod` smallint(5) unsigned NOT NULL auto_increment,
`id` smallint(5) unsigned NOT NULL default '0',
`imagens` varchar(60) NOT NULL default '',
`img_th` varchar(60) NOT NULL default '',
PRIMARY KEY (`cod`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

 

nome_foto

 

CREATE TABLE IF NOT EXISTS `nome_foto` (
`nome` int(20) unsigned NOT NULL default '0',
PRIMARY KEY (`nome`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

 

dados

 

CREATE TABLE IF NOT EXISTS `dados` (
`idade` INT(3) unsigned NOT NULL ,
PRIMARY KEY (`idade`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

 

cadastro.html

 

<form name="form1" id="form1" action="cadastrar.php" method="post" enctype="multipart/form-data">
<input name="ft0" type="file" /><br>
<input name="ft1" type="file" /><br>
<input name="ft2" type="file" /><br>
<input type="text" name="idade" />
<br />
<input type="submit" name="ok" value="Upload">
</form>

agora que temos a página com os campos, vamos ao tratamento dos dados na página cadastrar.php

 

cadastrar.php

 

//inserimos o nome qualquer que colocamos no campo nome
$in=mysql_query("INSERT INTO (idade) VALUES ('{$_POST['idade']}')")or die(mysql_error());

//pegamos o id da inserção, vamos precisar desse id, pois vamos transferi-lo para class.

$id_mysql=mysql_insert_id();
(file_exists('class_upload.php')) ? (require('class_upload.php')):false;
//chamo a class
$upload = new Upload();
//passo o ID para class através dessa função que criei:
$upload->id_m($id_mysql);
//pego os dados dos 3 campos
foreach($_FILES as $arquivo){
//enviamos o arquivo:
$upload->varios($arquivo);
$upload->Envia_Arquivo();
}

Agora vamos para a class, ela ficará assim:

 

class_upload.php

<?php
error_reporting(E_ALL);
set_time_limit(0);
(file_exists('funcoes_upload.php')) ? (require('funcoes_upload.php')):false;

class Upload{
	var $arquivo = '';
	var $idm='';
	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');


//aqui eu pego a quantidade de fotos enviadas
function varios($arg){
	$this->arquivo=isset($arg) ? $arg:false;
}
//aqui eu pego o id da última inserção no mysql.
function id_m($idd)
{
   $this->id_m=isset($idd) ? $idd:false;
}
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')
		{
			#echo "<span style=\"color: white; border: solid 1px; background: red;\">Esse foto nao é uma imagem valida</span>";
			exit;
		}
		return true;
	}
	function Envia_Arquivo()
	{
		if($this->Verifica_Upload()) {
			$this->gera_fotos();
			return true;
		} else {
			#echo "<span style=\"color: white; border: solid 1px; background: red;\">".$this->erro[$this->arquivo['error']]."</span>";
		}
	}



	 function verifica_nome(){
	 $achou = '';
	 while($achou != 'no'){
	 $rnd = rand(1,999999999);
	 $query = mysql_query("SELECT nome FROM nome_foto WHERE nome = '".$rnd."'");
	 if(!mysql_num_rows($query) || mysql_num_rows($query) == 0){
	 $nome  = $rnd;
	 $achou = 'no';
	 }
	 }
	 return $nome;
	 }
	
	function gera_fotos()
	{
		$diretorio = 'fotos/';
		if(!is_dir($diretorio))
		{
			mkdir($diretorio,0777);
		}
		
		$fotoSS=$this->verifica_nome();
		$nome_foto  = 'imagem_'.$fotoSS.'.jpg';
		$nome_thumb = 'thumb_'.$fotoSS.'.jpg';

		$caminho=$diretorio.$nome_foto;
		$caminho_t=$diretorio.$nome_thumb;
		

		//determino uma resolução maxima e se a imagem for maior ela sera reduzida
		reduz_imagem($this->arquivo['tmp_name'], 309, 228,$caminho);
				//passo o tamanho da thumbnail
		reduz_imagem($this->arquivo['tmp_name'], 120, 90,$caminho_t);
		#echo "<span style=\"color: white; border: solid 1px; background: blue;\">".$this->erro[$this->arquivo['error']]."</span>";
		
	   #########################################
		
	   $ins_nome_foto=mysql_query("INSERT INTO nome_foto (nome) VALUES('$fotoSS')")or die(mysql_error());
		
	   #inserindo o caminho das imagens
		
		$ins=mysql_query("INSERT INTO imgs (id,imagens,img_th)
		VALUES ('".$this->idm."','$caminho','$caminho_t')")or die(mysql_error());
	}
  }
?>

 

Ta ai todas as modificações necessárias, tive o cuidado de adicionar a função verifica_nome para que a class não repita as fotos, caso alguém tenha alguma dúvida, post.

 

Fabyo, caso queira fazer alguma observação, fique avontade.

Compartilhar este post


Link para o post
Compartilhar em outros sites

E outra coisa, seu script tá salvando as imagens como? No Banco de dados que não é, cadê o campo Blob? No servidor também não é...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, você prestou a atenção no título e na descrição do tópico não prestou ?

 

Leia todo o código e todo o tutorial que você entenderá, sem ler fica difícil.

 

Está salvando apenas o caminho das imagens no banco de dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, você prestou a atenção no título e na descrição do tópico não prestou ?

 

Leia todo o código e todo o tutorial que você entenderá, sem ler fica difícil.

 

Está salvando apenas o caminho das imagens no banco de dados.

 

 

Amigo, Estou tendo problemas com a gravação do id na tabela imgs, ele não está salvando , o que fazer???

 

Desde já agradeço.

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.