| |
Avaliação: Não avaliado | Publicado em: 18/10/2007
Aplicando AJAX com PHP, parte 2 - Combos e validação de formulário
3. Funções PHP de validação Agora veremos o código PHP que valida os dados enviados pelo JavaScript. É importante ver primeiro o PHP, pois o JavaScript faz chamadas a essas funções. Mais especificamente a CPAINT (calma, calma, o validacao.js virá a seguir :). Segue validaFormulario.php:
<?php
// Banco de dados, cpaint, selectbox require 'utils.php';
// Instancia Cpaint $CPaint = new cpaint();
// Registra funções $CPaint->register(array('validaFormulario', 'verificaEmail')); $CPaint->register(array('validaFormulario', 'obtemModelos')); $CPaint->register(array('validaFormulario', 'verificaPreco'));
// Inicia Cpaint e retorno de dados $CPaint->start('ISO-8859-1'); $CPaint->return_data();
class validaFormulario { function verificaEmail($Email) { // Primeiro verifica se está em formato válido if(preg_match ('/^[a-z0-9.-_+]+@[a-z0-9-_]+.([a-z0-9-_]+.)*?[a-z]+$/is', $Email)) { // E-mail ok, verifica se ele já está cadastrado $SQL = 'SELECT email FROM c_classificados WHERE email = '' . $Email . '''; $resId = mysql_query($SQL); // E-mail encontrado if(mysql_num_rows($resId)) validaFormulario::EnviaValor ('Só é permitido um classificado por e-mail!'); } // E-mail inválido else validaFormulario::EnviaValor ('E-mail em formato inválido!'); }
function obtemModelos($fabricanteId) { $SQL = 'SELECT id, modelo FROM c_modelos WHERE fabricante_id = ' . $fabricanteId . ' ORDER BY modelo ASC'; $resId = mysql_query($SQL);
// Tem modelos para a fabricante escolhida if(mysql_num_rows($resId)) { // Mesmo esquema da criação do selectbox de // fabricantes // em formulario.php $Modelos = array('Selecione');
while($dados = mysql_fetch_array($resId)) $Modelos[$dados['id']] = $dados['modelo'];
$selectModelos = SelectBox($Modelos, 'modelo');
// Envia o select para o Javascript validaFormulario::EnviaValor($selectModelos); } // Sem modelos else validaFormulario::EnviaValor('N'); }
function verificaPreco($Preco) { // Verifica se está em formato válido if(!preg_match('/^([0-9]+)(.[0-9]{1,2})?$/', $Preco)) { validaFormulario::EnviaValor ('Preço em formato inválido! Insira ponto em caso de casa decimal e até duas casas decimais. Não utilize vírgula. Exemplos de preços válidos: 123.2, 45000, 455.35, etc.'); } }
/** * Essa função retorna um valor para o CPAINT que por sua * vez retornará para a página */ function EnviaValor($Total) { global $CPaint; $CPaint->set_data($Total); } }
?> Dissecando validaFormulario.php: - O arquivo possui exatamente a mesma lógica, estrutura e explicação do ajaxCalculadora.php (aquela simples calculadora do artigo parte 1). Logo eu não explicarei a lógica, e sim, o que cada função faz. Somente devo destacar que você sempre deve registrar as funções a ser usadas pelo JS + PHP, como na calculadora registrou as funções Somar, etc, aqui eu registro:
// Registra funções $CPaint->register(array('validaFormulario', 'verificaEmail')); $CPaint->register(array('validaFormulario', 'obtemModelos')); $CPaint->register(array('validaFormulario', 'verificaPreco')); - verificaEmail recebe uma string, e faz um teste em expressão regular. Caso aprovado, é um e-mail válido. Em seguida, verifica se há algum classificado com esse e-mail, caso positivo, envia uma mensagem para a CPAINT. No caso de e-mail inválido, também envia uma mensagem à CPAINT. (seguindo o mesmo mecanismo da calculadora).
- obtemModelos recebe um id de fabricante, obtido pela seleção do combo de Fabricantes. Caso tenha modelos para esse fabricante, cria um combo com os modelos (seguindo o mesmo mecanismo da criação do combo dentro de formulario.php). Caso não tenha modelo para esse fabricante, retorna N, que será tratado em validacao.js.
- verificaPreco recebe uma string e faz um teste se está num formato de preço aceito. Só retorna algo caso esteja inválido.
- Veja que o funcionamento é o mesmo da simplíssima calculadora da parte 1, somente com funções fazendo tratamentos e operações diferentes. E como sempre, o retorno para o JavaScript, utilizando o CPAINT, é feito com a função set_data, que no caso aqui e como na calculadora, eu encapsulo na função EnviaValor.
|
|