Fóruns sobre PHP, JavaScript, HTML, MySQLi, jQuery, Banco de Dados, CSS


Moderador: web

 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 271
Sexo: Masculino

trocar imagem em php

26-05-2016 20:07

Boa noite , queria substituir uma imagem de perfil, ate aqui tudo bem, porem quando a troco, fica na pasta a a imagem antiga....o que leva ao fim de um certo tempo acumular muitas imagens na pasta...desnecessariamente....

tenho aqui um excerto do codigo...

minhas variaveis:

$foto = $_FILES['foto']['name']; $foto_tmp = $_FILES['foto']['tmp_name']; $tipo = $_FILES['foto']['type']; //pasta de armazenamento das imagens $pasta_imagens = "Imagens/Avatares/"; ... //apaga e substitui a imagem anterior... echo unlink($pasta_imagens.$foto.""); //move a imagem fisicamente para a pasta de armazenamento move_uploaded_file($foto_tmp,$pasta_imagens.$foto); //update da imagem na base de dados $sql = $ligacao->query("UPDATE utilizadores SET foto = '$foto' WHERE email = '".$_SESSION['email']."' ");

CREIO, SER NA PARTE unlink me falta alguma coisa na sintaxe...não???
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17736
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Re: trocar imagem em php

26-05-2016 20:25

Pelo que vi você já tem a variável que armazena o local das fotos:

$pasta_imagens

Supondo que $foto é o nome da foto "ex.: foto.jpg" que você já tem salvo, o unlink deve ficar sem o echo, dessa forma:

unlink($pasta_imagens.$foto);

0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 271
Sexo: Masculino

Re: trocar imagem em php

29-05-2016 18:19

Hum....ja o tinha feito sem o echo..mas nao resultou...eis o codigo:

<?php //ALTERAR IMAGEM $erro_imagem = ''; if(isset($_REQUEST['upload'])) {//inicio chaveta -> if(isset($_REQUEST['upload'])) //ligar á base de dados require 'BaseDados/Ligacao_BaseDados.php'; ////PROPRIEDADE DA VARIAVEL FOTO... $foto = $_FILES['foto']['name']; //nome ficheiro e CAMPO DE ONDE VAI SER CARREGADA A FOTO... $foto_tmp = $_FILES['foto']['tmp_name'];//nome e pasta temporarios $tipo = $_FILES['foto']['type']; $bytes = substr($_FILES['foto']['size'],0 ,-3);//mostrar somente os bytes(os dois primeiros numeros DA FOTO SELECIONADA, ex: 50 kb $tamanho_permitido = 150; // considerando serem 150 kbytes...porque á variavel $bytes ja se está a tirar as casas decimais á direita! //pasta de armazenamento das imagens $pasta_imagens = "Imagens/Avatares/"; // definir as EXTENSÕES PERMITIDAS $extensoes_permitidas = array(".bmp",".gif",".png",".jpg"); //VERIFICAÇÃO DE ERROS // 1 - verificar TIPO de ficheiro (se é uma imagem ou não...) if($foto && !in_array(strchr($foto, "."),$extensoes_permitidas) )//se o ficheiro não fôr de extensão:jpeg,jpg,gif,png ou bmp. { $erro_imagem = '<div class="alert alert-danger" role="alert"> <span class="glyphicon glyphicon-exclamation-sign"></span> <strong> Isso não é uma imagem ! </strong> Esse ficheiro é do tipo <strong>'.substr($tipo,12).'</strong> ! </div>'; } // 1 - verificar TIPO de ficheiro (se é uma imagem ou não...) //if($foto && !preg_match("/^image\/(jpeg|jpg|png|gif|bmp)$/", $tipo) )//se o ficheiro não fôr de extensão:jpeg,jpg,gif,png ou bmp. // { // $erro_imagem = '<div class="alert alert-danger" role="alert"> // // <span class="glyphicon glyphicon-exclamation-sign"></span> // // <strong> Isso não é uma imagem ! </strong> Esse ficheiro é do tipo <strong>'.substr($tipo,12).'</strong> ! // // </div>'; // } // 2 - verificar o TAMANHO da imagem em kb elseif($foto != "" && $bytes > $tamanho_permitido) { $erro_imagem = '<div class="alert alert-warning" role="alert"> <span class="glyphicon glyphicon-exclamation-sign"></span> Imagem com <strong>'.$bytes.' bytes</strong> ... maior que o tamanho permitido de <strong>'.$tamanho_permitido.' bytes</strong> ! </div>'; } else { //definir tamanho maximo para o nome da foto $foto = substr($foto,-25);//só permite registar os ultimos 25 caracteres ,incluindo a extensão,ex: A.jpg ! //caso não haja inicialmente nenhuma imagem na base de dados...para evitar mostrar erro ... //error_reporting(0); //ini_set("display_errors", 0); //apaga e substitui a imagem anterior... unlink($pasta_imagens.$foto); //move a imagem fisicamente para a pasta de armazenamento move_uploaded_file($foto_tmp,$pasta_imagens.$foto); //update da imagem na base de dados $sql = $ligacao->query("UPDATE utilizadores SET foto = '$foto' WHERE email = '".$_SESSION['email']."' "); echo " <meta HTTP-EQUIV='refresh' CONTENT='1;URL=minha_conta.php'> "; // $erro_imagem = '<div class="alert alert-success"> // // <span class="glyphicon glyphicon-ok"></span> // // Alterou sua imagem de perfil com as seguintes caracteristicas : Nome:<strong> '.substr($foto,0,-4).' </strong> ; tamanho: <strong> '.$bytes.' Kbytes </strong>; tipo: <strong> '.substr($tipo,6).' </strong> // // </div>'; //fechar a ligação a base de dados ! mysqli_close($ligacao); }//fim chaveta -> if(!$erro //libertar a variavel da memoria ! mysqli_free_result($consulta); }//fim chaveta -> if(isset($_REQUEST['upload'])) ?>

0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17736
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Re: trocar imagem em php

30-05-2016 09:18

Acho que seu código está dando conflito nas variáveis.

//apaga e substitui a imagem anterior... unlink($pasta_imagens.$foto); //move a imagem fisicamente para a pasta de armazenamento move_uploaded_file($foto_tmp,$pasta_imagens.$foto);

Você tenta apagar a foto $foto, logo em seguida usa a mesma variável $foto para mover para outra pasta.

Usa um nome diferente de variável no nome da foto que será apagada, tipo: $foto_apaga

Você pode criar um input do tipo hidden e colocar o nome da foto nele, tipo:

<input type="hidden" name="foto_apaga" value=".. nome da foto.." />

0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 271
Sexo: Masculino

Re: trocar imagem em php

30-05-2016 15:28

Então faço assim(onde esta a seta...) ?

//PROPRIEDADE DA VARIAVEL FOTO...

$foto = $_FILES['foto']['name']; //nome ficheiro e CAMPO DE ONDE VAI SER CARREGADA A FOTO...

-> $foto_apaga = $_FILES['foto']['name'];

$foto_tmp = $_FILES['foto']['tmp_name'];//nome e pasta temporarios
$tipo = $_FILES['foto']['type'];
$bytes = substr($_FILES['foto']['size'],0 ,-3);//mostrar somente os bytes(os dois primeiros numeros DA FOTO SELECIONADA, ex: 50 kb


e depois no form assim...?!?

-> <input type="hidden" name="foto_apaga" id="foto_apaga" value=" <?php $foto_apaga ?> ">
0
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 271
Sexo: Masculino

Re: trocar imagem em php

30-05-2016 15:31

Então faço assim ?

//PROPRIEDADE DA VARIAVEL FOTO...

$foto = $_FILES['foto']['name']; //nome ficheiro e CAMPO DE ONDE VAI SER CARREGADA A FOTO...

$foto_apaga = $_FILES['foto']['name'];

$foto_tmp = $_FILES['foto']['tmp_name'];//nome e pasta temporarios $tipo = $_FILES['foto']['type']; $bytes = substr($_FILES['foto']['size'],0 ,-3);//mostrar somente os bytes(os dois primeiros numeros DA FOTO SELECIONADA, ex: 50 kb

depois no unlink...

//apaga e substitui a imagem anterior...
unlink($pasta_imagens.$foto_apaga);


e depois no form assim...?!?

<input type="hidden" name="foto_apaga" id="foto_apaga" value=" <?php $foto_apaga ?> ">
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17736
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Re: trocar imagem em php

30-05-2016 17:33

$foto_apaga não pode ser um campo do tipo file. Porque na verdade você necessita somente do nome da foto a ser deletada.

O correto seria

$foto_apaga = $_POST['foto_apaga'];

0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 271
Sexo: Masculino

Re: trocar imagem em php

30-05-2016 17:45

ok...ja substitui $foto_apaga = $_POST['foto_apaga'];

no unlink fica assim?:

unlink($pasta_imagens.$foto_apaga);


depois no form,assim?:

<input type="hidden" name="foto_apaga" id="foto_apaga" value=" <?php $foto_apaga ?> ">


é que tenho assim, e ficou na mesma...
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17736
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Re: trocar imagem em php

31-05-2016 09:15

O valor no input deve ter o echo para exibir o nome da foto.

<?php echo $foto_apaga; ?>

Olhe também pelo código-fonte da página para ver se o nome da foto está correto.

Confira também no banco de dados se o nome da foto está de acordo com o nome que é colocado no input hidden.

Adicione o die para obter o erro gerado pelo unlink

unlink($pasta_imagens.$foto_apaga) or die();

0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 271
Sexo: Masculino

Re: trocar imagem em php

01-06-2016 05:34

obrigado pelas dicas WEB,vou tentar resolver, depois digo onde estava o erro ;)
0
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 271
Sexo: Masculino

Re: trocar imagem em php

04-07-2016 17:20

Web , aparece-me a seguinte mensagem de erro:

Warning: unlink(Imagens/Avatares/Minha foto de perfil.jpg): No such file or directory in ...

p.s:a diretoria existe pois a imagem vai para a base de dados e para a pasta das imagens...só que não apaga a imagem de perfil se eu a quiser substituir... :sweat:

variaveis:

$foto = $_FILES['foto']['name']; //nome ficheiro e CAMPO DE ONDE VAI SER CARREGADA A FOTO...
$foto_tmp = $_FILES['foto']['tmp_name'];//nome e pasta temporarios $tipo = $_FILES['foto']['type'];
$bytes = substr($_FILES['foto']['size'],0 ,-3);//mostrar somente os bytes(os dois primeiros numeros DA FOTO SELECIONADA, ex: 50 kb

$foto_apaga = $_POST['foto_apaga'];


codigo:

...
unlink($pasta_imagens.$foto);
...


no form:

...
<input type="file" name="foto" id="foto" required style="cursor:pointer" />
<input type="hidden" name="foto_apagar" value="<?php echo $foto_apaga ?>"
...
0
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 271
Sexo: Masculino

Re: trocar imagem em php

04-07-2016 17:38

codigo completo:

if(isset($_REQUEST['upload'])) {//inicio chaveta -> if(isset($_REQUEST['upload'])) //ligar á base de dados require 'Ligar BaseDados/Ligacao_BaseDados.php'; //PROPRIEDADE DA VARIAVEL FOTO... $foto = $_FILES['foto']['name']; //nome ficheiro e CAMPO DE ONDE VAI SER CARREGADA A FOTO... $foto_tmp = $_FILES['foto']['tmp_name'];//nome e pasta temporarios $tipo = $_FILES['foto']['type']; $bytes = substr($_FILES['foto']['size'],0 ,-3);//mostrar somente os bytes(os dois primeiros numeros DA FOTO SELECIONADA, ex: 50 kb //$foto_apaga = $_POST['foto_apaga']; $tamanho_permitido = 150; // considerando serem 150 kbytes...porque á variavel $bytes ja se está a tirar as casas decimais á direita! //pasta de armazenamento das imagens $pasta_imagens = "Imagens/Avatares/"; // definir as EXTENSÕES PERMITIDAS $extensoes_permitidas = array(".bmp",".gif",".png",".jpg"); //VERIFICAÇÃO DE ERROS // 1 - verificar TIPO de ficheiro (se é uma imagem ou não...) if($foto && !in_array(strchr($foto, "."),$extensoes_permitidas) )//se o ficheiro não fôr de extensão:jpeg,jpg,gif,png ou bmp. { $erro_imagem = '<div class="alert alert-danger" role="alert"> <span class="glyphicon glyphicon-exclamation-sign"></span> Isso não é uma imagem ! </div>'; } // 2 - verificar o TAMANHO da imagem em kb elseif($foto != "" && $bytes > $tamanho_permitido) { $erro_imagem = '<div class="alert alert-warning" role="alert"> <span class="glyphicon glyphicon-exclamation-sign"></span> Imagem com <strong>'.$bytes.' bytes</strong> ... maior que o tamanho permitido de <strong>'.$tamanho_permitido.' bytes</strong> ! </div>'; } else { //definir tamanho maximo para o nome da foto $foto = substr($foto,-25);//só permite registar os ultimos 25 caracteres ,incluindo a extensão,ex: A.jpg ! //apaga e substitui a imagem anterior... unlink($pasta_imagens.$foto); //move a imagem fisicamente para a pasta de armazenamento move_uploaded_file($foto_tmp,$pasta_imagens.$foto); //update da imagem na base de dados $sql = $ligacao->query("UPDATE utilizadores SET foto_utilizador = '".$foto."' WHERE email_utilizador = '".$_SESSION['email']."' ") or die(mysqli_error() ); $erro_imagem = '<div class="alert alert-success"> <span class="glyphicon glyphicon-ok"></span> Imagem de perfil alterada ! </div>'; //refresh da pagina passados 3 segundos //echo " <meta HTTP-EQUIV='refresh' CONTENT='3;URL=Cpanel.php'> "; //fechar a ligação a base de dados ! mysqli_close($ligacao); }//fim chaveta -> if(!$erro }//fim chaveta -> if(isset($_REQUEST['upload']))

0
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 271
Sexo: Masculino

Re: trocar imagem em php

04-07-2016 18:10

claro... se afoto não existe ainda na base dados ´ele´ nao pode apagar , dai a mensagem de erro:
Warning: unlink(Imagens/Avatares/Minha foto de perfil.jpg): No such file or directory in ...

...agora, como nao deixar acumular na pasta imagens nao usadas??como substitui-las??
0
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 271
Sexo: Masculino

Re: trocar imagem em php

04-07-2016 18:13

como é que voçê fez isso no seu codigo?
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17736
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Re: trocar imagem em php

04-07-2016 21:07

A foto para ser deletada com o unlink precisa já estar em uma pasta, e não somente no banco de dados.

Claro, quando deletar a foto vai precisar fazer um update no banco de dados para colocar o novo nome para a foto.

Outra coisa. Espaços em nomes de fotos podem gerar erro. É interessante colocar um filtro para limpar o nome da foto.

Você pode usar esse filtro para eliminar espaços e caracteres indesejáveis do nome da foto.

<?php function filtro($foto) { $foto = str_replace(" ", "_", preg_replace('#[^a-z.0-9 ]#i', '', $foto)); return $foto; } // chamada do filtro echo filtro("Minha foto de perfil.jpg"); ?>

Você tem que aplicar ao seu código para filtrar o nome original da foto. Você precisa filtrar o nome da foto que vai para o banco de dados e o nome da foto que vai para a imagem na pasta usando a função acima.
0
A melhor hospedagem para o seu site HostGator!

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado