Login por Controle, com uma tabela para conferir usuário e senha e passar param

Quero fazer login a partir de uma tabela minha, e passando o código do fornecedor como variável global.

Fiz um Controle com os campos Email e Senha, e no evento onValidate inseri o código:

$nome = {Email};
$pass = {Senha};

$sql = “SELECT email, senha, cod_fornecedor
FROM fornecedores
WHERE (Email = '”.$nome."’) AND (Senha = ‘".$pass."’)";

sc_lookup(ds, $sql);

if (isset({ds[0][0]}))
{
[global_fornecedor] = {cod_fornecedor};
sc_redir(menu.php);
}
else
{
echo “Usuário não existe”;
}

Mas mesmo existindo o e-mail e senha cadastrados, dá mensagem de usuário não existe. O que posso estar fazendo de errado?

A senha é criptografada? Qual o banco de dados?

Não é criptografada e o banco é mysql.

Ok, então mude o teu select assim:

$sql = “SELECT email, senha, cod_fornecedor
FROM fornecedores
WHERE email = '”.$nome."’ AND senha = ‘".$pass."’";

E veja se funciona pra ti.

Não funcionou…

Tava pensando aqui em usar o módulo segurança, mas os videos que assisti são só de personalização de layout. Onde encontro mais detalhes sobre ele? Só que não queria ter que selecionar o usuário de uma lista, queria que identificasse e a condição WHERE de todos os formulários permitisse somente o usuário logado.

Ramosinfo,

Tem este video aqui (https://www.youtube.com/watch?v=rECFwsN-H0k) que fala sobre segurança de acordo com o usuário logado. E tem vários outros falando sobre o mesmo tema.

Quanto ao teu SQL, se tu executares diretamente no MySQL ele traz o resultado esperado?

Observar os pequenos detalhes fazem a diferença…

O MySQL é case sensitive, diferencia Maiúscula de Minúsculas,

Observando o SQL ele pega ‘email’, ‘senha’ em Minúsculo, mas no WHERE ele já tenta
comparar com Maiúsculo no Início de cada palavra: ‘Email’ And ‘Senha’

$nome = {Email};
$pass = {Senha};

/* Macro sc_lookup */

sc_lookup(val_senha, "
SELECT
    email,
    senha,
    cod_fornecedor 
FROM
    fornecedores
WHERE
    email = '$nome' AND senha = '$pass'
");

/* Erro no lookup */
if (FALSE === {val_senha}) {
	sc_error_message("Ocorreu um erro no acesso ao banco de dados.<BR>");
}
elseif (empty({val_senha})) { /* EOF */

	sc_error_message("Usuário ou senha não cadastrado!<BR>");
}
else {

	/* Inclua aqui sua rotina de processamento */

       [global_fornecedor] = {cod_fornecedor};
       sc_redir(menu.php);
	
}

Deu erro:

Parse error: syntax error, unexpected ‘=’, expecting ‘}’ in C:\Program Files (x86)\NetMake\v81\wwwroot\scriptcase\app\Cheap\control\control_apl.php on line 1420

Tentei mudar que tinha 3 === mas não adiantou…

Faltou ; o no final aqui:
sc_lookup(val_senha, "
SELECT
email,
senha,
cod_fornecedor
FROM
fornecedores
WHERE
email = ‘$nome’ AND senha = ‘$pass’
"); // << Aqui…

É, deu certo.

Bom, acho estranho, que tá funcionando tudo ok, mas antes de entrar no menu, dá a mensagem bem rápida de:

Undefinied variable: cod_fornecedor

Mas tá pegando a váriável global com o cod_fornecedor.

Para pegar o código do Fornecedor direto do SQL da tabela mude esta parte do código para:
}
else {

/* Inclua aqui sua rotina de processamento */

   [global_fornecedor] = {val_senha[0][2]};     // <-- Aqui ele pega da tabela via SQL.
   sc_redir(menu.php);

}

Deu certo. Obrigado! :slight_smile: