Ir para conteúdo

POWERED BY:

Arquivado

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

-rafael-

[Resolvido] sistema de log

Recommended Posts

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

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

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

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

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

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

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

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

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

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

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

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

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

×

Informação importante

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