Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

acc

[Resolvido] Atualização de imagem

Recommended Posts

Boa noite, estou com um problema em tentar atualizar a imagem do cliente em uma página de atualização de cadastro.

No formulário de criação de novos clientes, a imagem tanto é colocada no servidor quanto no banco de dados, porém se na atualização estou tendo problemas: ele não está movendo a imagem selecionada pro servidor nem atualizando o nome da imagem no banco de dados

 

Observações:

- Este código está na mesma página que possui o formulário de atualização;

- Antes que perguntem, na tag form está declarado enctype="multipart/form-data";

- Caso eu deixe o input da imagem sem nenhuma imagem selecionada, nenhuma alteração é feita (a não ser que eu tenha editado algum outro input), a imagem anterior continua lá.

 

<?php
// Verificador de sessão
require "verifica.php";
// Conexão com o banco de dados
require "../comum.php";
//Define codificação para UTF-8
ini_set('default_charset','utf8');

$id = $_GET['id'];
$sql = mysql_query("SELECT * FROM clientes WHERE id = '$id'");
$nomeeee = @mysql_result($sql, 0, "nome");
$img = @mysql_result($sql, 0, "imagem");
$endereco = @mysql_result($sql, 0, "endereco");
$bairro = @mysql_result($sql, 0, "bairro");
$cidade = @mysql_result($sql, 0, "cidade");
$estado = @mysql_result($sql, 0, "estado");
$telefone = @mysql_result($sql, 0, "telefone");
$celular = @mysql_result($sql, 0, "celular");
$email = @mysql_result($sql, 0, "email");
$facebook = @mysql_result($sql, 0, "facebook");
$nascimento = @mysql_result($sql, 0, "nascimento");
$nascimento = implode("/",array_reverse(explode("-",$nascimento)));
$preferencias = @mysql_result($sql, 0, "preferencias");
$id = @mysql_result($sql, 0, "id");

if(isset($_POST['done'])){
$id = $_POST['id'];
$nomee = $_POST['nome'];

if (!empty($_POST['imagem'])){
extract($_POST);
 $arq1=$_FILES["imagem"]["name"];
//Seleciona a ultima entrada do banco na tabela galeria
 $s_trab = "SELECT Max(id) ult_id FROM clientes";
 $t_trab = mysql_query($s_trab) or die(mysql_error());  
 $trab   = mysql_fetch_array($t_trab);
//Dou um nome para a foto que será o ultimo id + 1
 $nome = $trab[ult_id] + 1;
//crio um nome único para a imagem
 $arq1 = $nome.$_FILES['imagem']['name'];
 $arq1 = utf8_encode($arq1);
 function removerCaracter($arq1){
       $acentos = array(
		'a' => '/À|Á|Â|Ã|Ä|Å/',
		'a' => '/à|á|â|ã|ä|å/',
		'c' => '/Ç/',
		'c' => '/ç/',
		'e' => '/È|É|Ê|Ë/',
		'e' => '/è|é|ê|ë/',
		'i' => '/Ì|Í|Î|Ï/',
		'i' => '/ì|í|î|ï/',
		'n' => '/Ñ/',
		'n' => '/ñ/',
		'o' => '/Ò|Ó|Ô|Õ|Ö/',
		'o' => '/ò|ó|ô|õ|ö/',
		'u' => '/Ù|Ú|Û|Ü/',
		'u' => '/ù|ú|û|ü/',
		'y' => '/Ý/',
		'y' => '/ý|ÿ/',
		'a.' => '/ª/',
		'o.' => '/º/',
		'_' => '/ /'
);
$arq1 = preg_replace($acentos, array_keys($acentos), $arq1);
       return $arq1; }
$arq2 = removerCaracter($arq1);
//cria um nome temporário para mover o arquivo
 $arq1_tmp = $_FILES['imagem']['tmp_name'];
//Comando para mover o arquivo para o doretório especificado, aplicando o nome definido anteriormente
 move_uploaded_file($arq1_tmp,"fotos/".$arq2);
 $imagem = $arq2;}
else {$imagem = $img;}

$endereco = $_POST['endereco'];
$bairro = $_POST['bairro'];
$cidade = $_POST['cidade'];
$estado = $_POST['estado'];
$telefone = $_POST['telefone'];
$celular = $_POST['celular'];
$email = $_POST['email'];
$facebook = $_POST['facebook'];
$nascimento = $_POST['nascimento'];
$nascimento = implode("-",array_reverse(explode("/",$nascimento)));
$preferencias = $_POST['preferencias'];
   if(empty($nomee) || empty($endereco) || empty($bairro) || empty($cidade) || empty($estado) || empty($telefone) || empty($nascimento)){
       $erro = "Você deve preencher todos os campos.";
   }else{
      $sql = mysql_query("UPDATE clientes SET nome='$nomee', endereco='$endereco', bairro='$bairro', cidade='$cidade', estado='$estado', telefone='$telefone', celular='$celular', email='$email', facebook='$facebook', nascimento='$nascimento', preferencias='$preferencias', imagem='$imagem' WHERE id='$id'")or die(mysql_error());
   $linha = mysql_affected_rows();
           if($linha == 1){
               $erro = "Dados alterados com sucesso!";
             } else{
                 $erro = "Não foi possivel alterar os dados.";
             }
   }
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

o seu código da instruções caso o imagem não esteja vazio porém nessa instrução não informa nenhum UPDATE, a lógica para fazer isso é a seguinte, buscar no banco de dados o caminho da imagem depois apagar a mesma e recuperar a imagem do FORM jogar no servidor e atualizar ele na DB, eu não vi essa linha(objetivo) no seu code

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema está no IF ELSE, só não sei como resolver. Dependendo de como eu coloque ele manda a imagem se eu colocar, porém se eu alterar qualquer outro input e não selecionar nenhuma imagem ele troca o valor imagem do banco de dados para um valor inexistente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

o problema esta é que não esta seguindo o cronograma correto.

 

olha na sua condição if(!empty($_POST['imagem']))

 

se não me engano isso não existe você tem que verificar no $_FILE e mesmo se entrar nessa condição ele não vai fazer nenhum update pq não tem nenhuma sql

Compartilhar este post


Link para o post
Compartilhar em outros sites

o problema esta é que não esta seguindo o cronograma correto.

 

olha na sua condição if(!empty($_POST['imagem']))

 

se não me engano isso não existe você tem que verificar no $_FILE e mesmo se entrar nessa condição ele não vai fazer nenhum update pq não tem nenhuma sql

Você provavelmente não entendeu meu raciocínio.

Na minha condição eu disse que se o POST do campo imagem não estivesse vazio, ele daria um nome e mandaria a imagem para o servidor e no final eu pego o nome que ele colocou e igualo a variável $imagem. Caso estivesse vazio a variável $imagem seria igual a $img, que é o nome anterior ao do envio do formulário, ou seja, nenhuma alteração.

Depois de feito tudo isso, pega-se o resto dos POSTS e manda pra SQL, não sei se você viu mas a variável $imagem que é a que eu defini no IF e no ELSE está no final do SQL.

 

Eu tambem tentei com $_FILE e tentei colocar uma SQL exclusiva para alterar apenas a imagem, também não deu certo

Compartilhar este post


Link para o post
Compartilhar em outros sites

certo entendi, então vamos por parte.

 

isso aqui retorna certo?

 

$id = $_GET['id'];
$sql = mysql_query("SELECT * FROM clientes WHERE id = '$id'");
$nomeeee = @mysql_result($sql, 0, "nome");
$img = @mysql_result($sql, 0, "imagem");
$endereco = @mysql_result($sql, 0, "endereco");
$bairro = @mysql_result($sql, 0, "bairro");
$cidade = @mysql_result($sql, 0, "cidade");
$estado = @mysql_result($sql, 0, "estado");
$telefone = @mysql_result($sql, 0, "telefone");
$celular = @mysql_result($sql, 0, "celular");
$email = @mysql_result($sql, 0, "email");
$facebook = @mysql_result($sql, 0, "facebook");
$nascimento = @mysql_result($sql, 0, "nascimento");
$nascimento = implode("/",array_reverse(explode("-",$nascimento)));
$preferencias = @mysql_result($sql, 0);

Compartilhar este post


Link para o post
Compartilhar em outros sites

certo entendi, então vamos por parte.

 

isso aqui retorna certo?

Retorna, tudo funciona normalmente, exceto a parte da imagem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso não retorna nada?

 

$img = @mysql_result($sql, 0, "imagem");

Retorna. Dependendo da forma como eu colocar o IF e ELSE, o sistema age de duas maneiras:

Primeira maneira:

Quando eu altero qualquer INPUT mas não altero a imagem continua a imagem atual, porém se eu alterar a imagem aparece o erro: Não foi possivel alterar os dados.

Segunda maneira:

Quando eu altero qualquer INPUT mas não altero a imagem ele troca o valor da coluna imagem na tabela mysql por um valor inexistente (o valor que ele põe é o próximo id da tabela, que é usado como se estivesse colocando uma nova imagem), porém se eu alterar a imagem ele envia normalmente e a atual fica a que eu enviei.

 

Ou seja, ele só funciona uma das duas partes, o correto seria para quando eu não enviasse imagem continuasse a atual e quando eu enviasse ele trocasse.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como eu havia dito, o problema era no IF e ELSE, eu consegui fazer funcionar da seguinte maneira:

 

if(isset($_POST['done'])){
$id = $_POST['id'];
$nomee = $_POST['nome'];
$imagem = $_FILES["imagem"]["name"];

if (isset($_FILES["imagem"]) and !empty($imagem)){
extract($_POST);
 $arq1=$_FILES["imagem"]["name"];
//Seleciona a ultima entrada do banco na tabela galeria
 $s_trab = "SELECT Max(id) ult_id FROM clientes";
 $t_trab = mysql_query($s_trab) or die(mysql_error());  
 $trab   = mysql_fetch_array($t_trab);
//Dou um nome para a foto que será o ultimo id + 1
 $nome = $trab[ult_id] + 1;
//crio um nome único para a imagem
 $arq1 = $nome.$_FILES['imagem']['name'];
 $arq1 = utf8_encode($arq1);
 function removerCaracter($arq1){
       $acentos = array(
		'a' => '/À|Á|Â|Ã|Ä|Å/',
		'a' => '/à|á|â|ã|ä|å/',
		'c' => '/Ç/',
		'c' => '/ç/',
		'e' => '/È|É|Ê|Ë/',
		'e' => '/è|é|ê|ë/',
		'i' => '/Ì|Í|Î|Ï/',
		'i' => '/ì|í|î|ï/',
		'n' => '/Ñ/',
		'n' => '/ñ/',
		'o' => '/Ò|Ó|Ô|Õ|Ö/',
		'o' => '/ò|ó|ô|õ|ö/',
		'u' => '/Ù|Ú|Û|Ü/',
		'u' => '/ù|ú|û|ü/',
		'y' => '/Ý/',
		'y' => '/ý|ÿ/',
		'a.' => '/ª/',
		'o.' => '/º/',
		'_' => '/ /'
);
$arq1 = preg_replace($acentos, array_keys($acentos), $arq1);
       return $arq1; }
$arq2 = removerCaracter($arq1);
//cria um nome temporário para mover o arquivo
 $arq1_tmp = $_FILES['imagem']['tmp_name'];
//Comando para mover o arquivo para o doretório especificado, aplicando o nome definido anteriormente
 move_uploaded_file($arq1_tmp,"fotos/".$arq2);
 $imagem = $arq2; }
else {$imagem = $img;}

 

Obrigado por tentar ajudar Vinicius. Moderador já pode colocar como resolvido aqui, obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.