Erro gravação SEC_LOGGED - funcao microtime(true) - RESOLVIDO

Acabei de gerar o módulo de segurança, alguns probleminhas resolvidos…

somente este último preciso de ajuda, problema em gravar a data e hora ( timestamp )

[code] (firebird): INSERT INTO SEC_LOGGED(LOGIN, DATE_LOGIN, SC_SESSION) VALUES (‘admin’, ‘1381758730.6317’, ‘98f1ri3bc8j2vsb37o630slbv1’) *** habilitado DEBUG ****

Msg de erro:
ERROR
ibase_query(): conversion error from string “1381758730.6317”
0: conversion error from string “1381758730.6317”
[/code]

Procurei o código, achei em bibliotecas, a função q retorna, microtime(true).
alguma dica de uma outra maneira de gravar esse campo ?

Eloy,

O Sr. fez alguma modificação no módulo de segurança? Ou o simples fato de criar o módulo no firebird causou este problema?

att,
Bernhard Bernsmann

Faltou informação de minha parte…

Gerei o modulo de segurança, gerei todos os fontes de novo, inclusive os do modulo de segurança e log.
na entrada do novo sistema com senha, no meu caso, sec_Login, ao entrar com o usuário administrador a msg de erro citada acima aparecia.

deixei ligado o DBUG e achei onde estava o problema, na verdade não é com modulo de segurança e sim com o LOG. Na biblioteca sc_logged.php na função sc_logged_in();

[code]
function sc_logged_in($user)
{
$str_select = “SELECT count(*) FROM SEC_USERS WHERE LOGIN = '”. $user . “’”;
sc_lookup(rs_logged, $str_select);
if({rs_logged[0][0]} == 1)
{
[logged_user] = $user;
[logged_date_login] = microtime(true);

		$str_sql = "INSERT INTO SEC_LOGGED(LOGIN, DATE_LOGIN, SC_SESSION) VALUES ('". $user ."', '". [logged_date_login] ."', '". session_id() ."')";
		//sc_exec_sql($str_sql); /// COMENTEI AQUI PARA PODER ENTRAR NO SISTEMA
	}
}[/code]

Nunca tinha visto essa função mircotime()… como tava com pressa, deixei pra depois tentar tratar diferente [logged_date_login] mais tarde.

Ao que parece o tipo de campo ou tamanho no banco esta causando o erro.

É uma possibilidade.

Eloy,

Já verificou se o conteúdo do campo não está sendo truncado?

att,
Bernhard Bernsmann

Acho que sim:
a msg de erro:

Msg de erro: ERROR ibase_query(): conversion error from string "1381758730.6317" 0: conversion error from string "1381758730.6317"

esta string, “1381758730.6317”, é o retorno de microtime(true) para variável [logged_date_login] que seria gravada no campo DATE_LOGIN da tabela SEC_LOGGED.
este código está no arquivo sc_logged.php que é gerada pelo scriptcase por ocasião da geração do módulo de log.
esta função grava o usuário logado do sistema de log do scriptcase.

o código de sc_logged.php

function sc_logged_in($user)
	{
		$str_select = "SELECT count(*) FROM SEC_USERS WHERE LOGIN = '". $user . "'";
		sc_lookup(rs_logged, $str_select);
		if({rs_logged[0][0]} == 1)
		{
			[logged_user] = $user;
			[logged_date_login] = microtime(true); <-- aqui é retornado   "1381758730.6317" para inclusão abaixo.
		
			$str_sql = "INSERT INTO SEC_LOGGED(LOGIN, DATE_LOGIN, SC_SESSION) VALUES ('". $user ."', '". [logged_date_login] ."', '". session_id() ."')";
			sc_exec_sql($str_sql); 
		}
	}

vou tentar tratar o [logged_date_login] = microtime(true) achando uma solução posto de novo.

Aqui servidor Debian com Firebird e apresentando o mesmo erro!!!

Srs.,

Apesar de não ter deixado o feedback antes, já informei nossa equipe de bugs a respeito do problema.

att,
Bernhard Bernsmann

Srs.,

O problema foi corrigido, e o fix estará presente em nossa próxima release.

Uma solução paliativa até a correção é:

Abrir o diretório: \devel\lib\sql\security

Editar o arquivo: create_interbase.sql

E alterar o SQL, por esse abaixo:

CREATE TABLE SEC_LOGGED (

LOGIN VARCHAR(32)  NOT NULL,
DATE_LOGIN VARCHAR(128),
SC_SESSION VARCHAR(32),
FOREIGN KEY(LOGIN)
    REFERENCES SEC_USERS(LOGIN) ON DELETE CASCADE,
PRIMARY KEY (LOGIN)

);

att,
Bernhard Bernsmann

Prezados,

Corrigido na release 7.1.010.

Só gerar o modulo de segurança novamente.

Att,

Obrigado

Criei uma Consulta para mostrar os usuários conectados, porém não consigo mostrar a data/hora.

em OnRecord coloquei o código, mas não retorna a data/hora, retorna apenas o numeral que esta no BD, pesquisei muito e não encontrei uma solução:

[logged_date_login] = microtime(true);

Ops… acho que falei besteira acima, na verdade ele retorna em milissegundos o tempo de acesso, é isso? Caso positivo, como saber a data/hora de acesso ao sistema?