Jump to content
AllysonSouza

[Resolvido] Ajuda (Duvida) Alterar Foto Perfil com Php/myql

Recommended Posts

Bom, na parte de alterar a imagem de perfil do usuário, quando clica em alterar ela volta para o perfil porem continua a imagem antiga, mas na pasta aonde as imagens ficam salva, ela ja foi alterada, ai depois de um certo tempo, a imagem é alterada também no perfil, eu não uso o UNLINK será que pode ser isso? se sim, alguem poderia me ajudar a implementar em meu codigo:

 

<?php

    
    $foto = "perfil";
    $type = ".jpg";

//Verificar se o post n�o est� vazio
if(!empty($_FILES)){
    //Executa ação para alterar
    $imagem = $_FILES['fimagem'];
    
    //REsgatar o caminho da imagem
    $caminhoImagem = "imagens/".$foto.$id.$type;
    
    //Upload da imagem para o caminho
    move_uploaded_file($imagem['tmp_name'], $caminhoImagem);
    
    
    //Script de UPDATE
    $sql = "UPDATE usuarios SET imagem='$caminhoImagem' WHERE id=$id";
    $res = mysqli_query($con, $sql);
    if($res==1){
        echo "<script>";
        echo "alert('Foto alterada com sucesso');";
        echo "window.location = 'index.php?pasta=perfil&acao=listar';";
        echo "</script>";
    }else{
        echo "Erro ao alterar";
    }
    
}

    $sql = "SELECT imagem FROM usuarios WHERE  id=$id";
    $res = mysqli_query($con, $sql);
    $dados = mysqli_fetch_array($res);
    
?>

 

Share this post


Link to post
Share on other sites

Creio que é pelo cache do navegador. Vi que você salva a imagem do usuário de acordo com o id do mesmo... por isso o navegador deva estar "demorando pra atualizar a imagem". Por ele achar que é a mesma.

Não sei, talvez usando um código randômico para o nome da imagem e armazenando-o junto aos dados do usuário.

 

Talvez um...

<?php
// ...
$Imagem = md5(mt_rand()) . '.jpg';

 

  • +1 1

Share this post


Link to post
Share on other sites
45 minutos atrás, Tadeu Barbosa disse:

Creio que é pelo cache do navegador. Vi que você salva a imagem do usuário de acordo com o id do mesmo... por isso o navegador deva estar "demorando pra atualizar a imagem". Por ele achar que é a mesma.

Não sei, talvez usando um código randômico para o nome da imagem e armazenando-o junto aos dados do usuário.

 

Talvez um...


<?php
// ...
$Imagem = md5(mt_rand()) . '.jpg';

 

Certo, assim funciona... porem a imagem antiga fica na pasta imagens.... como que eu implemento o UNLINK? 

Share this post


Link to post
Share on other sites

Talvez fazendo o seguinte:

<?php
$Image = 'images/usuarios/' . md5(mt_rand()) . '.jpg';

// cadastrando
$SQL = $PDO::prepare("INSERT INTO `usuarios` (`name`,`image`) VALUES (:name, :image)");
$SQL->bindParam(':name', $Name);
$SQL->bindParam(':image', $Image);
$SQL->execute();

 

Se já tem muitos usuários cadastrados poderia fazer algo como:

<?php
// ...
// $Users = array com todos os usuários;

foreach($Users as $User) {
  $ID   = $User->id;
  $Code = md5(mt_rand());
  $OldImage = "image/usuarios/{$ID}.png";
  $NewImage = "image/usuarios/{$Code}.png";
  rename($OldImage, $NewImage);
  ##
  $Update = $PDO::prepare("UPDATE users SET ´image´=:image WHERE `id`=:id");
  $Update->bindParam(':image', $NewImage);
  $Update->bindParam(':id', $ID);
  $Update->execute();
}

 

Na hora de remover o usuário daria unlink na imagem que está nos dados do usuário.

 

Penso que seria uma opção.

  • +1 1

Share this post


Link to post
Share on other sites

 

Em 26/07/2017 at 20:29, Tadeu Barbosa disse:

Talvez fazendo o seguinte:


<?php
$Image = 'images/usuarios/' . md5(mt_rand()) . '.jpg';

// cadastrando
$SQL = $PDO::prepare("INSERT INTO `usuarios` (`name`,`image`) VALUES (:name, :image)");
$SQL->bindParam(':name', $Name);
$SQL->bindParam(':image', $Image);
$SQL->execute();

 

Se já tem muitos usuários cadastrados poderia fazer algo como:


<?php
// ...
// $Users = array com todos os usuários;

foreach($Users as $User) {
  $ID   = $User->id;
  $Code = md5(mt_rand());
  $OldImage = "image/usuarios/{$ID}.png";
  $NewImage = "image/usuarios/{$Code}.png";
  rename($OldImage, $NewImage);
  ##
  $Update = $PDO::prepare("UPDATE users SET ´image´=:image WHERE `id`=:id");
  $Update->bindParam(':image', $NewImage);
  $Update->bindParam(':id', $ID);
  $Update->execute();
}

 

Na hora de remover o usuário daria unlink na imagem que está nos dados do usuário.

 

Penso que seria uma opção.

Não era bem isso que eu procurava...

como voce disse é pelo cache do navegador porque depois de um tempo a imagem é atualizada, mas o que falta é o UNLINK eu ja tentei por ele (codigo abaixo), só que ele só faz o UNLINK e depois não posta a nova imagem... 

 

<?php

    
    

//Verificar se o post n�o est� vazio
if(!empty($_FILES)){
    //Executa ação para alterar
    $imagem = $_FILES['fimagem'];
    
    //REsgatar o caminho da imagem
    $caminhoImagem = "imagens/".'Perfil'.$id .'.jpg';;
    
    //Upload da imagem para o caminho
    move_uploaded_file($imagem['tmp_name'], $caminhoImagem);
    
    if(unlink($caminhoImagem)){
    //Script de UPDATE
    $sql = "UPDATE usuarios SET imagem='$caminhoImagem' WHERE id=$id";
    $res = mysqli_query($con, $sql);
    if($res==1){
        echo "<script>";
        echo "alert('Foto alterada com sucesso');";
        echo "window.location = 'index.php?pasta=perfil&acao=listar';";
        echo "</script>";
    }else{
        echo "Erro ao alterar";
    }
    }
}

 

Share this post


Link to post
Share on other sites

Chegou a ler a função?

http://php.net/manual/pt_BR/function.move-uploaded-file.php

 

Tem um aviso grandão:

Se o arquivo de destino já existir, ele será sobrescrito.

Ou seja, esquece unlink...

 

 

E foque onde o problema está ocorrendo que seria no cache.

 

Um 'hack' seria algo assim:

<img src="image.png?dummy=8484744" />

 

(Onde o '8484744' poderia ser um hash da data (*hh:ii) de upload por exemplo)

https://stackoverflow.com/questions/728616/disable-cache-for-some-images

 

 

h = Hora

i = segundo

 

Você poderia armazenar esse hash na tabela de foto/usuario, evitando requisição atoa e aproveitando o cache quando deve ser usado  :tounge_wink:

 (internet móvel no Brasil uma zoada... ajudaNoisDev!)

 

Tomara que você tenha uma função/metodo getImageSrc()  / $usuario->getImageSrc() ai só alterar, mamãozinho hehe, ex:

 

class Usuario 
{
	private $dtalteracao; //Campo DATETIME 
	
	/**
	* Return hash-md5 with %H:%i
	* @return string
	*/
	public function getDtAlteracao(){
		//select date_format(now(), '%H:%i') as dtalteracao
		//15:17
		return strtoupper(md5('15:17'));
	}

	public function getImageSrc()
	{
		return USER_IMAGES . '?timestamp=' . $this->getDtAlteracao();
	}
	
}

Acho q deu pra pegar a ideia neh? haha

 

 

Caso queira se aprofundar:

https://developer.mozilla.org/pt-PT/docs/utilizando_meta_tags

 


Abraços.

 

 

 

  • +1 2

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

  • Similar Content

    • By ricardonews
      olá pessoal, eu não estou conseguindo fazer o redirecionamento apos o cadastro para index, eu estou perdido entre os ifs e else, eu acho que só pode ser isso,  quando eu coloco meu código trava, e não faz nada. vou postar o print.

    • By Fábio Capello
      Oi pessoal tudo bem?sou novo no fórum estou desenvolvendo um sistema web preciso de ajuda meu dificuldade e para por segurança na páginas php.quando um usuário logado quer mudar de navegador ele cópia link e colou em outro navegador ele terá acesso mas quero que ele direcione para página de login 
    • By Dinho Nunes LC
      <div align="center" id="subtitulo"> Canais Abertos </div> <div class="ui cards"> <div class="card"> <div class="content"> <a href="globo.html" style="display: block; color: black"> <div align="center"> <div> <img class="ui tiny image" id="imagem_card_casa" src="assets/images/Rede_Globo_2014.png"> <div align="center" id = "nome_time_fora"> <b>Globo RJ</b> </div> </div> Onde "globo.html" seria substituído pelo link que esta em uma tabela do banco de dados.
       
      Já fiz a conexão. E tenho a base de dados pronta.
       
      Motivo pelo qual estou buscando ajuda:
       
      Faço manualmente a mudança de cada link (são mais de 300) diariamente para evitar copias de terceiros. Sendo assim poderia usar um CRUD para facilitar a troca dos links direto no banco de dados.
    • By Ailton José do Amaral Filh
      Boa Tarde .... Tenho um diretório no servidor LINUX ..... /opt/www/nfe4/public/nfe7/producao/pdf ]
       
      dentro desse diretorio tenos os arquivos Danfe de nota fiscal, ...... -danfe.pdf, fiz um programa em php o qual o usuario vai me falar o numero da nota, o cnpj e tenho que localizar esse arquivo pdf e mandar por email ou abrir pra ele ver.  no nome do arquivo .pdf eu tenho o numero do cnpj e tenho o numero da nota, precisaria montar um mecanismo pra buscar esse arquivo no php .... Alguém tem uma idéia ?? Não sei se via expressão Regular .....Se alguem tiver uma ideia preciso de sugestões de como montar esse codigo !! 
       
      Obrigado  
    • By Wallis
      Olá, sou novo por aqui e estou aprendendo PHP agora.
      O meu problema é relacionado a um exercício que deve ser simples de resolver para vocês. 
      Vou colocar ele aqui, caso alguém posso me ajudar. 

      Utilizando um while, fazer um programa que lance uma moeda (escolhendo  um número aleatório que pode ser 0 ou 1) até tirar 5 vezes cara (o número 1).  Ao terminar, imprimir o número de lançamentos da moeda até tirar 5 vezes  cara.  
       
      Desde já agradeço. vlw
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.