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 Kellyfer
      Ola estou tentando publicar imagens multilas usando o comando FOR mas nao estou acertando, alguem poderia me ajudar??
      /*script*/
      <?php 
      date_default_timezone_set('America/Sao_Paulo');
      session_start();?> 
      <!DOCTYPE html>
      <html lang="pt-br">
      <head>
          <meta charset="utf-8">
          <title>Upload de Imagens</title>
      </head>
      <body>
      <!--FORMULÁRIOS-->
      <form action="upload.php" method="post" enctype="multipart/form-data">
          <input type="file" name="arquivos[]" multiple required>
          <input type="submit" value="Publicar">
      </form>
      <p>
      <?php 
      if(isset($_SESSION['erro'])):
          echo $_SESSION['erro'];
          session_unset();
      elseif(isset($_SESSION['sucesso'])):
          echo $_SESSION['sucesso'];
          session_unset();
      endif;
      ?>
      </p>
      <?php 
      /*MOSTRANDO AS IMAGENS NA TELA*/
      $utf8 = header("content-type:text/html;charset= utf-8");
      $conn = new mysqli('localhost','thesim','xthesimx1986','db_galeria');
      $conn->set_charset("utf8");
      $busca_image = "SELECT id, nome_arquivo FROM tb_upload  ORDER BY id DESC";
      $res = mysqli_query($conn, $busca_image);
       if(mysqli_num_rows($res) <= '0'){
           echo "Nenuma imagem encontrada!";
       }else{
           while($res_pos =mysqli_fetch_array($res)){
               $nome_arquivo    =$res_pos[0];
      for($c=0; $c>=10; $c++);
      print "<div class='foto'><img src='uploads/$nome_arquivo$c</div>";
      }
      }
      ?>
      </body>
      </html>
      Imagens anexadas



    • By tatysouzac
      Minha view:
      <div>                            
                                          <form method="post" action="http://localhost/integradorcode/index.php/welcome/validar">
                                          EMAIL: <input type="text" name="email"  /> <br><br>
                                          SENHA:  <input type="password" name="senha"/> <br><br><br><br>
                                          <input class="myButton" type="submit" value="Entrar"/> <br><br>
                                          </form>
                                          <a href="Cadastro.php" class="myButton">Cadastrar</a><br><br>
                                          <a href="#" class="myButton">Esqueceu sua senha?</a>
               </div>
       
       
       
      Controller:
       
          public function validar(){
              //var_dump($_POST);
              $this->load->model("Cadastro_model");
              $result = $this->Cadastro_model->validar($_POST["email"],md5($_POST["senha"]));
              var_dump($result);
          }
       
       
      Model:
       
          function validar($email, $senha){
              return $this->db->query("SELECT * FROM `cadastro_clientes` WHERE email_cliente = '{$email}'  AND senha_cliente = '{$senha}' AND status = 1 LIMIT 1")->result_array();
          }
       
       
      Não da nenhuma mensagem de erro mas coloco senha e login certos do meu bd e o return não retorna nada array 0 
    • By terra
      Olá,
       Tenho esse codigo
       
      e gostaria de chamar  bairro = dados.address.suburb; aqui nesse função 
       
       
      Agradeço qualquer ajuda
    • 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 
×

Important Information

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