acc 0 Denunciar post Postado Julho 29, 2012 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
Vinicius Rangel 208 Denunciar post Postado Julho 29, 2012 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
acc 0 Denunciar post Postado Julho 30, 2012 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
Vinicius Rangel 208 Denunciar post Postado Julho 30, 2012 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
acc 0 Denunciar post Postado Julho 30, 2012 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
Vinicius Rangel 208 Denunciar post Postado Julho 30, 2012 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
acc 0 Denunciar post Postado Julho 30, 2012 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
Vinicius Rangel 208 Denunciar post Postado Julho 30, 2012 isso não retorna nada? $img = @mysql_result($sql, 0, "imagem"); Compartilhar este post Link para o post Compartilhar em outros sites
acc 0 Denunciar post Postado Julho 30, 2012 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
acc 0 Denunciar post Postado Julho 30, 2012 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