Ir ao conteúdo
  • Cadastre-se

Criação de Logs , com php e mysqli.


Posts recomendados

@dif como pediu fiz a tabela que gerou os logs entendi a base mais nao consegui tudo sozinho precisei olhar uns códigos.

 

 

então assim Criei a função que insere o log no php. mais nao entendi ainda uma parte do código ve se me ajuda aqui.

<?phpfunction logs($mensagem) {$conexao = mysqli_connect('localhost','root','','cadastro');$ip = $_SERVER['REMOTE_ADDR']; $hora = date('Y-m-d H:i:s');$mensagem = mysqli_real_escape_string($conexao,$mensagem);$sql = mysqli_query($conexao,"INSERT INTO logs VALUES(NULL, '".$hora."', '".$ip."', '".$mensagem."')");if ($sql) {return true;} else {return false;}} 

na linha 7 esse insert into esse Null, nao sei porque mais se eu tirar nao insere, o valores eu aprendi passando as varias com aspas e e virgulas, 

 

por exemplo

INSERT INTO logs(hora,ip,mensagem)VALUES('$hora','$ip','$mensagem'); 

mais se eu fazer assim não insere.

Link para o comentário
Compartilhar em outros sites

  • Moderador

@FabianoS

 

Pelo que eu vejo tem erros ali.

 

O NULL, não é para ser usado... porque quando criaste a tabela, definisse o ID para ser auto increment.(meio que obrigatório isso)

 

A função não precisava ser criada para fazer algo como isso.. mas se realmente quer uma função..  pode ser feita assim:

function logs($mensagem) {  $conexao = mysqli_connect('localhost','root','','cadastro');  $ip = $_SERVER['REMOTE_ADDR'];   $hora = date('Y-m-d H:i:s');  $mensagem = mysqli_real_escape_string($conexao,$mensagem);  $insere = mysqli_query($conexao,"INSERT into logs(hora,ip,mensagem) VALUES('$hora','$ip','$mensagem')"); if($insere):    return $insere; endif;} //usando a funçãologs("Entrou no sistema");

a função pode ser feita dessa maneira também:

  $ip = $_SERVER['REMOTE_ADDR'];   $hora = date('Y-m-d H:i:s');  $mensagem = mysqli_real_escape_string($conexao,$mensagem);function logs($hora, $ip, $mensagem) {  $conexao = mysqli_connect('localhost','root','','cadastro');    $insere = mysqli_query($conexao,"INSERT into logs(hora,ip,mensagem) VALUES('$hora','$ip','$mensagem')"); if($insere):    return $insere; endif;} //usando a funçãologs($hora, $ip, $mensagem);

As duas formas funcionam.  o que precisas entender é que ele precisa retornar algo como a variável que insere no banco de dados é $insere... então tem que ser "return $insere"

 

Já no seu banco.. eu não sei como foi criado.. mas a estrutura tens que respeitar alguns conceitos como:

 

ID deve ser do tipo INT tamanho 11 auto_increment e primary key

Hora deve ser do tipo DATETIME porque estas enviando data e hora juntos

IP deve ser do tipo VARCHAR. porque além de números contem pontos... tamanho.. pelo menos uns 15 

Mensagem deve ser do tipo VARCHAR,, coloque um tamanho não estão pequeno.. por exemplo 50

Link para o comentário
Compartilhar em outros sites

@FabianoS

 

Pelo que eu vejo tem erros ali.

 

O NULL, não é para ser usado... porque quando criaste a tabela, definisse o ID para ser auto increment.(meio que obrigatório isso)

 

A função não precisava ser criada para fazer algo como isso.. mas se realmente quer uma função..  pode ser feita assim:

function logs($mensagem) {  $conexao = mysqli_connect('localhost','root','','cadastro');  $ip = $_SERVER['REMOTE_ADDR'];   $hora = date('Y-m-d H:i:s');  $mensagem = mysqli_real_escape_string($conexao,$mensagem);  $insere = mysqli_query($conexao,"INSERT into logs(hora,ip,mensagem) VALUES('$hora','$ip','$mensagem')"); if($insere):    return $insere; endif;} //usando a funçãologs("Entrou no sistema");

a função pode ser feita dessa maneira também:

  $ip = $_SERVER['REMOTE_ADDR'];   $hora = date('Y-m-d H:i:s');  $mensagem = mysqli_real_escape_string($conexao,$mensagem);function logs($hora, $ip, $mensagem) {  $conexao = mysqli_connect('localhost','root','','cadastro');    $insere = mysqli_query($conexao,"INSERT into logs(hora,ip,mensagem) VALUES('$hora','$ip','$mensagem')"); if($insere):    return $insere; endif;} //usando a funçãologs($hora, $ip, $mensagem);

As duas formas funcionam.  o que precisas entender é que ele precisa retornar algo como a variável que insere no banco de dados é $insere... então tem que ser "return $insere"

 

Já no seu banco.. eu não sei como foi criado.. mas a estrutura tens que respeitar alguns conceitos como:

 

ID deve ser do tipo INT tamanho 11 auto_increment e primary key

Hora deve ser do tipo DATETIME porque estas enviando data e hora juntos

IP deve ser do tipo VARCHAR. porque além de números contem pontos... tamanho.. pelo menos uns 15 

Mensagem deve ser do tipo VARCHAR,, coloque um tamanho não estão pequeno.. por exemplo 50

 

 

Sim minha tabela esta deste jeito, só aquele insert não estava entendendo, mais a tabela estava funcionando , o problema era que queria entender do código sem o null dar errado.

o if

if ($sql) {return true;} else {return false;

Ia colocar caso a instrução não fosse inserida.

 

Se eu nao tivesse feito a função então toda vez que quisesse usar esse log na pagina precisaria digitar o código ?

Link para o comentário
Compartilhar em outros sites

  • Moderador

@FabianoS

 

Sim.

toda vez que fazer uma ação você faz o insert.

 

Quando usar o update set?  na pagina restrita logo depois que loga, atualizar o campo horas da tabela. para sempre mostrar ao usuário o ultimo horario logado no sistema.

 

O código dava errado.. por que o null é o primeiro elemento, referente ao ID.  se o campo é auto_increment não precisa,. e não deve colocar null ou algum valor.

Além do mais, o null só é permitido caso seu campo permita que tenha valores nulos.. afinal nulo não é vazio.(não na programação).

 

Provavelmente o campo ID da sua tabela é NOT NULL.  ou seja, ele não pode ser nulo... então retirando o NULL do código.. ele funciona.

 

Testar o retorno da função com:

if ($sql) {return true;} else {return false;

é um pouco errado nesse tipo de código.

 

por que a função PRECISA que retorne o próprio SQL.. e caso dê erro só apresente uma mensagem

então o correto seria:

if ($sql) {return $sql;} else {   return "Não foi possível inserir na tabela."}// faltou colocaro fechamento do IF

Uma boa prática de programação:

 

Sempre que for fazer um IF... evite ao máximo utilizar o modo convencional.. por que certamente vai te atrapalhar na hora de entender o encadeamento.

Então use sempre a sintaxe alternativa que é mais elegante e mais claro de entender. vou dar um exemplo:

//Sintaxe normal:if($idade < 18){   echo "Menor de idade";   }else{  echo "Maior de idade";}//sintaxe normal com dois ifsif($curso == "faculdade"){  if($idade <18 ){     echo "Menor de idade.. não pode fazer";  }else{     echo "Maior de idade, pode fazer";  }  }else{   echo "Faça pre-vestibular antes ";}

Olha que complicado... e muito fácil de se perder...

 

veja agora a sintaxe alternativa que recomendo usar:

//Sintaxe alternativa:if($idade < 18):   echo "Menor de idade";else:  echo "Maior de idade";endif;//sintaxe alternativa com dois ifsif($curso == "faculdade"):  if($idade <18 ):     echo "Menor de idade.. não pode fazer";  else:     echo "Maior de idade, pode fazer";  endif;  else:   echo "Faça pre-vestibular antes ";endif;

Muito melhor não?

 

e os outros elemento são a mesma coisa:

 

foreach ... endforeach,    

for... endfor,  

while...endwhile...

Link para o comentário
Compartilhar em outros sites

@dif. o

faltou colocaro fechamento do IF

não faltou simplesmente copiei do meu primeiro post para citar .

 

 

Sobre o if sim toda vez que você usava o código eu via while():endwhile; ou if():else:endif; . depois fui procurar e vi que era a mesma entrada do if(){} . eu nao me perco no if . pelo menos nele não.

 

 

Sobre a tabela, você não entendeu a Código dava certo, o ID estava auto_increment e colocando NULL que dava certo entende ? tirando ele que dava errado.

 

Mais sim ja resolvi o problema .

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!