Conheça também: Onmasters . Ofertas . Divulgue! . Vai.la . Geraboleto . Baixa.la . Assista.la . Joga.la
» Início » Desenvolvimento » Ajax » Aplicando AJAX com PHP, parte 2 - Combos e validação de formulário -->
 
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:

  1. 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'));

     
  2. 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).
     
  3. 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.
     
  4. verificaPreco recebe uma string e faz um teste se está num formato de preço aceito. Só retorna algo caso esteja inválido.
     
  5. 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.
Este artigo é a parte 2 de 2 da seguinte série:
  1. O que é AJAX e como aplicá-lo com PHP, parte 1
  2. Aplicando AJAX com PHP, parte 2 - Combos e validação de formulário