Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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"**;
<?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"]; $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); $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); move_uploaded_file($arq1_tmp,"fotos/".$arq2);
$imagem = $arq2;}$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.";
}
}
}
?>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.
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>
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
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);>
certo entendi, então vamos por parte.
isso aqui retorna certo?
Retorna, tudo funciona normalmente, exceto a parte da imagem.
isso não retorna nada?
$img = @mysql_result($sql, 0, "imagem");
>
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.
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.
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