Jump to content
austinmrs

Upload várias imagens + criar pasta

Recommended Posts

austinmrs

Boa noite,

Aqui está a minha página para inserir dados:

http://www.testeeee.cixx6.com/admin/inserir_sitio.php

O que queria ajuda para fazer, era, conseguir fazer upload de várias imagens, quantas o utilizador quisesse, e que todas elas fossem para uma pasta criada e que iria ter automaticamente o nome posto em "Nome".

A parte que preciso de ajudar, é criar a pasta para as imagens irem para lá. Ou seja adiciono um Sitio com o nome: Café do Zé, e as imagens do café do zé vão para a pasta /images/café do zé

Adiciono Café da Maria e cria a pasta /images/café da maria.

A outra parte que preciso de ajuda é fazer upload de várias imagens.. Pois ao fazer isto:

Image1: <input type="file" name="image1" /><br>
Image2: <input type="file" name="image2" /><br>
Image3: <input type="file" name="image3" /><br>
Image4: <input type="file" name="image4" /><br>

Irão aparecer vários campos para fazer upload. E o que queria, era que só aparecesse um, e depois de esse estar com um ficheiro, é que aparecia entrada para outro.

Cumprimentos e obrigado :)

Share this post


Link to post
Share on other sites
taviroquai

mkdir() é o comando que precisas.

Para fazeres upload de varios basta correres o array $_FILES e a cada 1 move_uploaded_file()

Com 3 linhas fazes isso...

Edited by taviroquai

Share this post


Link to post
Share on other sites
austinmrs

E se existirem 2 "café do zé"? Acho que era melhor associares o nome da pasta a um registo da base de dados com o nome que o cliente lhe deu, sendo que o nome da pasta passa a ser o ID desse registo.

Como assim a um registo?

Share this post


Link to post
Share on other sites
fteixeira1993

Como assim a um registo?

Imagina a seguinte situção:

2 utilizadores vão e preenchem o formolario e tal e ambos escrevem que é o café do zé, a pasta existente irá ser substituida por uma nova ou entao fica com a pasta existente e guardam os 2 utilizadores na mesma pasta. Daí associar o nome da pasta ao ID de registo do utilizador para que isso não acontenca (em vez de a pasta se chamar cafe do ze passa a ser 1 por exemplo, sendo 1 o id do cafe do ze). Traduzido por outras palavras era o que o @yoda te queria dizer.

(ps. espero ter-me feito entender :S)

cumps,

fteixeira1993

Edited by fteixeira1993

Share this post


Link to post
Share on other sites
austinmrs

Imagina a seguinte situção:

2 utilizadores vão e preenchem o formolario e tal e ambos escrevem que é o café do zé, a pasta existente irá ser substituida por uma nova ou entao fica com a pasta existente e guardam os 2 utilizadores na mesma pasta. Daí associar o nome da pasta ao ID de registo do utilizador para que isso não acontenca (em vez de a pasta se chamar cafe do ze passa a ser 1 por exemplo, sendo 1 o id do cafe do ze). Traduzido por outras palavras era o que o @yoda te queria dizer.

(ps. espero ter-me feito entender :S)

cumps,

fteixeira1993

Ah, percebi. Só vai haver um utilizador em principio. O que estão a dizer, é a pasta ficar com o id do sitio inserido, certo?

Share this post


Link to post
Share on other sites
yoda

Se só vai haver um utilizador não há problema. De qualquer forma, para facilitar e se precisares mais tarde podes usar o ID do utilizador para definir o seu "workspace", onde ficam os ficheiros dele, para evitar colisões de nomes iguais.

if (!mkdir($pasta, 0644, true)) {
die('Falhou a criação das pastas');
}

Share this post


Link to post
Share on other sites
austinmrs

Então mas mesmo que haja vários utilizadores, as imagens podem ser guardadas em /image/id_sitio/imagem.jpg.

ou seja cada vez que adiciono um sitio é criado uma pasta com o id do sitio, assim nunca acontece repetição de pastas, mesmo que criei vários utilizadores, não há problema, certo? porque isso é um back office do site para se adicionar sitios, logo em principio só terá um utilizador

Share this post


Link to post
Share on other sites
austinmrs

alguém me pode dar um bom tutorial por onde possa começar a fazer isto? acho que o melhor seria comecar pelo upload de uma só imagem, e criar a pasta com o id do sitio para por a imagem, certo?

Share this post


Link to post
Share on other sites
austinmrs

http://www.portugal-a-programar.pt/topic/52272-upload-multiplo-de-imagens/page__st__20

esse que está no fim do tópico penso que se adapta ao que quero, certo? Ele o que faz é, quando o campo já tem uma imagem, cria outro para fazer upload de outro, certo?

Ou seria melhor guiar-me por este:

http://www.portugal-a-programar.pt/topic/22284-php-upload-de-imagem/

Cumps e o meu muito obrigado por toda a ajuda que me tem dado

Share this post


Link to post
Share on other sites
austinmrs

boa tarde :)

estive aqui a fazer, e o upload é feito, as imagens são postas na pasta que escolhi, mas só uma fica guardada na bd. ou seja escolho para fazer upload de 3 images, e só uma fica com o caminho guardado na bd.

Agora queria que alguém me desse uma ajudinha a fazer o que disse em cima. Ou seja em vez de guardar o campo na bd, ao inserir um sitio, é criada uma pasta dentro da images_sitio, e essa pasta que vai ser criada vai ter o nome do id do "sitio". Assim apenas precisava de guardar na bd o caminho da pasta, e depois deve haver forma para mostrar as imagens todas dessa pasta, certo?

Aqui vai o código:

 <form id="form_554350" class="appnitro"  method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" enctype="multipart/form-data">
 <div class="form_description">
  <h2>Turismo Murtoseiro</h2>
  <p>Painel Administrativo</p>
 </div>
  <?php
  include('dbconnect.php');
  //ira verificar se clicou no botao enviar
if(isset($_POST['enviar'])){
$nrFicheiros = count($_FILES['arquivo']['name']);
    for($i = 0; $i < $nrFicheiros; $i++){

 $nomesitio = $_POST['nome'];
 $horario = $_POST['horario'];
 $contato = $_POST['contato'];
 $morada = $_POST['morada'];
 $tipo = $_POST['tipo'];
 $freguesias = $_POST['freguesias'];
		    //o nome original do arquivo no computador do utilizador
	 $arqName = $_FILES['arquivo']['name'][$i];
    //o tipo mime do arquivo
    $arqType = $_FILES['arquivo']['type'][$i];
    //o tamanho do arquivo
    $arqSize = $_FILES['arquivo']['size'][$i];
    //o nome temporario do arquivo com que foi guardado no servidor
    $arqTemp = $_FILES['arquivo']['tmp_name'][$i];
    //o codigo de erro associado a este upload de arquivo
    $arqError = $_FILES['arquivo']['error'][$i];
    //lista de tipos de arquivos permidos
    $tiposPermitidos = array('image/gif', 'image/jpeg', 'image/jpg', 'image/png');
    //tamanho maximo
    $tamanhoPermitido = 6024 * 3000;
		    if ($arqError == 0){
						    //verifica o tipo de arquivo enviado
						    if(array_search($arqType, $tiposPermitidos) === false){
								    $retorno = '<span class="no">O tipo de arquivo enviado é invalido!</span>' ;
								    //verifica o tamanho do arquivo enviado
						    }elseif ($arqSize > $tamanhoPermitido){
										    $retorno = '<span class="no">O tamanho do arquivo enviado e maior que o limite!</span>';
								    }else{
										    echo "imagem aceite";
										    $pasta = '../images_sitios/';
										    //pega a extensao do arquivo enviado
										    $extensaoTemp = explode('.',$arqName);
										    $extensao = strtolower(end($extensaoTemp));
										    //define o nome do arquivo usando um Unix TimesTamp
										    $nome = $i.time(). '.' . $extensao;
										    $upload = move_uploaded_file($arqTemp, $pasta . $nome);
												    if ($upload === true){
														    $ficheiro = $pasta.$nome;
												    }else{
														    $retorno = '<span class="no">Nao foi possivel fazer o upload da imagem!</span>';
												    }
								    }			  
						    }
				    }
		    //validacao do formulario
    if(empty($ficheiro)){
		    $retorno = '<span class="quase">Insira a imagem!</span>';
		    }	  
    //verifica se a variavel retorno estiver vazia (nao conter erro)	   
		    if(empty($retorno)){
    //cria uma query Mysql
    $query = mysql_query("INSERT INTO sitio (nome_sitio, horario, contato, morada, imagem, id_tipo, id_freguesia) VALUES ('$nomesitio','$horario','$contato','$morada','$ficheiro','$tipo','$freguesias')") or die (mysql_error());
    //se a query existe entao a pagina é redireccionada
		    if($query === true){
		    $sucesso = '<span  class="yes">A pagina ira ser redirecionada em poucos segundos, Obrigado!</span>';
		    echo $sucesso;
						    //echo"<META HTTP-EQUIV=REFRESH CONTENT='2; URL=#'>";	 
	    }
    }else{
		    echo $retorno;
    }
    }
    ?>
  <ul >


 <label class="description">Nome: </label>
 <div>
  <input name="nome" class="element text medium" type="text" value=""/>
 </div>
 <label class="description">Horário: </label>
 <div>
  <input name="horario" class="element text medium" type="text" value=""/>
 </div>
 <label class="description">Contato: </label>
 <div>
  <input name="contato" class="element text small" type="text" value=""/>
 </div>
 <label class="description">Morada: </label>
 <div>
  <input name="morada" class="element text large" type="text" value=""/>
 </div>
 <label class="description">Imagem: </label>
 <div>
  <input name="arquivo[]" type="file" value="" multiple="multiple"/>
 </div>
 <label class="description">Tipo: </label>
 <div>
  <div>
  <select name="tipo">
 <?php
 include('dbconnect.php');
 $sql="SELECT * FROM tipo";
 $result = mysql_query($sql);
 while($row = mysql_fetch_array($result))
   {
   echo "<option value=".$row['id_tipo'].">".$row['tipo']."</option>";
   }
 mysql_close($con);
 ?>
 </select>
 </div> 
 </div>
 <label class="description">Freguesia: </label>
 <div>
  <div>
  <select name="freguesias">
 <?php
 include('dbconnect.php');
 $sql="SELECT * FROM freguesias";
 $result = mysql_query($sql);
 while($row = mysql_fetch_array($result))
   {
   echo "<option value=".$row['id_freguesia'].">".$row['freguesia']."</option>";
   }
 mysql_close($con);
 ?>
 </select>
 </div> 
 </div>
<li class="buttons">
<input type="hidden" name="enviar" value="enviar" />	
<input id="saveForm" class="button_text" type="submit" name="enviar" value="Inserir" />
</li>
</ul>  
</form>

Share this post


Link to post
Share on other sites
austinmrs

Update: Desisti de fazer o upload múltiplo, visto que será mais difícil.

Então o que vou tentar fazer é: Fazer upload de uma imagem

  • Resize da imagem para 800x600
  • Criar thumbnail dela.

Agora a minha dúvida é: Gravo na bd o caminho da thumb também? Ou não é preciso?

Tenho este script, e funciona, a imagem vai para a pasta, com um nome único, e o caminho dela é posto na bd.

<?php
include('dbconnect.php');

if(isset($_POST['enviar']))
{ //START IF

$nomesitio = $_POST['nome'];
$horario = $_POST['horario'];
$contato = $_POST['contato'];
$morada = $_POST['morada'];
$tipo = $_POST['tipo'];
$freguesias = $_POST['freguesias'];
//o nome original do arquivo no computador do utilizador
$arqName = $_FILES['arquivo']['name'];
 //o tipo mime do arquivo
$arqType = $_FILES['arquivo']['type'];
  //o tamanho do arquivo
$arqSize = $_FILES['arquivo']['size'];
//o nome temporario do arquivo com que foi guardado no servidor
$arqTemp = $_FILES['arquivo']['tmp_name'];
//o codigo de erro associado a este upload de arquivo
$arqError = $_FILES['arquivo']['error'];
//lista de tipos de arquivos permidos
$tiposPermitidos = array('image/gif', 'image/jpeg', 'image/jpg', 'image/png');
//tamanho maximo
$tamanhoPermitido = 6024 * 3000;
if ($arqError == 0)
{
//verifica o tipo de arquivo enviado
   if(array_search($arqType, $tiposPermitidos) === false)
   {
   $retorno = '<span class="no">O tipo de arquivo enviado é invalido!</span>' ;
   }
//verifica o tamanho do arquivo enviado
   elseif ($arqSize > $tamanhoPermitido)
   {
   $retorno = '<span class="no">O tamanho do arquivo enviado e maior que o limite!</span>';
   }
   else
   {
       $pasta = 'images_sitios/';
//pega a extensao do arquivo enviado
       $extensaoTemp = explode('.',$arqName);
       $extensao = strtolower(end($extensaoTemp));
//define o nome do arquivo usando um Unix TimesTamp
       $nome = time(). '.' . $extensao;
       $upload = move_uploaded_file($arqTemp, $pasta . $nome);

       if ($upload === true)
       {
       $ficheiro = $pasta.$nome;                                                                    
       }

       else
       {
       $retorno = '<span class="no">Nao foi possivel fazer o upload da imagem!</span>';
       }
   }                         
}

if(empty($ficheiro))
{
$retorno = '<span class="quase">Insira a imagem!</span>';
}         
//verifica se a variavel retorno estiver vazia (nao conter erro) 
if(empty($retorno))
{
   $query = mysql_query("INSERT INTO sitio (nome_sitio, horario, contato, morada, imagem, id_tipo, id_freguesia) VALUES ('$nomesitio','$horario','$contato','$morada','$ficheiro','$tipo','$freguesias')") or die (mysql_error());
//se a query existe entao a pagina é redireccionada
   if($query === true)
   {
   $sucesso = '<span  class="yes">Sitio inserido com sucesso!</span>';
   echo $sucesso;
   }
}
else
{
echo $retorno;
}

} //END IF
?>

O que preciso de ajuda é: Fazer resize da imagem, e criar a thumb.

Edited by austinmrs

Share this post


Link to post
Share on other sites
austinmrs

Já consegui! Tenho desta forma:

  • Faz upload da imagem.
  • É redimensionada para 800x800 e copiada para images_sitio/
  • É criada uma thumb em images_sitio/thumbnails
  • É guardado o nome da imagem na db, que é o mesmo nos dois casos.

Acho que é a melhor forma de o fazer, certo?

Share this post


Link to post
Share on other sites
austinmrs

Já está como quero. Depois para mostrar a tumb é só fazer images_sitios/thumbnails/$imagem e para mostrar a imagem faço images_sitios/$imagem.

Só tenho uma dúvida, como é que faço para apagar os dados da bd e também apagar a imagem? Apagar os dados da bd é fácil, mas e para apagar a thumb+imagem das pastas?

<?php
include 'dbconnect.php';
if(isset($_POST['remover']))
$sql="DELETE FROM sitio WHERE id_sitio='".$_POST['nome']."'";

if (!mysql_query($sql,$con))
 {
 die('Erro: ' . mysql_error());
 }
echo "O sitio escolhido foi removido com sucesso!";

mysql_close($con);

?>

Neste momento tenho isto. Antes disto tenho um select que me mostra todos os sitios existente.

Mas há algo que está mal, sei que é no "if". alguém me pode ajudar?

Edited by austinmrs

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.