Ir para conteúdo

Arquivado

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

DunkMask

Sistema administrativo com log

Recommended Posts

Ola galera,

em uma versão do sistema administrativo do meu site tive problemas com dados sumindo e não tinha como saber que estava acontecendo.

 

Então resolvi limitar o acesso a certas areas atraves de niveis, ate entao a coisa deu certo. Mas andei lendo alguns artigos na net e tive a curiosidade e o interesse de criar logs, saber o que cada usuario anda fazendo.

 

Como sou novato não intendo muito da coisa, mas de inicio criei a seguinte tabela no banco de dados.

 

CREATE TABLE logs ( 
`id_log` INT( 11 ) NOT NULL AUTO_INCREMENT ,
`nome` VARCHAR( 255 ) NOT NULL ,
`ip` VARCHAR( 80 ) NOT NULL ,
`mensagem` TEXT NOT NULL ,
PRIMARY KEY ( `id_log` ) 
) 

Lembranod que essa tabela postei aqui agora de cabeça. não sei ela toda pq estou no trabalho, mas voltando a dúvida.

 

Uma vez a tabela criada veio a minha dúvida.

Como é que vou mandar essas informações ao banco de dados? Dai me deu o branco.

 

Sou marinheiro de primeira viagem e estou tendando melhorar a minha "programação". Se alguem puder me ajudar com dicas ou artigos eu agradeceria.

 

Bom é isso. Espero pelo comentário de todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Kra eu tenho uma ideia mais ou menos assim...

 

Imaginaremos que você tem a pagina "relatorio_financeiro.php",na minha kbça e so você

colocar um insert no inicio da pagina para quando a pagina for aberta insira no banco

as informações,a proposito seria bom você também colocar a data e a hora.

 

Gostei da ideia,qualquer duvida to aqui para concretizar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

não sou muito fã de storedprocedure, mas este é o caso em que elas são úteis.

 

aí não fica nada no código, fica mais limpo. você cria um SP para cada tabela, ou uma genérica para todas, e sempre que você quizer (delete,insert,update) cria o log.

 

eu faria assim, mas a idéia anterior tb eh válida.

Compartilhar este post


Link para o post
Compartilhar em outros sites

então, o campo mensagem teria a data, hora, local e o que o usuario fez.

 

tentei um script pronto as fiquei na mesma. não tinha ideia de como mandaria essas informações ao banco de dados.

 

Como não estou em casa ainda nao tem como postar os arquivos aqui, mas estudando o script fica uma coisa vaga e o aprendizado não é muito. Gostaria de entender e executar a ideia.

 

Estou a 4 meses "programando" se é que posso dizer isso, ate que ja fiz coisas legais para sites de animes e tal, mas como todo "programador", no meu caso super hamador, você quer melhorar e apresentar coisas legais.

 

Bom, mais tarde estarei postando os arquivos aqui, pq daqui a pouco estarei saindo em horario de almoço, mas se mais alguem tiver um exemplo pratico aqui que possa explicar eu agradeceria.

 

 

 

ps: outra dúvida surgiu na questão de segurança. Um amigo me disse que meu sistema esta vulneravel a sqlinject alguem pode me explicar tbm formas de se prenvinir?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ih EuToComProblema não sei como utilizar storedprocedure mais imagino que seja algo do proprio mysql,mais é possivel

inserir nesses logs o que queremos? O que tem nesses logs? Fiquei curioso ^^.

 

E quanto a minha ideia anterior é o seguinte DunkMask,eu acho que o melhor era você criar campos especificos para

data e hora assim você poderia trabalhar melhor com esses logs exemplo.: em projetos futuros você criar uma interface para pesquisar os logs entre datas exibir so o log do dia, do mês um intervalo de datas o que só

é possivel com campos especificos para isso.

 

Ja nas paginas ficaria algo mais ou menos assim.

 

<?php
$data     = date("Y-m-d");
$nome     = $user // Não sei como você faz pra saber qual é o usuario
$ip       = "" ; // Algo para pegar o IP não tenho a função de kbça mais essa semana teve um topico que abordou isso
$mensagem = "Pagina de Relatório financeiro";
// Lembrando que essa mensagem você configuraria de acordo com a pagina.
$insert = mysql_query("INSERT INTO `logs` (nome,ip,mensagem,data) VALUES ('$nome','$ip','$mensagem','$data')");
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

como disse nao sou muito fã de SP, trabalhei muito pouco com isso.

 

mas seria algo tipo

(nao lembro a sintaxe tb)

 

procedure crialog BEFORE INSERT

comando PL/SQL

end;

 

onde esses comandos podem ser muitas coisas.... gostaria de explicar, mas como nao sei direito eh melhor procurar por si. eu posso acabar explicando errado.

 

eh do mysql mesmo, está certo

 

nesse caso seria AFTER nao BEFORE

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, pesso desculpas na demora, mas aquela hora tinha saido para almoçar.

 

Mas agora voltando irei postar aqui o codigo que estou usando.

 

Página volume.php

<?php
	include('./config.php');
	require_once('restrito.php');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
<style type="text/css">

</head>

<body>
<div id="pagcorpo">
<?php
	if($_GET['action'] != "editar"){
?>
	<div id="pagtitulo">Cadastrar volume</div>
    <div id="pagconteudo">
    	
    	<form action="?page=include/add.vol&action=salvar" method="post" name="postar">
        <span class="caixapost1">Tipo:</span>
        <span class="caixapost2">
        	<select name="tipo">
              <option value="Naruto">Naruto</option>
              <option value="Naruto Shippuuden">Naruto Shippuuden</option>
            </select>
        </span>
        <span class="caixapostboth"></span>
        
        <span class="caixapost1">Scanlator:</span>
        <span class="caixapost2"><input name="scanlator" type="text" size="30" /></span>
        <span class="caixapostboth"></span>
        
        <span class="caixapost1">Número:</span>
        <span class="caixapost2"><input name="numero" type="text" size="30" /></span>
        <span class="caixapostboth"></span>
        
        <span class="caixapost1">Nome:</span>
        <span class="caixapost2"><input name="nome" type="text" size="30" /></span>
        <span class="caixapostboth"></span>
        
        <span class="caixapost1">Imagem:</span>
        <span class="caixapost2"><input name="imagem" type="text" size="30" /><a href="javascript:mcImageManager.open('postar','imagem','','',{relative_urls : true});"> [Selecionar]</a></span>
        <span class="caixapostboth"></span>
        
        <span class="caixapost1">Servidor 1:</span>
        <span class="caixapost2"><input name="servidor1" type="text" size="30" /></span>
        <span class="caixapostboth"></span>
        
        <span class="caixapost1">Link 1:</span>
        <span class="caixapost2"><input name="link1" type="text" size="30" /></span>
        <span class="caixapostboth"></span>
        
        <span class="caixapost1">Servidor 2:</span>
        <span class="caixapost2"><input name="servidor2" type="text" size="30" /></span>
        <span class="caixapostboth"></span>
        
        <span class="caixapost1">Link 2:</span>
        <span class="caixapost2"><input name="link2" type="text" size="30" /></span>
        <span class="caixapostboth"></span>
      <span class="caixapost3"><input name="cadastrar" type="submit" value="Cadastrar" /></span>
        </form>
    </div><!--FIM DA DIV PAGCONTEÚDO-->
<?php
	}
	if($_GET['action'] == "editar"){
		$id_vol = $_GET['id_vol'];
		$sql_volume = mysql_query("SELECT * FROM volume WHERE id_vol = '$id_vol'");
		while($xvol = mysql_fetch_object($sql_volume)){
			$numero = $xvol->numero;
			$nome = $xvol->nome;
			$servidor1 = $xvol->servidor1;
			$link1 = $xvol->link1;
			$servidor2 = $xvol->servidor2;
			$link2 = $xvol->link2;
			$scanlator = $xvol->scanlator;
		}
?>
    <div id="pagtitulo">Editar volume</div>
    <div id="pagconteudo">
    	<form action="?page=include/add.vol&action=editar&id_menu=<? echo $id_vol ?>" method="post">
        <span class="caixapost1">Tipo:</span>
        <span class="caixapost2">
        	<select name="tipo">
              <option value="Naruto">Naruto</option>
              <option value="Naruto Shippuuden">Naruto Shippuuden</option>
            </select>
        </span>
        <span class="caixapostboth"></span>
        
        <span class="caixapost1">Scanlator:</span>
        <span class="caixapost2"><input name="scanlator" type="text" value="<? echo $scanlator ?>" size="30" /></span>
        <span class="caixapostboth"></span>
        
         <span class="caixapost1">Número:</span>
        <span class="caixapost2"><input name="numero" type="text" value="<? echo $numero ?>" size="30" /></span>
        <span class="caixapostboth"></span>
        
        <span class="caixapost1">Nome:</span>
        <span class="caixapost2"><input name="nome" type="text" value="<? echo $nome ?>" size="30" /></span>
        <span class="caixapostboth"></span>
        
        <span class="caixapost1">Imagem:</span>
        <span class="caixapost2"><input name="imagem" type="text" value="<? echo $imagem ?>" size="30" /></span>
        <span class="caixapostboth"></span>
        
        <span class="caixapost1">Servidor 1:</span>
        <span class="caixapost2"><input name="servidor1" type="text" value="<? echo $servidor1 ?>" size="30" /></span>
        <span class="caixapostboth"></span>
        
        <span class="caixapost1">Link 1:</span>
        <span class="caixapost2"><input name="link1" type="text" value="<? echo $link1 ?>" size="30" /></span>
        <span class="caixapostboth"></span>
        
        <span class="caixapost1">Servidor 2:</span>
        <span class="caixapost2"><input name="servidor2" type="text" value="<? echo $servidor2 ?>" size="30" /></span>
        <span class="caixapostboth"></span>
        
        <span class="caixapost1">Link 2:</span>
        <span class="caixapost2"><input name="link2" type="text" value="<? echo $link2 ?>" size="30" /></span>
        <span class="caixapostboth"></span>
      <span class="caixapost3"><input name="editar" type="submit" value="Editar" /></span>
      </form>
    </div><!--FIM DA DIV PAGCONTEÚDO-->
<?php
	}
?>

<div id="pagtitulo">Listar volume</div>
    <div id="pagconteudo">
    <?php
    	$list_volume = mysql_query("SELECT * FROM volume ORDER BY numero");
		while($list = mysql_fetch_object($list_volume)){
	?>
    	<span class="listmenu">[ <a href="?page=principal/volume&action=editar&id_vol=<? echo $list->id_vol ?>" title="Volume <? echo $list->numero ?>: <? echo $list->nome ?>">Volume <? echo $list->numero ?></a> ] - [ <a href="?page=include/add.vol&action=excluir&id_vol=<? echo $list->id_vol ?>" title="Excluir Volume <? echo $list->numero ?>">x</a> ]</span>
    <?php
		}
	?>

        <span class="caixapostboth"></span>
    </div><!--FIM DA DIV PAGCONTEÚDO-->
    
</div><!--FIM DA DIV PAGCORPO-->
</body>
</html>

Página add.vol.php

<?php
// Inserindo dados na tabela

$tipo = $_POST['tipo'];
$numero = $_POST['numero'];
$nome = $_POST['nome'];
$imagem = $_POST['imagem'];
$servidor1 = $_POST['servidor1'];
$link1 = $_POST['link1'];
$servidor2 = $_POST['servidor2'];
$link2 = $_POST['link2'];
$scanlator = $_POST['scanlator'];

if($_GET['action'] == "salvar"){
	$inserir = mysql_query("INSERT INTO volume (tipo, numero, nome, imagem, servidor1, link1, servidor2, link2, scanlator) VALUE ('$tipo', '$numero', '$nome', '$imagem', '$servidor1', '$link1', '$servidor2', '$link2', '$scanlator')");
	
	echo "<meta HTTP-EQUIV='Refresh' CONTENT='0;URL=?page=principal/volume'>
	<script>window.alert('Volume adicionado com sucesso.');</script>
	";

}
?>

agora segue a tabela usado para os logs.

 

CREATE TABLE `logs` (
  `id_log` int(11) NOT NULL auto_increment,
  `usuario` varchar(50) NOT NULL,
  `hora` datetime NOT NULL,
  `ip` varchar(15) NOT NULL,
  `mensagem` text NOT NULL,
  PRIMARY KEY  (`id_log`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

<?php
        $ip = $_SERVER['REMOTE_ADDR']; // Registra o ip do usuario
	$hora = date('Y/m/d H:i:s'); // Salva a data e hora 
	$usuario = $_SESSION['UsuarioNome']; // Salva o nome do usuario
        $usuario = "Capitulo adicionado com sucesso"; // Mensagem

$sqlog = "INSERT INTO 'logs' (hora, ip, mensagem, usuario) VALUES ('$hora', '$ip', '$mensagem', '$usuario')";
?>

ate aqui tudo bem, mas ate entao eu tinha colocado este codigo junto a pagina add.vol.php mas da erro, dai entrou minha duvida, isso deve ficar na pagina do formulario ou na pagina add.vol.php?

 

corrigindo uma linha que vi que esta errado ai, acabei esquecendo de alterar o nome da varial da mensagem

 

Bom, acho que ninguem vai me ajudar com esta questão T_T, mas vou aproveitar o topico para perguntar outra coisa tbm.

 

Fiz um "sisteminha de noticias" aqui para o meu site so que estou tendo um grande problema para inserir um certo conteudo.

 

Este é o código da página de news

<?php
$login = $_SESSION['UsuarioNome'];
if ($_GET['post'])
{
    $x = mysql_fetch_object(mysql_query("SELECT * FROM usuarios WHERE nome='$login'"));
    $nome = $x->login;
    mysql_close($conexao);
    $assunto = $_POST['assunto'];
    $noticia = $_POST['noticia'];
    $data = "<b>" . date("d/m/y") . " às " . date("H:i");
    require('./config.php');
    $sql = mysql_query("INSERT INTO news (id_news, nome, assunto, data, news) values ('','$nome', '$assunto', '$data', '$noticia')") or
        die(mysql_error());
    if (!$sql)
        echo "Erro!";
    else
        echo "News Postada com sucesso!";
}
?>
<form action="?page=principal/new&post=ok" method="post" name="postar" >
<input type="text" name="assunto" size="40" value="Titulo"/>
<textarea  type="text" name="noticia" ></textarea>
<br /><br />
<input id="tiny" name="postar" type="submit" value="postar" />
</form>

E todo vez que eu insiro este codigo na caixa de texto

<div id="cxlancamento">
  <div id="cxmenu">
   	<ul>
        <li><img height="17" width="61" onclick="document.getElementById('hd172').style.display='block';  document.getElementById('sd172').style.display='none'; document.getElementById('rmvb172').style.display='none'" onmouseout="this.src='images/lancamento/fundoselect.png'" onmouseover="this.src='images/lancamento/hover.png" class="quali"  alt="" src="images/lancamento/select.png" /></li>
      	<li><img height="17" width="61" onclick="document.getElementById('hd172').style.display='none';  document.getElementById('sd172').style.display='block'; document.getElementById('rmvb172').style.display='none'" onmouseout="this.src='images/lancamento/fundoselect.png'" onmouseover="this.src='images/lancamento/hover.png" class="quali"  alt="" src="images/lancamento/fundoselect.png" /></li>
   	  	<li><img height="17" width="61" onclick="document.getElementById('hd172').style.display='none';  document.getElementById('sd172').style.display='none'; document.getElementById('rmvb172').style.display='block'" onmouseout="this.src='images/lancamento/fundoselect.png'" onmouseover="this.src='images/lancamento/hover.png" class="quali"  alt="" src="images/lancamento/fundoselect.png" /></li>
    </ul>
  </div><!--FIM DA DIV CXMENU-->
	<div id="lancamentos">
    	<span class="cximg"></span>
        <span class="cxtitulo">
			<span class="cx01">EPISÓDIO 173</span>
            <span class="cx02">Meu nome é Uzumaki Naruto</span>
        </span><!--FIM DA SPAN CXTITULO-->
        
        <div class="csrodape" id="hd172" style="display:block;">
       	 		<div id="cxmirrors">
                	Megaupload<br />
                    Mediafire<br />
                    Badongo<br />
                    Sharex<br />
                </div>
    			<div id="cxfnasub">
        			<span class="cx03"><span class="cx03a"><a href="HD">Download</a></span>Link direto</span>
            		<span class="cx04"><span class="cx04a">PUNCH-FANSUB</span>Clique para visitar</span>
        		</div>
       </div><!--FIM DA DIV HD172-->
       
       <div class="csrodape" id="sd172" style="display:none;">
       	 		<div id="cxmirrors">
                	4Share<br />
                    Mediafire<br />
                    Badongo<br />
                    Sharex<br />
                </div>
    			<div id="cxfnasub">
        			<span class="cx03"><span class="cx03a"><a href="SD">Download</a></span>Link direto</span>
            		<span class="cx04"><span class="cx04a">PUNCH-FANSUB</span>Clique para visitar</span>
        		</div>
       </div><!--FIM DA DIV SD172-->
       
       <div class="csrodape" id="rmvb172" style="display:none;">
       	 		<div id="cxmirrors">
                	RapidShare<br />
                    Mediafire<br />
                    Badongo<br />
                    Sharex<br />
                </div>
    			<div id="cxfnasub">
        			<span class="cx03"><span class="cx03a"><a href="RMVB">Download</a></span>Link direto</span>
            		<span class="cx04"><span class="cx04a">PUNCH-FANSUB</span>Clique para visitar</span>
        		</div>
       </div><!--FIM DA DIV rmvb172-->
    </div><!--FIM DA DIV LANÇAMENTO-->
    
    
</div><!--FIM DA DIV CXLANÇAMENTO-->

ele exibe este erro para mim:

 

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'hd172').style.display='block'; document.getElementById('sd172').style.display='' at line 1

 

Bom, aguardo respostas e soluções caso tenha.

obrigado

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.