CFML – Parte 4 – Operadores Lógicos
Olá pessoal, chegamos à 4ª parte sobre ColdFusion ... nesta parte vamos trabalhar mais um pouco com variáveis e com operadores lógicos.
Trabalhar com operadores lógicos, significa que nós colocaremos em prática os nossos conhecimentos sobre condições para que o código seja executado da forma que desejamos.
Vamos aos exemplos. 1 – Crie um novo ficheiro chamado (P_04_operadores_01.cfm).
2 – Vamos criar um formulário neste ficheiro enviando para a página (P_04_operadores_02.cfm), para isto, use o código abaixo.
<h2>Tratamento de Erros 1</h1> <table border="1" cellpadding="3" cellspacing="0"> <form name="frm01" action="P_04_operadores_02.cfm" method="post"> <tr> <td>Nome:</td> <td><input type="text" name="txtNome" /></td> </tr> <tr> <td>Email:</td><td> <input type="text" name="txtEmail" /></td> </tr> <tr> <td>Idade:</td> <td><input type="text" name="txtIdade" /></td> </tr> <tr> <td>Endereço:</td> <td><input type="text" name="txtEndereco" /></td> </tr> <tr> <td colspan="2" align="right"><input type="submit" value="Enviar" /></td> </tr> </form> </table>
O resultado será este:
Agora crie um ficheiro chamado (P_04_operadores_02.cfm) para receber os dados do nosso formulário e coloque o código abaixo:
<h2>Dados:</h2> <cfoutput> <strong>Nome:</strong> #form.txtNome#<br/> <strong>Email:</strong>#form.txtEmail#<br/> <strong>Idade:</strong> #form.txtIdade#<br/> <strong>Endereço:</strong> #form.txtEndereco#<br/> </cfoutput>
Corra a primeira página e carregue no botão sem preencher os campos, o resultado será este:
Se este fosse um formulário de registo real, de nada adiantaria cadastrar um registo em branco. Então, a partir desta nossta 2ª página, vamos colocar algumas condições para tratar os erros (iremos colocar alguns avisos).
Novo código (irei comentar apenas a parte em negrito pois as outras são ‘repetidas’):
<h2>Dados:</h2> <cfoutput> <strong>Nome:</strong> <!--- verifica SE a variável FORM.TXTNOME está DEFINIDA e se o valor da mesma não é vazio ---> <cfif isDefined('form.txtNome') AND Len(Trim(form.txtNome))> <!--- Caso positivo, cria uma flag chamada VARIABLES.NOME e seta um valor booleano* a ela ---> <cfset variables.nome = true> <!--- mostra o conteúdo da variável no ecrã ---> #form.txtNome#<br/> <!--- senão ---> <cfelse> <!--- mostra uma mensagem de erro ---> Nome Não Informado<br/> <!--- mostra um link com um javascript de voltar 1 página no histórico ---> <a href="javascript:history.back(-1);">Voltar</a> <!--- aborta a execução do código ---> <cfabort> <!--- fecha a condição IF para esta comparação ---> </cfif> <!--- daqui para baixo a explicação de cada parte é similar, mudando apenas a variável e a mensagem de erro ---> <strong>Email:</strong> <cfif isDefined('form.txtEmail') AND Len(Trim(form.txtEmail))> <cfset variables.email = true> #form.txtEmail#<br/> <cfelse> Email Não Informado<br/> <a href="javascript:history.back(-1);">Voltar</a> <cfabort> </cfif> <strong>Idade:</strong> <cfif isDefined('form.txtIdade') AND Len(Trim(form.txtIdade))> <cfset variables.idade = true> #form.txtIdade#<br/> <cfelse> Idade Não Informada<br/> <a href="javascript:history.back(-1);">Voltar</a> <cfabort> </cfif> <strong>Endereço:</strong> <cfif isDefined('form.txtEndereco') AND Len(Trim(form.txtEndereco))> <cfset variables.endereco = true> #form.txtEndereco#<br/> <cfelse> Endereço Não Informado<br/> <a href="javascript:history.back(-1);">Voltar</a> <cfabort> </cfif>
<!--- verifica se todas as flags são true (verdadeiras), se forem mostra o botão, caso contrário não mostra nada ---> <cfif (variables.nome EQ true) AND (variables.email EQ true) AND (variables.idade EQ true) AND (variables.endereco EQ true)> <form> <input type="submit" value="Cadastrar"> </form> <!--- fecha a condição ---> </cfif> </cfoutput>
Explicação: CFIF: A tag < CFIF > serve para realizar uma comparação e significa SE (se algo acontecer...), este ALGO é justamente o que nós iremos colocar para completar a condição de verificação. No nosso exemplo, utilizamos as condições ISDEFINED, LEN e TRIM.
isDefined = Está definida, ou seja, se a variável em questão está definida. LEN = Lenght... ou seja, é o ‘comprimento’ de alguma coisa... no caso, da nossa variável.
TRIM = “Aparar”... ou seja... eliminar os espaços em branco antes e após a variável, desta forma teremos a certeza que estamos a tratar apenas com “texto” e não com espaços vazios.
A junção destas condições significa: - Se a variável ‘form.txtNome’ estiver definida e, o tamanho dela (eliminando os espaços em branco) existir (for maior diferente de vazio).
Se esta condição for verdadeira, então realize alguma coisa (mostra o valor da variável), caso contrário, faça outra coisa.
Este “caso contrário” é o nosso CFELSE (se não) onde nós mostramos uma mensagem de erro, seguindo da tag CFABORT. A tag <cfabort> nada mais é do que um comando para abortar a execução do código... NADA abaixo dela é executado.
*booleano = uma variável do tipo booleano possui somente 2 valores, verdadeiro ou falso... 0 ou 1 ... etc... mas sempre significa se algo é verdadeiro ou falso. Ao criarmos uma flag com o valor true/false ao invés de “true”/”false” estamos a definir que a nossa variável é do tipo BOOLEAN e não do tipo STRING.
Na última verificação, o sistema irá verificar se as 4 flags que criamos são true (verdadeiras), caso positivo ele irá mostrar o botão, caso contrário não fará nada.
A mesma técnica serve caso o nosso ficheiro receba variáveis de URL, SESSION, Etc... podemos verificar se a variável existe e abordar a execução do ficheiro mostrando alguma mensagem de erro.
Além das tags CFIF e CFELSE, existem também a tag CFELSEIF, que serve como um “intermediário” entre o CFIF e o CFELSE, exemplo:
Crie um ficheiro chamado mensagem.cfm este irá verificar a hora actual do sistema e emitir diferentes mensagens.
<cfoutput> <!---mete a hora (somente a hora, sem os minutos) ---> <cfset variables.hora = Hour(now())> </cfoutput>
<!--- verifica se a hora é (maior ou igual a 6) e (menor do que 12) ---> <cfif (variables.hora GTE 6) AND (variables.hora LT 12)> Bom dia! <!--- verifica se a hora é (maior ou igual a 12) e (menor que 18) ---> <cfelseif (variables.hora GTE 12) AND (variables.hora LT 18)> Boa tarde! <!--- verifica se a hora é (maior ou igual a 18) e (maior do que 0) ---> <cfelseif (variables.hora GTE 18) AND (variables.hora GT 0)> Boa noite! <!--- senão... (a única opção que sobrou foi (maior do que 0) e (menor do que 6) neste caso também poderíamos ter utilizado outro CFELSEIF com esta condição e não usar um CFELSE ---> <cfelse> Boa madrugada! </cfif>
Dêem uma olhada nos ficheiros em anexo para um melhor entendimento e para verificar a indentação do código. http://www.4shared.com/file/32728477/3cb77430/p04pplware.html
Bom.. por enquanto é só pessoal... na próxima semana iremos tratar ‘condições’ utilizando CFSWITCH e CFCASE... e um pouco sobre variáveis de SESSÃO e APLICAÇÃO.
Este artigo tem mais de um ano
Parabéns, continue assim ! Está sendo proveitoso para mim, Obrigado!