Criando variaveis dinamicamente atraves de um formulario
julho 2nd, 2008 | by DragaO~ |Olá pessoas :D
bom, hoje eu tava lah no serviço, e acabei me deparando com uma coisa : um formulario relativamente grande
o tal do fomulario tinha lah seus 20 campos, nao era grande coisa, mas eu pensei “porque ficar sempre colocando linha-apos-linha pra validar as variaveis?”
foi entao que pensei em fazer isso dinamicamente usando meus conhecimentos de PHP :D
imagine que temos um formulario com os campos “nome”, “endereço”, “telefone” e “email”, onde todos tem o mesmo “name” para o seu input, com exceçao do endereço, que o name fica “endereco”
imagine tabem que o usuario forneceu os seguintes dados :
nome = dragao
endereco = caverna
telefone = 3333-3333
email = user@domain.com
a soluçao (apos algumas perguntas à colegas e idas ao php.net) foi a seguinte :
1 2 3 4 5 6 7 | <? foreach($_POST as $var => $valor) { $aux = "\$".$var." = \"".$valor."\";"; eval($aux); } ?> |
(olhando o modo como o codigo acima saiu, me deu uma vontaaaaaaaade de fazer uma funçao em PHP que faça com que fique tudo coloridinho, identado, e nas normas ….XD)
explicando :
foreach($_POST as $var => $valor)
lembra do nosso “formulario” ? pois bem, essa linha vai percorrer todo o nosso array “$_POST” (independente de qual seja o tamanho/comprimento dele), fazendo com que o valor da chave atual (nome, endereco, etc) seja “copiado” para a variavel “$var” e que, o conteudo, ou seja, o valor da variavel analisada, seja “copiada” para a variavel “$valor”
$aux = "\$".$var." = \"".$valor."\";";
aqui simplesmente estamos criando uma variavel auxiliar, e atribuindo uma string à ela
mas perae, o conteudo dessa variavel eh um comando PHP valido
isso ;)
perceba que, na primeira “passagem” do foreach, vamos atribuir a seguinte string :
$nome = "dragao";
na segunda “passagem” atribuiriamos
$endereco = "caverna";
e assim por diante; o que interessa vem agora :D
eval($aux);
aqui tah o “truque” =o
a funçao “eval()” faz com que a string recebida por parametro seja executada como um comando PHP “normal” (claro que essa string nao pode ter erros, se nao vai dar erro no script xD)
entao, a cada “passagem”, estamos criando uma variavel com o nome do campo e atribuindo à ela o valor que o usuario digitou, simples nao ?
tah, mas e pra que isso pode ser util ?
tu vai descobrir isso quando tu tiver que validar um formulario de 180 campos (eu jah fiz =O), e todos eles da mesma maneira :D
poderiamos implementar varias coisas com isso, uma delas, como por exemplo, armazenar todos esses campos e gerar uma consulta SQL com eles, fazendo outros foreach’s para a criaçao da consulta :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | <? //nosso codigo que jah agora sabemos o que faz :D foreach($_POST as $var => $valor) { $aux = "\$".$var." = \"".$valor."\";"; eval($aux); //opa, uma linha "a mais" aqui ;) //essa linha apenas armazena todos os campos em um vetor // qualquer $campos[] = $var; } //outras validacoes que nao importam agora... //gerando a consulta SQL dinamicamente $query = "INSERT INTO tabela "; $query .= "("; foreach($campo as $c) { $query .= $c.", "; } //retirando a virgula adicional do final da query $query = substr($query, 0, strlen($query) - 2); //terminando a primeira parte da query e iniciando a parte de seus valores $query .= " ) VALUES ( "; //colocando os valores em seus devidos lugares //sim, eh o mesmo laco... foreach($campos as $c) { //...mas que faz uma coisa diferente :D //a linha abaixo "pega" o valor contido nas variaveis, //simplesmente "chamando-a" atraves de uma criacao dinamica //de variaveis lembra qual o conteudo do nosso array "campos"? //o que acontece se colocarmos um "$" na frente de todos //os valores do array? :D $query .= "'".$$c."', "; } //retirando a virgula adicional e terminando a string $query = substr($query, 0, strlen($query) - 2); $query .= ")"; //caso queiram ver o que aconteceu, basta dar um echo na variavel //e ver a consulta gerada ;) if(mysql_query($query, $conexao)) { echo "cadastro efetuado"; } else { echo "falha ao cadastrar"; } ?> |
bom, acho que pra inicio de blog eras isso :D
bom proveito, e nao esqueçam de comentar e/ou reportar erros ;)
(sim, eu escrevo de cabeça sem testar nada :D)
7 Responses to “Criando variaveis dinamicamente atraves de um formulario”
By Guitarrista Kurumin on jul 16, 2008 | Reply
Muito interessante a diga caro DragaO~. Vc tem uma didática muito boa, eu já havia percebido isso no fórum.
Uma coisa legal a fazer nesse do sql seria tbm checar se o campo está branco e só incluir ele no sql se não tiver, assim se ele não tiver preenchido nem mesmo entra no sql. (mas eu acho que a diferênca de perfomace vai ser imperceptível.
Quote
By DragaO~ on jul 16, 2008 | Reply
fórum.
obrigado :D
fico feliz com o elgio ^^ (e com mais vontade de fazer um tutorial de (X)HTML + PHP + MySQL + Segurança
:D)
tiver, assim se ele não tiver preenchido nem mesmo entra no sql. (mas eu acho que a diferênca de perfomace
vai ser imperceptível.
hm…
sinceramente nao sei qual seria o “impacto” dessa verificaçao no sentido de “agilidade”, mas pro programador
iria complicar um pouquinho, pois tu teria que armazenar o que tu adicionou na query, pra nao colocar “valores
a mais” nela (na query), nada que manipular arrays nao resolva, mas ainda assim acho que seria desnecessario
:D.jpg)
(mas se alguem quiser eu posto um codigo que faça isso :D)
e realmente fiquei curioso quanto à isso
se um dia eu tiver paciencia (e pensar em como fazer isso XD), eu faço e posto aqui no blog (e no forum) ^^
flw xD/
Quote
By Marcio Vinicius Brandão on out 2, 2008 | Reply
Cara, que código lindo..
me veio um estalo na cabeça a alguns minutos, pra fazer exatamente isso… daih google vai google vem eu cai aqui no seu blog…
Eu não sabia sobre essa função void() com certeza me veio um milhão de idéias depois dela.
Só me falta agora incluir isso tudo no mysql dinamicamente xD
mas agora ta facil..
E parabéns pela função.. foi feita como deve ser.. simples e funcional!
Abraço
Quote
By DragaO~ on out 5, 2008 | Reply
serio, quase me emocionei XD
HAUSehUASHEuASHEuHASEhuAHSUEHUSAHe
pow, brigado mesmo XD
Eu não sabia sobre essa função void() com certeza me veio um milhão de idéias depois dela.
Só me falta agora incluir isso tudo no mysql dinamicamente xD
mas agora ta facil..
E parabéns pela função.. foi feita como deve ser.. simples e funcional!
Abraço
estamos ae pra isso ;D
obrigado pelo comentario, e bom proveito do codigo ^^
flw xD/
Quote
By César on jan 30, 2009 | Reply
Brother um jeito simples de verificar se a variavel esta vazia antes de executar a consulta e com a função empty() . Ou talvez em vez de verificar se esta vazia, verificar o tamanho da string, com a função strlen(), ai vc pode comparar com um valor razoavel que acha que tem uma string de consulta sql. =\
abraço
Quote
By DragaO~ on fev 3, 2009 | Reply
muito bem lembrado César ;)
caso seja necessária a verificação da variável não-vazia, a função “empty()” ou “strlen()” poderiam ser colocadas, por exemplo, dentro do “foreach”,e apenas adicionar os campos caso eles não sejam vazios, assim :
referência das funções :
“empty()“, “strlen()”
obrigado pelo comentário, espero que continue visitando o blog :)
Quote