como fazer um historico de eventos com Php e mysql
25/08/2019
0
Estou Criando um sistema de cadastro de clientes em php 7 e mysql, já esta pronto, mais quero colocar um sistema de historico para cada cliente, que eu pudesse fazer cometários.
e também preciso salvar nesse histórico as alterações feita pelo usuário no cadastro.
ex. usuário 1 alterou a localização para local 3
usuário 2 alterou a localização para local 2
como fosse um sistema de logs implantado em cada cliente !
sou novato, so preciso de uma dica como fazer !
Fabio Morais
Post mais votado
25/08/2019
Primeiro você vai ter que criar uma tabela no banco de dados, nela você terá que inserir colunas de "ID, IDUSUARIO,ATIVIDADE,DATA,HORA,TIPO".
Quando um usuário inserir informações no banco de dados, você vai precisar criar um outra query para enviar informações para a tabela do log.
Vou demonstrar um exemplo utilizando um formulário que vai enviar para o servidor um titulo, uma demanda e o id do usuário que solicitou a demanda.
<? $inserirnatabelademandas = "INSERT into demandas (titulo, demanda, idrequerente) VALUES (:titulo, :demanda, :idrequerente)"; $inserirnatabeladelog = "INSERT into log (IDUSUARIO, ATIVIDADE, TIPO) VALUES (:IDUSUARIO, :ATIVIDADE, :TIPO)"; // NO IDREQUERENTE E IDUSUARIO VOCÊ VAI TER QUE COLOCAR A STRING QUE IDENTIFICA O ID DO USUÁRIO LOGADO. //AQUI AS QUERY'S QUE VÃO PARA A TABELA DE DDEMANDAS $titulo = trim(strip_tags($_POST['titulo'])); // VAI CAPTURAR O QUE O USUÁRIO COLOCOU NO CAMPO TÍTULO. $demanda = trim(strip_tags($_POST['demanda'])); // VAI CAPTURAR O QUE O USUÁRIO COLOCOU NO CAMPO DEMANDA. $idrequerente = 1; // O ID DO USUÁRIO QUE ESTÁ SOLICITANDO A DEMANDA (OBS.: ESSE CAMPO VAI PARA A TABELA DAS DEMANDAS) //AQUI AS QUERY'S QUE VÃO PARA A TABELA DE LOG $IDUSUARIO = 1; // O ID DO USUÁIO QUE ALTEROU O EVENTO, VAI SER IGUAL O DO USUÁRIO QUE SOLICITOU A DEMANDA (OBS.: ESSE CAMPO VAI PARA A TABELA DO LOG) $ATIVIDADE = "O usuário ID ".$idrequerente." criou uma demanda com o título: ".$titulo.", demanda: ".$demanda."." $TIPO = "demanda"; // ESSA INFORMAÇÃO É APENAS PARA SETAR QUE VEIO DA PÁGINA DAS DEMANDAS. try{ $resultado1 = $conexao->prepare($inserirnatabelademandas); $resultado2 = $conexao->prepare($inserirnatabeladelog); $resultado1->bindParam(':titulo', $titulo, PDO::PARAM_STR); $resultado1->bindParam(':demanda', $demanda, PDO::PARAM_STR); $resultado1->bindParam(':idrequerente', $idrequerente, PDO::PARAM_STR); $resultado2->bindParam(':IDUSUARIO', $IDUSUARIO, PDO::PARAM_STR); $resultado2->bindParam(':ATIVIDADE', $ATIVIDADE, PDO::PARAM_STR); $resultado2->bindParam(':TIPO', $TIPO, PDO::PARAM_STR); $resultado1->execute(); $resultado2->execute(); $contar = $resultado2->rowCount(); if($contar>0){ echo 'CADASTRO EFETUADO COM SUCESSO'; }else{ echo 'ERRO'; } }catch(PDOException $e){ echo $e; } ?>
Esse código ainda pode ser trabalhado. Você pode fazer a mesma coisa nas páginas de edição, você tendo em mãos que o usuário criou X elemento e outro log dizendo que ele editou esse mesmo elemento, você vai poder verificar qual a mudança que ele fez, vai conseguir filtrar por usuário, por tipo de mudança.. ENFIM ..
Se existir um método mais funcional, talvez mais simples e alguém puder compartilhar... Essa foi a forma que eu encontrei de criar um log.
José
Mais Posts
26/08/2019
Fabio Morais
Primeiro você vai ter que criar uma tabela no banco de dados, nela você terá que inserir colunas de "ID, IDUSUARIO,ATIVIDADE,DATA,HORA,TIPO".
Quando um usuário inserir informações no banco de dados, você vai precisar criar um outra query para enviar informações para a tabela do log.
Vou demonstrar um exemplo utilizando um formulário que vai enviar para o servidor um titulo, uma demanda e o id do usuário que solicitou a demanda.
<? $inserirnatabelademandas = "INSERT into demandas (titulo, demanda, idrequerente) VALUES (:titulo, :demanda, :idrequerente)"; $inserirnatabeladelog = "INSERT into log (IDUSUARIO, ATIVIDADE, TIPO) VALUES (:IDUSUARIO, :ATIVIDADE, :TIPO)"; // NO IDREQUERENTE E IDUSUARIO VOCÊ VAI TER QUE COLOCAR A STRING QUE IDENTIFICA O ID DO USUÁRIO LOGADO. //AQUI AS QUERY'S QUE VÃO PARA A TABELA DE DDEMANDAS $titulo = trim(strip_tags($_POST['titulo'])); // VAI CAPTURAR O QUE O USUÁRIO COLOCOU NO CAMPO TÍTULO. $demanda = trim(strip_tags($_POST['demanda'])); // VAI CAPTURAR O QUE O USUÁRIO COLOCOU NO CAMPO DEMANDA. $idrequerente = 1; // O ID DO USUÁRIO QUE ESTÁ SOLICITANDO A DEMANDA (OBS.: ESSE CAMPO VAI PARA A TABELA DAS DEMANDAS) //AQUI AS QUERY'S QUE VÃO PARA A TABELA DE LOG $IDUSUARIO = 1; // O ID DO USUÁIO QUE ALTEROU O EVENTO, VAI SER IGUAL O DO USUÁRIO QUE SOLICITOU A DEMANDA (OBS.: ESSE CAMPO VAI PARA A TABELA DO LOG) $ATIVIDADE = "O usuário ID ".$idrequerente." criou uma demanda com o título: ".$titulo.", demanda: ".$demanda."." $TIPO = "demanda"; // ESSA INFORMAÇÃO É APENAS PARA SETAR QUE VEIO DA PÁGINA DAS DEMANDAS. try{ $resultado1 = $conexao->prepare($inserirnatabelademandas); $resultado2 = $conexao->prepare($inserirnatabeladelog); $resultado1->bindParam(':titulo', $titulo, PDO::PARAM_STR); $resultado1->bindParam(':demanda', $demanda, PDO::PARAM_STR); $resultado1->bindParam(':idrequerente', $idrequerente, PDO::PARAM_STR); $resultado2->bindParam(':IDUSUARIO', $IDUSUARIO, PDO::PARAM_STR); $resultado2->bindParam(':ATIVIDADE', $ATIVIDADE, PDO::PARAM_STR); $resultado2->bindParam(':TIPO', $TIPO, PDO::PARAM_STR); $resultado1->execute(); $resultado2->execute(); $contar = $resultado2->rowCount(); if($contar>0){ echo 'CADASTRO EFETUADO COM SUCESSO'; }else{ echo 'ERRO'; } }catch(PDOException $e){ echo $e; } ?>
Esse código ainda pode ser trabalhado. Você pode fazer a mesma coisa nas páginas de edição, você tendo em mãos que o usuário criou X elemento e outro log dizendo que ele editou esse mesmo elemento, você vai poder verificar qual a mudança que ele fez, vai conseguir filtrar por usuário, por tipo de mudança.. ENFIM ..
Se existir um método mais funcional, talvez mais simples e alguém puder compartilhar... Essa foi a forma que eu encontrei de criar um log.
Muito bom amigo, vou testar !
esses dados gravados na tabela de log, eu queria exibi-lo no proprio cadastro da id como fosse um bloco de notas como fosse um historico.
eu posso fazer select e add ?
26/08/2019
José
Primeiro você vai ter que criar uma tabela no banco de dados, nela você terá que inserir colunas de "ID, IDUSUARIO,ATIVIDADE,DATA,HORA,TIPO".
Quando um usuário inserir informações no banco de dados, você vai precisar criar um outra query para enviar informações para a tabela do log.
Vou demonstrar um exemplo utilizando um formulário que vai enviar para o servidor um titulo, uma demanda e o id do usuário que solicitou a demanda.
<? $inserirnatabelademandas = "INSERT into demandas (titulo, demanda, idrequerente) VALUES (:titulo, :demanda, :idrequerente)"; $inserirnatabeladelog = "INSERT into log (IDUSUARIO, ATIVIDADE, TIPO) VALUES (:IDUSUARIO, :ATIVIDADE, :TIPO)"; // NO IDREQUERENTE E IDUSUARIO VOCÊ VAI TER QUE COLOCAR A STRING QUE IDENTIFICA O ID DO USUÁRIO LOGADO. //AQUI AS QUERY'S QUE VÃO PARA A TABELA DE DDEMANDAS $titulo = trim(strip_tags($_POST['titulo'])); // VAI CAPTURAR O QUE O USUÁRIO COLOCOU NO CAMPO TÍTULO. $demanda = trim(strip_tags($_POST['demanda'])); // VAI CAPTURAR O QUE O USUÁRIO COLOCOU NO CAMPO DEMANDA. $idrequerente = 1; // O ID DO USUÁRIO QUE ESTÁ SOLICITANDO A DEMANDA (OBS.: ESSE CAMPO VAI PARA A TABELA DAS DEMANDAS) //AQUI AS QUERY'S QUE VÃO PARA A TABELA DE LOG $IDUSUARIO = 1; // O ID DO USUÁIO QUE ALTEROU O EVENTO, VAI SER IGUAL O DO USUÁRIO QUE SOLICITOU A DEMANDA (OBS.: ESSE CAMPO VAI PARA A TABELA DO LOG) $ATIVIDADE = "O usuário ID ".$idrequerente." criou uma demanda com o título: ".$titulo.", demanda: ".$demanda."." $TIPO = "demanda"; // ESSA INFORMAÇÃO É APENAS PARA SETAR QUE VEIO DA PÁGINA DAS DEMANDAS. try{ $resultado1 = $conexao->prepare($inserirnatabelademandas); $resultado2 = $conexao->prepare($inserirnatabeladelog); $resultado1->bindParam(':titulo', $titulo, PDO::PARAM_STR); $resultado1->bindParam(':demanda', $demanda, PDO::PARAM_STR); $resultado1->bindParam(':idrequerente', $idrequerente, PDO::PARAM_STR); $resultado2->bindParam(':IDUSUARIO', $IDUSUARIO, PDO::PARAM_STR); $resultado2->bindParam(':ATIVIDADE', $ATIVIDADE, PDO::PARAM_STR); $resultado2->bindParam(':TIPO', $TIPO, PDO::PARAM_STR); $resultado1->execute(); $resultado2->execute(); $contar = $resultado2->rowCount(); if($contar>0){ echo 'CADASTRO EFETUADO COM SUCESSO'; }else{ echo 'ERRO'; } }catch(PDOException $e){ echo $e; } ?>
Esse código ainda pode ser trabalhado. Você pode fazer a mesma coisa nas páginas de edição, você tendo em mãos que o usuário criou X elemento e outro log dizendo que ele editou esse mesmo elemento, você vai poder verificar qual a mudança que ele fez, vai conseguir filtrar por usuário, por tipo de mudança.. ENFIM ..
Se existir um método mais funcional, talvez mais simples e alguém puder compartilhar... Essa foi a forma que eu encontrei de criar um log.
Muito bom amigo, vou testar !
esses dados gravados na tabela de log, eu queria exibi-lo no proprio cadastro da id como fosse um bloco de notas como fosse um historico.
eu posso fazer select e add ?
A partir do momento que você gerar os dados certos para o banco de dados, você pode imprimir essas informações da forma que for conveniente.
Se quiser gerar um histórico com todas as alterações do usuário da ID 102, você vai usar o select:
SELECT * from log WHERE idusuario= "102"
26/08/2019
Fabio Morais
Primeiro você vai ter que criar uma tabela no banco de dados, nela você terá que inserir colunas de "ID, IDUSUARIO,ATIVIDADE,DATA,HORA,TIPO".
Quando um usuário inserir informações no banco de dados, você vai precisar criar um outra query para enviar informações para a tabela do log.
Vou demonstrar um exemplo utilizando um formulário que vai enviar para o servidor um titulo, uma demanda e o id do usuário que solicitou a demanda.
<? $inserirnatabelademandas = "INSERT into demandas (titulo, demanda, idrequerente) VALUES (:titulo, :demanda, :idrequerente)"; $inserirnatabeladelog = "INSERT into log (IDUSUARIO, ATIVIDADE, TIPO) VALUES (:IDUSUARIO, :ATIVIDADE, :TIPO)"; // NO IDREQUERENTE E IDUSUARIO VOCÊ VAI TER QUE COLOCAR A STRING QUE IDENTIFICA O ID DO USUÁRIO LOGADO. //AQUI AS QUERY'S QUE VÃO PARA A TABELA DE DDEMANDAS $titulo = trim(strip_tags($_POST['titulo'])); // VAI CAPTURAR O QUE O USUÁRIO COLOCOU NO CAMPO TÍTULO. $demanda = trim(strip_tags($_POST['demanda'])); // VAI CAPTURAR O QUE O USUÁRIO COLOCOU NO CAMPO DEMANDA. $idrequerente = 1; // O ID DO USUÁRIO QUE ESTÁ SOLICITANDO A DEMANDA (OBS.: ESSE CAMPO VAI PARA A TABELA DAS DEMANDAS) //AQUI AS QUERY'S QUE VÃO PARA A TABELA DE LOG $IDUSUARIO = 1; // O ID DO USUÁIO QUE ALTEROU O EVENTO, VAI SER IGUAL O DO USUÁRIO QUE SOLICITOU A DEMANDA (OBS.: ESSE CAMPO VAI PARA A TABELA DO LOG) $ATIVIDADE = "O usuário ID ".$idrequerente." criou uma demanda com o título: ".$titulo.", demanda: ".$demanda."." $TIPO = "demanda"; // ESSA INFORMAÇÃO É APENAS PARA SETAR QUE VEIO DA PÁGINA DAS DEMANDAS. try{ $resultado1 = $conexao->prepare($inserirnatabelademandas); $resultado2 = $conexao->prepare($inserirnatabeladelog); $resultado1->bindParam(':titulo', $titulo, PDO::PARAM_STR); $resultado1->bindParam(':demanda', $demanda, PDO::PARAM_STR); $resultado1->bindParam(':idrequerente', $idrequerente, PDO::PARAM_STR); $resultado2->bindParam(':IDUSUARIO', $IDUSUARIO, PDO::PARAM_STR); $resultado2->bindParam(':ATIVIDADE', $ATIVIDADE, PDO::PARAM_STR); $resultado2->bindParam(':TIPO', $TIPO, PDO::PARAM_STR); $resultado1->execute(); $resultado2->execute(); $contar = $resultado2->rowCount(); if($contar>0){ echo 'CADASTRO EFETUADO COM SUCESSO'; }else{ echo 'ERRO'; } }catch(PDOException $e){ echo $e; } ?>
Esse código ainda pode ser trabalhado. Você pode fazer a mesma coisa nas páginas de edição, você tendo em mãos que o usuário criou X elemento e outro log dizendo que ele editou esse mesmo elemento, você vai poder verificar qual a mudança que ele fez, vai conseguir filtrar por usuário, por tipo de mudança.. ENFIM ..
Se existir um método mais funcional, talvez mais simples e alguém puder compartilhar... Essa foi a forma que eu encontrei de criar um log.
Muito bom amigo, vou testar !
esses dados gravados na tabela de log, eu queria exibi-lo no proprio cadastro da id como fosse um bloco de notas como fosse um historico.
eu posso fazer select e add ?
A partir do momento que você gerar os dados certos para o banco de dados, você pode imprimir essas informações da forma que for conveniente.
Se quiser gerar um histórico com todas as alterações do usuário da ID 102, você vai usar o select:
SELECT * from log WHERE idusuario= "102"
Amigo queria agradecer muito pela ajuda, pelas dicas! muito obrigado.
eu sou muito novato nessa area e ainda estou perdido com o codigo que voce me passou.
se voce puder fazer mais um favor, aqui e o código do meu editar cliente, eu tentei colocar seu codigo porem fui falho, na parte da $atividade nao entendi muito. poderia me dizer se estou indo no caminho certo?
if ($acao == 'editar'):
$inserirnatabeladelog = "INSERT into tab_log (IDUSUARIO, USUARIO, ATIVIDADE, TIPO) VALUES (:IDUSUARIO, :USUARIO, :ATIVIDADE, :TIPO)";
$IDUSUARIO = 1; // O ID DO USUÁIO QUE ALTEROU O EVENTO, VAI SER IGUAL O DO USUÁRIO QUE SOLICITOU A DEMANDA (OBS.: ESSE CAMPO VAI PARA A TABELA DO LOG)
$ATIVIDADE = "O usuário ID ".$idrequerente." criou uma demanda com o título: ".$titulo.", demanda: ".$demanda.".";
$sql = 'UPDATE tab_clientes SET nome=:nome, apelido=:apelido, localizacao=:localizacao, assunto=:assunto, cpf=:cpf, senha=:senha, email=:email, cidade=:cidade, celular=:celular, data_nascimento=:data_nascimento, status=:status, observacao=:observacao ';
$sql .= ' WHERE id = :id';
$stm = $conexao->prepare($sql);
$resultado2 = $conexao->prepare($inserirnatabeladelog);
$stm->bindValue(':nome', $nome);
$stm->bindValue(':apelido', $apelido);
$stm->bindValue(':localizacao', $localizacao);
$stm->bindValue(':assunto', $assunto);
$stm->bindValue(':cpf', $cpf);
$stm->bindValue(':senha', $senha);
$stm->bindValue(':email', $email);
$stm->bindValue(':cidade', $cidade);
$stm->bindValue(':celular', $celular);
$stm->bindValue(':data_nascimento', $data_ansi);
$stm->bindValue(':status', $status);
$stm->bindValue(':observacao', $observacao);
$stm->bindValue(':id', $id);
$resultado2->bindParam(':IDUSUARIO', $IDUSUARIO, PDO::PARAM_STR);
$resultado2->bindParam(':ATIVIDADE', $ATIVIDADE, PDO::PARAM_STR);
$resultado2->bindParam(':TIPO', $TIPO, PDO::PARAM_STR);
$retorno = $stm->execute();
$resultado2 = $stm->execute();
if ($retorno):
echo "<div class='alert alert-success' role='alert'>Registro editado com sucesso, aguarde você está sendo redirecionado ...</div> ";
else:
echo "<div class='alert alert-danger' role='alert'>Erro ao editar registro!</div> ";
endif;
echo "<meta http-equiv=refresh content='3;URL=index.php'>";
endif;
perdao minha ignorância
27/08/2019
José
Nesse caso, como você informou que queria em um formato de histórico, eu imaginei de uma forma que se parecesse com uma listagem, ex.:
Em um caso onde a conta do usuário tem o ID 3, suponhamos que ele tenha criado uma demanda com o título "TESTE", com o conteúdo da demanda "CONTEÚDO AQUI".
$idusuario = 3
$titulo = TESTE
$demanda = CONTEÚDO AQUI
// COMO VOCÊ IMPRIMIRIA ESSES DADOS:
ID DO USUÁRIO QUE REALIZOU A MODIFICAÇÃO: 3
TIPO : Demanda
ATIVIDADE:O usuário ID 3 criou uma demanda com o título: TESTE, demanda: CONTEÚDO AQUI.
27/08/2019
Fabio Morais
Nesse caso, como você informou que queria em um formato de histórico, eu imaginei de uma forma que se parecesse com uma listagem, ex.:
Em um caso onde a conta do usuário tem o ID 3, suponhamos que ele tenha criado uma demanda com o título "TESTE", com o conteúdo da demanda "CONTEÚDO AQUI".
$idusuario = 3
$titulo = TESTE
$demanda = CONTEÚDO AQUI
// COMO VOCÊ IMPRIMIRIA ESSES DADOS:
ID DO USUÁRIO QUE REALIZOU A MODIFICAÇÃO: 3
TIPO : Demanda
ATIVIDADE:O usuário ID 3 criou uma demanda com o título: TESTE, demanda: CONTEÚDO AQUI.
Entendi amigo, vou trabalhar nesse codigo a partir disso, por que eu quero algo desse tipo. Porem preciso mostrar esses dados de cada modificação no proprio ID CLIENTE do meu sistema de cadastro.
exemplo
ID CLIENTE 01
nome
cidade
status
cpf
Quando houver mudança pelo O usuário ID em qualquer desses campos mostrado acima o $atividade terar que capturar a mudança, e através do select exibir tal mudança na própria pagina do id cliente 01 como voce me mostra aqui "ATIVIDADE:O usuário ID 3 criou uma demanda com o título: TESTE, demanda: CONTEÚDO AQUI."
agora como vou buscar esses dados na tabela de log(apenas os logs desse cadastro), eu posso criar mais um campo na tabela com o valor id cliente, e add no $atividade que capture o id cliente do meu cadastro para que quando eu for fazer o select do log no meu cadastro eu possa especifica que e apenas para trazer os dados que tenha aquela id cliente ?
meu raciocínio esta indo no caminho certo amigo ?
Clique aqui para fazer login e interagir na Comunidade :)