Função para Getar senha

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Mensagem por asimoes »

Clodoaldo,

Na própria linha de get colocar um validador para senha, tipo assim:
quando o usuário teclar o enter no valid do get verificar se a senha existe e mostrar uma mensagem para não localizada, com isso passar para o próximo get caso a senha seja válida. Isso é útil também para confirmação de senha:

ex.

cSenha1:=SPACE(6)
cSenha2:=SPACE(6)

@10,00 SAY "Exntre com a Senha: " GET cSenha1 PICT "@P" VALID VERSEN(cSenha1)
@11,00 SAY "Confirme : " GET cSenha2 PICT "@P" VALID VERSEN(cSenha2
READ

No primeiro GET a função pesquisa a senha para ver se existe.
No segundo, a função verifica se a senha é igual a primeira.

É só uma idéia.

Alexandre


clodoaldomonteiro escreveu:Não tinha testado com o VALID.

Mas me diga o que é que você quer validar, para que eu possa entender melhor, pois eu só valido se a senha é válida depois do READ e se não existir eu LOOP e volto pro início do WHILE, depois se o contador estourar três tentativas sai definitivamente.

Mas se ainda assim você quiser usar o VALID, eu posso tentar concertar o erro.
Avatar do usuário
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

Mensagem por clodoaldomonteiro »

Alexandre!

O problema é que na hora do valid o campo de senha ainda não foi modificado para receber o seu verdadeiro conteúdo, é só depois do read que eu pude fazer isso.

O que me travou aqui foi o seguinte:
Eu não consigo visualizar a o coneúdo do comando valid, ele é colocado dentro de um codeblock, para ser usado com a função eval(), assim: eval(oget:postblock,oget), essa é a rotina que valida o get.

Queria saber se você sabe como visualizar uma variável tipo code block, ai eu poderia fazer o valid.

Só sei que eval() excuta code block.
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Mensagem por asimoes »

Clodoaldo,

Acho que consegui contornar.

Veja, eu declarei a variável oGet como PRIVATE na function ReadModal
a na function valsen, MEMVAR oGet

lSis := .T.
@ 12,28 SAY "S E N H A: " GET KeySis PICTURE "@P" VALID VALSEN(@KeySis,10,"SISTEMA")=.T. COLOR "N/W"
READ

O exemplo da minha validação

FUNCTION VALSEN(cVar,nTam,cAcesso,nLin,nCol)
LOCAL lOk :=.F.,;
cPASS := ALLTRIM(PASS),;
cPASS1 := ALLTRIM(PASS1),;
cPASS2 := ALLTRIM(PASS2),;
cVarGet:= SPACE(nTam),;
cRead := READVAR()


MEMVAR oGet // Quem vem do getsys2

DEFAULT cAcesso TO "",;
nLin TO 0 ,;
nCol TO 0

cVarGet:=ALLTRIM(oGet:CARGO()) // Aqui eu pego o que o usuário digitou

IF cAcesso = "SISTEMA"
IF cVarGet = cPass .OR. cVarGet = cPass1 .OR. cVarGet = cPass2
IF cVarGet = cPass1 .OR. cVarGet = cPass2
lSis:=.T.
ELSE
lSis:=.F.
ENDIF
lOk:=.T.
ELSE
ALERTA("SENHA INVÁLIDA. VERIFIQUE.",2)
lOk:=.F.
ENDIF
ELSEIF cAcesso = "USUARIO"
DBSEEK(cVarGet,.T.)
IF !FOUND()
?? CHR(7)
ALERTA("SENHA INVÁLIDA. VERIFIQUE.",2)
lOk:=.F.
ELSE
IF !Tipo $ "GS"
?? CHR(7)
ALERTA("ACESSO SÓ PARA GERENTES. USUáRIO NÃO AUTORIZADO",2)
lOk:=.F.
ELSE
F0 := 1
lOk:=.T.
ENDIF
ENDIF
ELSEIF cAcesso = "CANCELA"
DBSEEK(cVarGet,.T.)
IF !FOUND()
?? CHR(7)
ALERTA("SENHA INEXISTENTE. CHAME O GERENTE.",2)
lOk:=.F.
ELSE
IF !Tipo $ "GS"
?? CHR(7)
ALERTA("SOMENTE O GERENTE PODE CANCELAR.",2)
lOk:=.F.
ELSE
SELECT CARDTIME
DBSEEK(DTOS(dHoje)+STR(EMPLOYEE->Codigo,5),.T.)
IF !FOUND()
TONE(300,1)
TONE(100,1)
TONE(300,1)
TONE(100,1)
ALERTA("FUNCIONÁRIO NÃO BATEU O PONTO, VERIFIQUE.",2)
SELECT EMPLOYEE
lOk:=.F.
ELSE
IF EMPTY(TimeIn1)
TONE(300,1)
TONE(100,1)
TONE(300,1)
TONE(100,1)
ALERTA("FUNCIONÁRIO NÃO BATEU O PONTO, VERIFIQUE.",2)
SELECT EMPLOYEE
lOk:=.F.
ENDIF
IF !EMPTY(TimeWork)
TONE(300,1)
TONE(100,1)
TONE(300,1)
TONE(100,1)
ALERTA("FUNCIONÁRIO JÁ FECHOU O PONTO, VERIFIQUE.",2)
SELECT EMPLOYEE
lOk:=.F.
ENDIF
SELECT EMPLOYEE
IF !Tipo $ "GS"
?? CHR(7)
ALERTA("SOMENTE O GERENTE PODE CANCELAR.",2)
lOk:=.F.
ENDIF
@ nLin,nCol SAY TRANS(Nombre,"@!")
lOk:=.T.
ENDIF
ENDIF
ENDIF
ENDIF
IF !lOk
oGet:CARGO:=SPACE(nTam)
&cRead.:=SPACE(nTam)
ENDIF
RETURN lOk

clodoaldomonteiro escreveu:Alexandre!

O problema é que na hora do valid o campo de senha ainda não foi modificado para receber o seu verdadeiro conteúdo, é só depois do read que eu pude fazer isso.

O que me travou aqui foi o seguinte:
Eu não consigo visualizar a o coneúdo do comando valid, ele é colocado dentro de um codeblock, para ser usado com a função eval(), assim: eval(oget:postblock,oget), essa é a rotina que valida o get.

Queria saber se você sabe como visualizar uma variável tipo code block, ai eu poderia fazer o valid.

Só sei que eval() excuta code block.
Avatar do usuário
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

Mensagem por clodoaldomonteiro »

Também consegui hoje de madrugada, a função getpostvalidate() ficou assim:

Código: Selecionar todos

/***
*       GETPOSTVALIDATE()
*       Testa condi‡„o de n sa¡da (cl usula VALID) para um GET
*
*       NOTA: datas inv lidas s„o rejeitadas com o buffer preservado
*/
FUNC GETPOSTVALIDATE(get)
LOCAL saveUpdated,VAR_OLD
LOCAL changed, valid:= .T.
IF (get:exitstate==GE_ESCAPE)
   RETURN (.T.)
ENDI
IF (get:baddate())
   get:home()
   DATEMSG()
   SHOWSCOREBOARD()
   RETURN (.F.)
ENDI
IF (get:changed)                         // se ocorreu edi‡„o, designa o
   get:assign()                            // novo valor para a vari vel
   updated:= .T.
ENDI
get:reset()                              // reforma o buffer de edi‡„o,
                                         // cursor na posi‡„o inicial e mostra

   MREADVAR:=READVAR()  //as alterações para campo senha começam aqui
   IF get:picture<>NIL .AND. AT("@P",get:picture)>0
      VAR_OLD :=&MREADVAR  
      &Mreadvar:=MCARGO
   ENDIF

IF (get:postblock<>NIL)                  // checa condi‡„o, se especificada
   saveupdated:= updated
   SETPOS(get:row, get:col+LEN(get:buffer))// compatibiliza Summer 87
   valid:= EVAL(get:postblock, get)

   //volta o conteúdo da variável.
   IF get:picture<>NIL .AND. AT("@P",get:picture)>0 //somente para senhas
      &Mreadvar:=VAR_OLD
   ENDIF

   SETPOS(get:row, get:col)                // reseta posi‡„o de compatibilidade
   SHOWSCOREBOARD()
   get:updatebuffer()
   updated:= saveupdated
   IF (killread)
      get:exitstate:= GE_ESCAPE              // provoca sa¡da READMODAL()
      valid:= .t.
   ENDI
ENDI
RETURN (valid)
Fiz a alteração no meu getsys que é original da GAS que muito melhor que o getsys que o Daniel postou, eu garanto.

Posso mandar prá você se quiser, daí você testa e vê qual a melhor solução.
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Mensagem por asimoes »

Clodoaldo,

Quero sim.

Por favor mande para o email: asimoesluz@gmail.com

[]´s
clodoaldomonteiro escreveu:Também consegui hoje de madrugada, a função getpostvalidate() ficou assim:

Código: Selecionar todos

/***
*       GETPOSTVALIDATE()
*       Testa condi‡„o de n sa¡da (cl usula VALID) para um GET
*
*       NOTA: datas inv lidas s„o rejeitadas com o buffer preservado
*/
FUNC GETPOSTVALIDATE(get)
LOCAL saveUpdated,VAR_OLD
LOCAL changed, valid:= .T.
IF (get:exitstate==GE_ESCAPE)
   RETURN (.T.)
ENDI
IF (get:baddate())
   get:home()
   DATEMSG()
   SHOWSCOREBOARD()
   RETURN (.F.)
ENDI
IF (get:changed)                         // se ocorreu edi‡„o, designa o
   get:assign()                            // novo valor para a vari vel
   updated:= .T.
ENDI
get:reset()                              // reforma o buffer de edi‡„o,
                                         // cursor na posi‡„o inicial e mostra

   MREADVAR:=READVAR()  //as alterações para campo senha começam aqui
   IF get:picture<>NIL .AND. AT("@P",get:picture)>0
      VAR_OLD :=&MREADVAR  
      &Mreadvar:=MCARGO
   ENDIF

IF (get:postblock<>NIL)                  // checa condi‡„o, se especificada
   saveupdated:= updated
   SETPOS(get:row, get:col+LEN(get:buffer))// compatibiliza Summer 87
   valid:= EVAL(get:postblock, get)

   //volta o conteúdo da variável.
   IF get:picture<>NIL .AND. AT("@P",get:picture)>0 //somente para senhas
      &Mreadvar:=VAR_OLD
   ENDIF

   SETPOS(get:row, get:col)                // reseta posi‡„o de compatibilidade
   SHOWSCOREBOARD()
   get:updatebuffer()
   updated:= saveupdated
   IF (killread)
      get:exitstate:= GE_ESCAPE              // provoca sa¡da READMODAL()
      valid:= .t.
   ENDI
ENDI
RETURN (valid)
Fiz a alteração no meu getsys que é original da GAS que muito melhor que o getsys que o Daniel postou, eu garanto.

Posso mandar prá você se quiser, daí você testa e vê qual a melhor solução.
Responder