Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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);
?>>
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?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.>
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";
}
}
}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](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
(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](https://developer.mozilla.org/pt-PT/docs/utilizando_meta_tags)
Abraços.Vlw, consegui
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';