Ir para o conteúdo
austinmrs

Upload várias imagens + criar pasta

Mensagens Recomendadas

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 :)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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...

Editado por taviroquai

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Editado por fteixeira1993

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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');
}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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>

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Editado por austinmrs

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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?

Editado por austinmrs

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
austinmrs

unlink('/pasta/imagem.jpg');

Podes ver o que tenho mal no código em cima? Não consigo resolver. Sei o que está mal, mas não estou a conseguir por correctamente.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
austinmrs

Que erro te dá?

Não dá erro, mas dá logo o echo "O sitio escolhido foi removido com sucesso!". E o que queria era que esse echo só aparecesse depois de o sitio ser removido. Aparece logo antes de clicar no botão sequer. Por isso é que acho que está algo mal com o if, porque tenho 2 seguidos..

Mas ao clicar no botão a informação desse sitio é toda removida da bd.

Edit: Resolvido.

Uma questão, como é que faço, para por exemplo, no fim do script que insere o sitio, ou seja, depois do sitio inserido, fazer reaload á página?

Já tentei com o

header('Location: http://www.example.com/');

Mas não funciona no server. apesar de no localhost funcionar.

Editado por austinmrs

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
yoda
<?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);

?>

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
austinmrs

Já está a funcionar :)

A minha duvida é: como é que faço para ir buscar o nome da imagem que está guardado na bd só do sitio que quero remover? Porque se fizer:

unlink('/pasta/$imagem');

Ele vai buscar todos os nomes de imagem que estão na tabela, e não o do sitio que quero remover..

EDIT:

Tentei isto:

<?php
include('dbconnect.php');
if(isset($_POST['remover']))
{
$nome = $_POST['nome'];
$result = mysql_query("select imagem from sitio WHERE id_sitio='".$nome."'");
$query=mysql_query("DELETE FROM sitio WHERE id_sitio='".$nome."'") or die (mysql_error());
if($query === true)
 {
$sucesso = '<span  class="yes">Sitio removido com sucesso!</span>';
echo $sucesso;
echo $result;
 }
 else
{
$erro = '<span class="error">Ocorreu um erro!</span>';
echo $retorno;
}
}
?>

Fiz echo $result para ver se era guardado o nome da imagem que está na bd e não é. O que aparece no echo é "Resource id#10. Mas o sitio é apagado na mesma, logo a query está bem.. Alguma ideia?

EDIT2:

Done :)

Editado por austinmrs

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.