-rafael- 1 Denunciar post Postado Maio 27, 2010 ola a todos! tenho algumas duvidas sobre sistema de log, eu ja tenho um, que registra quando o usuario visita a pagina e armazena em uma tabela. mas como eu faria para registrar as alteraçoes no banco de dados? para pegar os dados dos formularios é simples, mas gostaria de pegar somente os campos que forem alterados, pois tenho forms com 50 campos, e se pegar o valor de todos, nao vai funcionar bem. gostaria tbm, nao sei se tem como, pegar o valor anterior, e o novo valor inserido, mas so dos campos alterados. obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
lucasmartins 6 Denunciar post Postado Maio 27, 2010 Cara, mas porque não vai funcionar bem??? Eu nunca fiz isso eu acho, nem me lembro, e não sei qual é a melhor forma para isso, existe algumas que acabo de pensar: 1ª - você usar aquele técnica com AJAX para editar cada campo separado: http://www.ideasfreelance.com/lab/instant_edit/ 2ª - você pode separar via Javascript os campos que foram alterados, e criar uma query apenas com esses campos, no caso você passaria o nome dos campos via $_GET ou $_POST 3ª - e mais fácil, faça do jeito comum, faça o banco alterar td. Abraços!!! Compartilhar este post Link para o post Compartilhar em outros sites
-rafael- 1 Denunciar post Postado Maio 27, 2010 ola obrigado pela ajuda bem vamos lá Cara, mas porque não vai funcionar bem??? por que gostaria de registrar no log somente os campos q foram alterados, o valor antigo e o novo, e nao todos os campos, se nao nao vou saber qual campo foi alterado e qual nao foi. 1ª - você usar aquele técnica com AJAX para editar cada campo separado: http://www.ideasfree...b/instant_edit/ isso é um pouco inviavel pra mim, pois com forms de 50 campos... vai virar um inferno... 2ª - você pode separar via Javascript os campos que foram alterados, e criar uma query apenas com esses campos, no caso você passaria o nome dos campos via $_GET ou $_POST 3ª - e mais fácil, faça do jeito comum, faça o banco alterar td. a query vai ser passada dando up em tudo, mesmo nos q nao foram alterados, o problema é q gostaria de registar somente os q foram alterados... pensei em fazer um select na pagina q recebe os dados, e comparar o resultado, campo por campo, e os que forem diferentes, ele lançar no registro. mas nao sei como fazer isso direito... Compartilhar este post Link para o post Compartilhar em outros sites
Victor Cometti 8 Denunciar post Postado Maio 27, 2010 mas como eu faria para registrar as alteraçoes no banco de dados? leia sobre trigger, funciona da seguinte forma, toda alteração, inserção, exclusão o q for,feita nas tabelas especificadas, você pode configurar para gravar em uma outra tabela como log, inclusive você pode desfazer alterações feitas q n atendam a alguma exigencia, muito interessante. Compartilhar este post Link para o post Compartilhar em outros sites
JuLIOOXX 0 Denunciar post Postado Maio 27, 2010 Isso ai. Rafael: pesquise por triggers do mysql, ela tem um recurso interessante pra isso que você quer: (new,old). da uma lida aqui: http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html Compartilhar este post Link para o post Compartilhar em outros sites
-rafael- 1 Denunciar post Postado Maio 29, 2010 Pessoal obrigado pela ajuda, parece q é isso mesmo q eu quero. mas so ficou uma duvida, que estou pesquisando e nao to achando de jeito nenhum. como faria para por exemplo: como falei tenho forms de 50 campos. no caso o usuario alterou 10. como faria para colocar apenas os 10 q foram alterados? obrigado Compartilhar este post Link para o post Compartilhar em outros sites
..GBEST.. 0 Denunciar post Postado Maio 29, 2010 Jeito mais fácil : Cria uma função ex: gravalog() function gravalog($pagina,$acao,$atualizacao) insert into logsite(pagina,acao,atualizacao,data,etc..) Values ($pagina,$acao,$atualizacao etc..) ao final da execução de cada pagina você poem gravalog() deu pra entender? Compartilhar este post Link para o post Compartilhar em outros sites
-rafael- 1 Denunciar post Postado Maio 31, 2010 ola obrigado pela resposta mas acho q ai foge um pouco das triggers... gostaria de um exemplo como falei acima mas sobre as triggers... Compartilhar este post Link para o post Compartilhar em outros sites
Victor Cometti 8 Denunciar post Postado Maio 31, 2010 http://imasters.com.br/artigo/8123 aki tem um topico sobre o assunto. pena q eu num tenho nenhuma trigger mysql aki pra postar de exemplo!! todas as triggers q eu tenho aki são para sql server!! Compartilhar este post Link para o post Compartilhar em outros sites
-rafael- 1 Denunciar post Postado Junho 2, 2010 nao estou conseguindo chegar aonde quero. seria tipo criar um array com as alterações. tenho os campos a, b, c, d. ai o cara alterou os campos b e c entao ficaria assim insert into log (time, alteração) values, (date(), *** OS CAMPOS QUE FORAM ALTERADOS DE ACORDO COM O ARRAY) nao sei se podem me intender... é possivel fazer isso com as triggers??? pegar so os campos q foram alterados??? obrigado Compartilhar este post Link para o post Compartilhar em outros sites
Victor Cometti 8 Denunciar post Postado Junho 2, 2010 tpw na trigger você pode coloca ifs e concatena os campos separando com ';' ex: if update(a) select @var = @var + 'a;' if update(B) select @var = @var + 'b;' ... insert into log (time, alteração) values (date(), @var) faço assim em sql server, n sei se é a msm sintaxe, mas é + ou - assim Compartilhar este post Link para o post Compartilhar em outros sites
-rafael- 1 Denunciar post Postado Junho 3, 2010 legal obrigado pela ajuda agora so preciso descobrir como concatenar valores no mysql, pois o " + " ele ta somando os campos Compartilhar este post Link para o post Compartilhar em outros sites
João Batista Neto 448 Denunciar post Postado Junho 3, 2010 mysql> SELECT CONCAT( 'J' , 'o' , 'ã' , 'o' , ' ' , 'N' , 'e' , 't' , 'o' ) AS `nome`; +------------+ | nome | +------------+ | João Neto | +------------+ 1 row in set (0.00 sec) Compartilhar este post Link para o post Compartilhar em outros sites
-rafael- 1 Denunciar post Postado Junho 3, 2010 ok obrigado pela ajuda só ta faltando um detalhe (acho q o ultimo) como faço para tratar valores null?? estou tentando assim: if old.campo!= new.campo then if isnull(new.campo) then set alteracoes = CONCAT_WS(', ', alteracoes, CONCAT_WS(' --> ', 'Campo', OLD.`campo`,'NADA')); elseif isnull(old.campo) then set alteracoes = CONCAT_WS(', ', alteracoes, CONCAT_WS(' --> ', 'Campo', 'NADA',NEW.`campo`)); else set alteracoes = CONCAT_WS(', ', alteracoes, CONCAT_WS(' --> ', 'Campo', OLD.`campo`,NEW.`campo`)); end if; end if; mas nao esta funcionando. esta gravando NULL na tabela porem se nenhum do dois (nem old.campo nem new.campo ) forem null, ele grava certinho. como resolveria essa parte? obrigado obs: peguei o CONCAT_WS, pois ai posso colocar um separador Compartilhar este post Link para o post Compartilhar em outros sites
-rafael- 1 Denunciar post Postado Junho 3, 2010 opa ja descobri o erro!!!! esqueci de especificar o null na primeira if ficou assim if old.campo!= new.campo or isnull(new.campo) or isnull(old.campo) then if isnull(new.campo) then set alteracoes = CONCAT_WS(', ', alteracoes, CONCAT_WS(' --> ', 'Campo', OLD.`campo`,'NADA')); elseif isnull(old.campo) then set alteracoes = CONCAT_WS(', ', alteracoes, CONCAT_WS(' --> ', 'Campo', 'NADA',NEW.`campo`)); else set alteracoes = CONCAT_WS(', ', alteracoes, CONCAT_WS(' --> ', 'Campo', OLD.`campo`,NEW.`campo`)); end if; end if; Muito obrigado a todos!!!! Problema resolvido!!! Compartilhar este post Link para o post Compartilhar em outros sites