Array
(
)

Gravar comandos em uma tabela

PHP
Francielle Oliveira
   - 13 nov 2013

Estou com muita dificuldade para resolver essa questão abaixo:
Como gravar os comandos digitados pelo usuário em uma tabela, ou seja, desde a hora que ele digita o login e a senha até a hora que ele sai do sistema.
Pode me ajudar nao sei nem começar rsrs..

Din
|
MVP
Pontos: 45
    13 nov 2013

Franciele, não entendi, tem como explicar na pratica? tipo quem faz o que?

Francielle Oliveira
   - 13 nov 2013

Estou criando um sistema de consulta ao banco de dados,

onde o usuário do sistema deverá logar no sistema(usuário e senha).
*sistema deverá registrar data e hora dos logons.
*sistema deverá registrar todos os comandos efetivados

Com isso estou com dificuldades para gravar os comandos que o usuário for fazendo no sistema numa outra tabela.

Ex: Quando ele logar no sistema, automaticamente já grava numa outra tabela que o usuário Fulano logou as 09:45.
Ai ele entrou para fazer um cadastro, ai automaticamente já grava na tabela que o usuário Fulano cadastrou no sistema e assim por diante.

Din
|
MVP
Pontos: 45
    13 nov 2013

Entendi, o que você quer é gattilho (trigger), assim, quando o cara logar (consutlar a tabela de usuarios) dispara um evento que faz um insert na tabela de log

outra forma de vc fazer isso e que vai demandar mais linhas de códigos é fazer isso no seu sistema, ex:

chamou a função que verifica os dados do usuário e senha -> insere na tabela de log

qualquer dúvida posta ai

Francielle Oliveira
   - 14 nov 2013

Estou tentando fazer assim mais ta dando erro, que não tenho privilégios para fazer. O que pode ser?

CREATE TABLE vigia
(registra VARCHAR2(100));

CREATE OR REPLACE TRIGGER registra_logon
AFTER LOGON ON DATABASE
BEGIN
INSERT INTO sys.vigia VALUES (USER || " entrou no sistema em " || TO_CHAR(sysdate, "DD-MM-YYYY HH24:MI:SS"));
COMMIT;
END; /

Din
|
MVP
Pontos: 45
    14 nov 2013

seu usuario é admin?

Francielle Oliveira
   - 15 nov 2013

Sim, fiz abaixo e nao ta dando certo.

CREATE TABLE registro(
Nome VARCHAR2(30),
dat date
);

CREATE TABLE client(
Nome VARCHAR2(30)
);

CREATE OR REPLACE TRIGGER marca_logonn
BEFORE INSERT OR DELETE OR UPDATE
ON registro
REFERENCING NEW AS NEW OLD AS OLD
BEGIN
INSERT INTO client VALUES (USER || 'entrou no sistema em' || TO_CHAR(sysdate, 'DD-MM-YYYY, HH24:MI:SS'));
END;
/

Din
|
MVP
Pontos: 45
    15 nov 2013

bom poe a mensagem de erro ai, outra coisa, sei pouco sobre o assunto porem o que sei é os insert estarão na tabela inserted e os replace ou delete na tabela deleted...

Rumao
   - 25 nov 2013

Estou fazendo algo parecido assim:
Veja se lhe ajuda de alguma forma ou lhe dá uma ideia para onde seguir.

#Código

<?php

function gravarLogin($admin) {
    /* Altera a data e hora do Localhost */
    date_default_timezone_set('America/Sao_Paulo');
    $pdo = conectar();
    try {
        $gravarLogin = $pdo->prepare("INSERT INTO dados_login_admin (dados_login_admin, dados_login_data) VALUES (:admin, :data)");
        $gravarLogin->bindValue(":admin", $admin);
        $gravarLogin->bindValue(":data", date("Y/m/d h:i:s"));
        $gravarLogin->execute();
        //Se cadastrou no banco o login do Administrador
        if ($gravarLogin->rowCount() == 1):
            return true;
        else:
            return false;
        endif;
    } catch (PDOException $e) {
        echo '<div class="msg_erro">Erro ao gravar dados de Login. </div>'.$e->getMessage();
    }
}

function gravarDados($arquivo) {
    /* Altera a data e hora do Localhost */
    date_default_timezone_set('America/Sao_Paulo');
    /* Verifica o tipo de arquivo para gravar as mensagens */
    if ($arquivo == "functions/login/sucesso_login.txt"):
        $str = "O Administrador " . $_SESSION['cliente'] . " logou com sucesso. IP: " . $_SERVER['REMOTE_ADDR'] . " na Data: " . date("Y/m/d h:i:s") . "\n";
    else:
        $str = "Erro ao logar com o IP: " . $_SERVER['REMOTE_ADDR'] . " na Data: " . date("d/m/Y h:i:s") . "\n";
    endif;
    /* Grava os dados em arquivo .txt */
    if (file_exists($arquivo)):
        $file = fopen($arquivo, "a");
        if ($file):
            fputs($file, $str);
        endif;
    endif;
}

function logar($login, $senha) {
    $pdo = conectar();
    try {
        $logar = $pdo->prepare("SELECT * FROM admin WHERE admin_login = :login AND admin_senha = :senha LIMIT 1");
        $logar->bindValue(":login", $login);
        $logar->bindValue(":senha", $senha);
        $logar->execute();
        $dadosLogin = $logar->fetch(PDO::FETCH_ASSOC);

        if ($logar->rowCount() == 1):
            //Se logou cria a Sessão
            $_SESSION['admin'] = $dadosLogin['admin_nome'];
            $_SESSION['responsavel'] = $dadosLogin['admin_login'];
            $_SESSION['logado_admin'] = true;

            //Grava no banco de dados
            if (gravarLogin($dadosLogin['admin_id'])):
                //Grava em arquivo .txt                
                gravarDados("functions/login/sucesso_login.txt");
                return true;
            endif;
        else:
            //Se não logou grava em arquivo .txt
            gravarDados("functions/login/erro_login.txt");
            return false;
        endif;
    } catch (PDOException $e) {
        echo '<div class="msg_erro">Erro ao tentar logar no Sistema. </div>'.$e->getMessage();
    }
}

function verificaLogado($sessao){
    if(!isset($_SESSION[$sessao])):
        header("Location: ../index.php");
    endif;
}

function pegaIdAdmin($nome = null){
    $pdo = conectar();
    try{
    $pegaId = $pdo->prepare("SELECT * FROM admin WHERE admin_nome = :admin");
    $pegaId->bindValue(":admin", $nome);
    $pegaId->execute();
    $dados = $pegaId->fetch(PDO::FETCH_ASSOC);
    return $dados['admin_id'];
    }catch(PDOException $e){
        echo "Erro ao pegar ID do admin. ".$e->getMessage();
    }
}

function ultimoLogin($id){
    $pdo = conectar();
    try{
    $ultimaVisita = $pdo->prepare("SELECT * FROM dados_login_admin WHERE dados_login_admin = :dados_login 
                            ORDER BY dados_login_data DESC LIMIT 1,1");
    $ultimaVisita->bindValue(":dados_login", $id);
    $ultimaVisita->execute();
    $dados = $ultimaVisita->fetch(PDO::FETCH_ASSOC);
    return $dados['dados_login_data'];
    }catch(PDOException $e){
        echo "Erro ao pegar último login do admin. ".$e->getMessage();
    }
}