[RESOLVIDO] App_login Mudar conexão

Bom dia!

Estou enfrentando um problema desde quando comecei esse projeto. O problema é com a aplicação app_login. Minha app_login está modificada para acessar vários banco de dados na mesma conexão. Pra ficar mais fácil segue o código abaixo. Ele troca de banco de dados quando um certo usuário e senha é inserido. Ele até loga mas o problema é que preciso digitar o usuário a senha duas vezes.

Já tentei muitas formas mas notei que após ele conectar no novo banco ele não atualiza as informações da tabela com a nova conexão pra validar o usuário sendo necessário recarregar o formulário.

Há alguma forma de recarregar um formulário e continuar a processa-lo a partir do onValidateSuccess sem ter que voltar desde o inicio e fazer o usuário digitar o login e senha novamente??

Obrigado.

ONVALIDATE

[code]sc_set_global($usr_login);
sc_set_global($spswd);
sc_set_global($arr_conn);
$arr_conn = array();
[usr_login] = {login};
[spswd] = {pswd};

if([usr_login] == ‘’ and [spswd] == ‘’){
sc_log_add(‘login Fail’, {lang_login_fail} . {login});
sc_error_message({lang_error_login});
sc_error_exit();
}
elseif([usr_login] == ‘judas’ and [spswd] == ‘2194’){
$arr_conn[‘server’] = “127.0.0.1”;
$arr_conn[‘user’] = “root”;
$arr_conn[‘password’] = “pwdsenha”;
$arr_conn[‘database’] = “bancodedados_1”;
$arr_conn[‘persistent’] = “Y”;
$confirm = “Y”;
}
elseif([usr_login] == ‘tadeu’ and [spswd] == ‘me275’){
$arr_conn[‘server’] = “127.0.0.1”;
$arr_conn[‘user’] = “root”;
$arr_conn[‘password’] = “pwdsenha”;
$arr_conn[‘database’] = “bancodedados_2”;
$arr_conn[‘persistent’] = “Y”;
$confirm = “Y”;
}
else{
sc_log_add(‘login Fail’, {lang_login_fail} . {login});
sc_error_message({lang_error_login});
sc_error_exit();
}
if ($confirm == “Y”){
sc_connection_edit(“conn_finanonline”, array(“server” => $arr_conn[‘server’],
“user” => $arr_conn[‘user’],
“password” => $arr_conn[‘password’],
“database” => $arr_conn[‘database’],
“persistent” => $arr_conn[‘persistent’]));
}[/code]

ONVALIDATESUCCESS

[code]$login = sc_sql_injection([usr_login]);
$pwd = sc_sql_injection([spswd]);
sc_lookup(rs1,“SELECT priv_admin, active, name, email, empresa_emid, login, pswd FROM sec_users WHERE login = $login AND pswd = $pwd”, “conn_finanonline”);
$usr_priv_admin = ({rs1[0][0]} == ‘Y’) ? TRUE : FALSE;
$usr_name = {rs1[0][2]};
$usr_email = {rs1[0][3]};
$usr_empresa = {rs1[0][4]};
sc_set_global($usr_priv_admin);
sc_set_global($usr_name);
sc_set_global($usr_email);
sc_set_global($usr_empresa);

sc_select(rs, “SELECT
app_name,
priv_acess,
priv_insert,
priv_delete,
priv_update,
priv_update,
priv_print
FROM sc_group_app
WHERE group_id IN
(SELECT
group_id
FROM
sec_users_groups
WHERE
login = $login)”, “conn_finanonline”);
if ({rs1} !== false)
{
while (!$rs->EOF)
{
if ($rs->fields[1] == ‘Y’)
{
sc_apl_status($rs->fields[0], ‘on’);
}
else
{
sc_apl_status($rs->fields[0], ‘off’);
}

	sc_apl_conf($rs->fields[0], 'insert', has_priv($rs->fields[2]));
	sc_apl_conf($rs->fields[0], 'delete', has_priv($rs->fields[3]));
	sc_apl_conf($rs->fields[0], 'update', has_priv($rs->fields[4]));
	//export
	$export_permission = 'btn_display_'. has_priv($rs->fields[5]);
	sc_apl_conf($rs->fields[0], $export_permission, 'xls');
	sc_apl_conf($rs->fields[0], $export_permission, 'word');
	sc_apl_conf($rs->fields[0], $export_permission, 'pdf');
	sc_apl_conf($rs->fields[0], $export_permission, 'xml');
	sc_apl_conf($rs->fields[0], $export_permission, 'csv');
	sc_apl_conf($rs->fields[0], $export_permission, 'rtf');
	//export
	
	$export_permission = 'btn_display_'. has_priv($rs->fields[6]);
	sc_apl_conf($rs->fields[0], $export_permission, 'print');

	$rs->MoveNext();	
}
$rs->Close();

	sc_log_add('login', {lang_login_ok});
	$_SESSION['test'] = time() + 1800;

}
sc_lookup(rs1, “SELECT aceite from contrato”);
if ({rs1[0][0]} <> ‘Y’){
sc_redir(‘form_contrato’);
}
else
{
sc_redir(‘menu_inicial’);
}[/code]

Ola

Uso o SqlServer com varios bancos e criei uma biblioteca interna no projeto e mudo de banco de dentro de qualquer aplicação; porem todos os Bds estao no mesmo SGDB.

A aplicação tem uma dropdown para selecionar a unidade que se deseja conectar {conexao}. no onvalidate: $sql = "SELECT usuario,senha FROM {conexao}.dbo.login WHERE usuario = '[usr_login]' AND senha = " .[usr_senha]; sc_lookup(rs, $sql);

if(count({rs}) == 0)
{
sc_error_message(“Usuario não existe na Unidade selecionada e/ou Senha não confere.”);
}
else
{
$database = {conexao};
conecta_bd($database);
}

A biblioteca:
function conecta_bd($database = “caixa”)
3| {
4| $arr_conn = array();
5| $arr_conn[‘database’] = $database;
6| sc_connection_edit(“conn_geral”, $arr_conn);
7| [NomeBd] = $database;
8| }

Nunca tentei; mas acredito que funciona mesmo se os Bds forem diferentes(SQLSERVER,Mysql,etc…) criando conexoes diferentes dentro do scriptcase.

No login segue o mesmo racicionio : coloco o dropdown com as unidades, usuario e senha e no onvalidate direciono para a unidade selecionada se existir usuario e senha solicitada.

At.
Moacir de Oliveira

macros de conexão só funcionam na aplicação chamada

-> app_login <- aqui vc troca a conexão

-> menu <- só aqui vc pode usar a conexão trocada.

Bom dia!
Haroldo, fiz do jeito que você me falou, deu certo, muito obrigado.

Pra que fique mais claro pra quem ainda é leigo como eu, foi necessário apagar todas as minhas aplicações que compõe o modulo segurança, e cria-la novamente em outra conexão e outro banco de dados.

Depois de criar, foi necessário também ir no banco de dados criado automaticamente pelo modulo e add os campos das conexões na tabela usuários.

Na onvalidate add também ao código os campos das conexões para que ele pegue no lookup.

No onvalidatesuccess inserir a macro sc_connection_edit ao final dos códigos e dentro da ultima condição do IF “}” com os campos pegados pelo lookup na onvalidate.

Pronto sua troca de conexão vai funcionar normalmente sem ter que pedir usuário e senha duas vezes.

Obrigado a todos que me ajudaram.

.