tocho 0 Denunciar post Postado Abril 9, 2009 Estou fazendo alguns códigos que vão ser padrões para meu desenvolvimento, por exemplo: Uma Classe para conexão, paginação, imagem, etc..etc.. Embora num futuro próximo eu queira usar um framework, quero primeiramente me familiarizar bem com o PHP e sua sintaxe, além é claro de ter uma boa base em OOP. No código abaixo eu vou tentar explicar como estou fazendo minha validação: $validacao = array( //CAMPOS A SEREM VALIDADOS 'login' => true, 'senha' => true, ); if (empty($_POST['login'])) { $validation['login'] = false; } elseif (empty($_POST['senha'])) { $validation['login'] = false; } else { //PASSOU POR TODAS AS VALIDAÇÕES $login = New Login($_POST['login'], $_POST['senha']); $login->Redireciona(); } // ISSO AQUI É LIXO, PENSE...PENSE...PENSE function verificaValidacao($validacao) { // SE ALGUM CAMPO ESTIVER ERRO, RETORNA FALSO foreach ( $validacao as $i ) { if ( $i == false ) { return false; } } return true; } <html> <head></head> <body> <?php if (verificaValidacao($validacao) == false): // SE EXISTIR VALIDACAO ?> <div id="msg_erro"> <?php if ($validacao['login'] == false) { echo "<p>- É preciso preencher login.</p>"; } ?> ... ... </div> <?php endif; ?> </body> </html> Acho que vocês conseguem entender, espero eu..rsrsr, o código, minha idéia foi controlar as validações em cima, e só jogar as mensagens de erro dentro do <body>, mas isso ficou muito ruim, de péssima qualidade. Eu to pensando numa classe para fazer as validações, sei lá, algo mais limpo e simples. Adorei o modo que o RAILS fez, alguém tem alguma idéia interessante de validações com PHP e OOP? Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Abril 10, 2009 é por aí... comece automatizando os processos do HTTP_REQUEST crie uma classe para extrair os dados, de uma forma que não precise mexer mais ou fazer gambiarras um exemplo simples. <?php class Request { function Extract( $method = false, $parameter = false ) { if( isset( $_SERVER['REQUEST_METHOD'] ) ) { if( $method != 'FILES' ) { $mthd = '_' . strtoupper( $_SERVER['REQUEST_METHOD'] ); if( $method and '_' . strtoupper( $method ) != $mthd ) { return false; } }else{ $mthd = '_' . $method; } global $$mthd; $dt = $$mthd; if( is_array( $dt ) and count( $dt ) > 0 ) { if( $parameter ) { if( isset( $dt[$parameter] ) ) { return $dt[$parameter]; } }else{ return $dt; } } } return false; } } /* exemplos de uso: // exemplo 1 // resgatando todos os dados recebidos via método POST $data = new Request::Extract( 'POST' ); // exemplo 2 // resgatando todos os dados recebidos via método GET $data = new Request::Extract( 'GET' ); // exemplo 3 // resgatando um único parâmetro recebido via método POST $data = new Request::Extract( 'POST', 'foo' ); // exemplo 4 // resgatando um único parâmetro recebido via método GET $data = new Request::Extract( 'GET', 'foo' ); // exemplo 5 //se $data retornar FALSE, significa que não recebeu nada. if( $data = new Request::Extract( 'POST' ) ) { // recebeu algo }else{ // não recebeu nada } */ ?> Compartilhar este post Link para o post Compartilhar em outros sites
Henrique Barcelos 290 Denunciar post Postado Abril 10, 2009 o que seria esse duplo cifrão antes da variável? nunk usei e faz um tempinho que uso POO, não tenho mta pratica pq meu chefe não quer que a gnt use no projeto, o pq ele nunk falou... to tentando brinca com isso sozinho xD... Compartilhar este post Link para o post Compartilhar em outros sites
~TiuTalk~ 7 Denunciar post Postado Abril 10, 2009 Isso são variaveis variáveis... $nome = 'thiago'; $$nome = 'aluno'; Com isso eu crio uma variável chamada $thiago contendo o valor aluno Compartilhar este post Link para o post Compartilhar em outros sites
Henrique Barcelos 290 Denunciar post Postado Abril 10, 2009 hmmm.. interessante isso aí... to tentando achar uma aplicação prática pra isso... jaja eu acho xD... Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Abril 11, 2009 a idéia desse script acima, é economizar essas chamadas: if(empty($_POST['login'])) {ou if(empty($_GET['login'])) { ou quando há situações em que pode chamar pelos dois métodos GET e POST if( isset($_REQUEST['login']) ){ autiomatiza também a extração para todos os parâmetros recebidos chamando o método apenas uma vez, armazenando tudo num array, pois afinal, a superglobal "REQUEST" é um array a validação pode ser feita a partir de um conjunto unico de regra estrutural exemplo. preparando conjunto de regras: <?php class ModuleHome extends Controller { function Form( ) { return array( 'foo' => array( label => 'Nome', type => 'text', size => 25, maxLength => 20, minLength => 3, required => true, validation => 'varchar', ), 'email' => array( label => 'E-mail', type => 'text', size => 50, maxLength => 120, minLength => 6, required => true, validation => 'email', ), ); //return null; } } ?> Compartilhar este post Link para o post Compartilhar em outros sites
tocho 0 Denunciar post Postado Abril 14, 2009 a idéia desse script acima, é economizar essas chamadas: if(empty($_POST['login'])) {ou if(empty($_GET['login'])) { ou quando há situações em que pode chamar pelos dois métodos GET e POST if( isset($_REQUEST['login']) ){ autiomatiza também a extração para todos os parâmetros recebidos chamando o método apenas uma vez, armazenando tudo num array, pois afinal, a superglobal "REQUEST" é um array a validação pode ser feita a partir de um conjunto unico de regra estrutural exemplo. preparando conjunto de regras: <?php class ModuleHome extends Controller { function Form( ) { return array( 'foo' => array( label => 'Nome', type => 'text', size => 25, maxLength => 20, minLength => 3, required => true, validation => 'varchar', ), 'email' => array( label => 'E-mail', type => 'text', size => 50, maxLength => 120, minLength => 6, required => true, validation => 'email', ), ); //return null; } } ?> Estava em viagem e não pude olhar a resposta. O pessoal aqui está em alto nível hein !!! Essa classe com os conjuntos de regras, poderiam no caso "EXTENDS" a classe REQUEST? Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Abril 14, 2009 Para pegar todos os campos automaticamente e ainda por cima se precisar você pode aplicar algum função ou fazer uma validação exemplo: foreach ($_POST as $key => $value){$$key = addslashes(trim($value));} nesse exemplo apenas peguei os campos vindos do formulario e apliquei as funções addslashes e trim mas nada impede nesse loop ja fazer uma validação, por exemplo se o campo tiver vazio ele ja retornar false e pedir para o usuario digitar aquele campo outra função relacionadas import_request_variables http://br.php.net/manual/pt_BR/function.im...t-variables.php extract http://br.php.net/manual/pt_BR/function.extract.php e com framework fica mais facil ainda = ) Compartilhar este post Link para o post Compartilhar em outros sites
tocho 0 Denunciar post Postado Abril 14, 2009 Para pegar todos os campos automaticamente e ainda por cima se precisar você pode aplicar algum função ou fazer uma validação exemplo: foreach ($_POST as $key => $value){$$key = addslashes(trim($value));} nesse exemplo apenas peguei os campos vindos do formulario e apliquei as funções addslashes e trim mas nada impede nesse loop ja fazer uma validação, por exemplo se o campo tiver vazio ele ja retornar false e pedir para o usuario digitar aquele campo outra função relacionadas import_request_variables http://br.php.net/manual/pt_BR/function.im...t-variables.php extract http://br.php.net/manual/pt_BR/function.extract.php e com framework fica mais facil ainda = ) Como eu uso PDO para salvar os dados, não iria precisar da função addslashes certo? Minha maior dúvida é como fazer as duas classes desse post conversarem entre si, Request e ModuleHome. Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Abril 14, 2009 Minha maior dúvida é como fazer as duas classes desse post conversarem entre si, Request e ModuleHome ModuleHome está herdando de "controller" na classe Controller, inicialize as instanciações coloque um autoload, para carregar librarys somente no momento que chamá-las class Controller{ function __autoload( $class_name ) { require_once LIB_DIR . $class_name . FILE_EXTENSION; } } LIB_DIR e FILE_EXTENSION são constantes, defina as contantes em outro arquivo, "config.php", por exemplo pode aproveitar o Controller também para declarar os métodos "GETTERS & SETTERS" para chamar request $rs = new Request; $form = $rs -> Extract(); $form receberá todos os dados de REQUEST, não importa se for via GET ou POST se quiser, pode especificar, somente POST $rs = new Request; $form = $rs -> Extract( 'POST' ); um parâmetro específico via POST $rs = new Request; $form = $rs -> Extract( 'POST', 'foo' ); um parâmetro específico via POST ou GET $rs = new Request; $form = $rs -> Extract( false, 'foo' ); isso serve apenas para obter os dados de request para a parte de filtragem e aplicação de regras para os dados, crie uma classe chamada .. "form" exemplo class Form { // bla bla bla function validation( $data ) { // aqui faz os tratamentos foreach( $data as $k => $v ) { // verfica o tipo de validação (definido dentro do método "Form()" do Módulo ) switch( $v['validation'] ) { case 'varchar': // 1. quantidade mínima de caracteres // 2. quantidade máxima de caracteres break; case 'email': // 2. verifica se a string possui formato de email válido break; } } } } em ModuleHome, adicione um método chamado "Prepare" class ModuleHome extends Controller { function Form() { // bla bla ... } function Prepare() { // aqui faz chamada para abstrair, validar os dados, executar funções, banco de dados, etc.. $frm = new Form; $frm -> Validation( $this -> Form() ); } } obs: está bagunçado a explicação, pois começamos já no miolo do aplicativo não sei se você está conseguindo captar o ideal é começar criando sua estrutura de diretórios e fazer definição das constantes e chamadas de métodos e classes. dê uma olhada nos frameworks pequenos, pois se pegar os maiores ficará confuso pra entender. Compartilhar este post Link para o post Compartilhar em outros sites
tocho 0 Denunciar post Postado Abril 17, 2009 Minha maior dúvida é como fazer as duas classes desse post conversarem entre si, Request e ModuleHome ModuleHome está herdando de "controller" na classe Controller, inicialize as instanciações coloque um autoload, para carregar librarys somente no momento que chamá-las class Controller{ function __autoload( $class_name ) { require_once LIB_DIR . $class_name . FILE_EXTENSION; } } LIB_DIR e FILE_EXTENSION são constantes, defina as contantes em outro arquivo, "config.php", por exemplo pode aproveitar o Controller também para declarar os métodos "GETTERS & SETTERS" para chamar request $rs = new Request; $form = $rs -> Extract(); $form receberá todos os dados de REQUEST, não importa se for via GET ou POST se quiser, pode especificar, somente POST $rs = new Request; $form = $rs -> Extract( 'POST' ); um parâmetro específico via POST $rs = new Request; $form = $rs -> Extract( 'POST', 'foo' ); um parâmetro específico via POST ou GET $rs = new Request; $form = $rs -> Extract( false, 'foo' ); isso serve apenas para obter os dados de request para a parte de filtragem e aplicação de regras para os dados, crie uma classe chamada .. "form" exemplo class Form { // bla bla bla function validation( $data ) { // aqui faz os tratamentos foreach( $data as $k => $v ) { // verfica o tipo de validação (definido dentro do método "Form()" do Módulo ) switch( $v['validation'] ) { case 'varchar': // 1. quantidade mínima de caracteres // 2. quantidade máxima de caracteres break; case 'email': // 2. verifica se a string possui formato de email válido break; } } } } em ModuleHome, adicione um método chamado "Prepare" class ModuleHome extends Controller { function Form() { // bla bla ... } function Prepare() { // aqui faz chamada para abstrair, validar os dados, executar funções, banco de dados, etc.. $frm = new Form; $frm -> Validation( $this -> Form() ); } } obs: está bagunçado a explicação, pois começamos já no miolo do aplicativo não sei se você está conseguindo captar o ideal é começar criando sua estrutura de diretórios e fazer definição das constantes e chamadas de métodos e classes. dê uma olhada nos frameworks pequenos, pois se pegar os maiores ficará confuso pra entender. É, está um pouco confuso mesmo, vou tentar olhar alguns frameworks, embora ainda não queira usá-los, mas é muito fascinante isso. Vlw Compartilhar este post Link para o post Compartilhar em outros sites