Como capturar campos de formulários dinâmicos em PHP
Ontem (30/01) eu estava num dilêma: tenho um grande formulário que é gerado dinamicamente, como vou capturá-lo?
Em formulários fixos, a coisa é fácil porque é só especificar em uma variável o nome do campo, por exemplo:
$campo = $_POST['campo'];
Mas, quando a coisa é gerada dinamicamente, os nomes também são gerados dinamicamente, então como capturá-los?
Eis que pedindo a ajuda do pessoal do grupo PHPFORTALEZA, consegui a solução.
Duas pessoas me responderam com duas dicas diferentes que simplesmente: CASARAM com o que eu precisava, então bastou unir o jôio, com o trigo.
Primeira dica:
Se seu formulário for gerado dinâmicamente, crie os nomes dos campos em forma de arrays, exemplo:
<input type="textfield" name="campo[nome]">
<input type="textfield" name="campo[idade]">
Agora crie o arquivo que para onde o seu formulário será submetido:
$dados = $_POST['campo']; // captura todos os campos em um array
Pronto, você já tem todos os dados em apenas um array, quer testar?
echo $dados['nome'];
echo $dados['idade'];
Ou que tal fazer um foreach e ler todos os valores de todos os campos de uma vez?
$keys = array_keys($dados); // retorna as chaves do array $dados no array $keys
foreach($keys as $k) {
echo $dados[$k];
}
Como se pode ver, de uma maneira simples, você resolve um "problemão". Muito obrigado a aos membros do PHPFORTALEZA.
Já trabalhei com campos dinâmicos mas fiz algo bem mais simples:
//recebe TODOS os campos enviados por post
$campos = $_POST;
//obtém as chaves e navega pelos campos
foreach ($campos as $chave => $valor) {
echo "$chave => $valor\n";
}
Paulo Diovani disse...
1 de Fevereiro de 2008 09:26
Solução interessante.
Gostei =)
infog.casoft.info
InFog disse...
1 de Fevereiro de 2008 09:31
er ... poxa meu caro, quando vi no BR-Linux achei que fosse algo realmente interessante. Sua intenção foi boa, mas a solução é extremamente básica.
Vamos add um pouco de conteúdo.
Usando um esquema de formulários dinâmicos, que coloque além do campo, um segundo campo hidden, definindo o tipo do campo em um outro, tu é capaz de fazer também validação automática. Um código extremamente simpls para teres idéia:
< input type='text' name='campos[nome]'>
< input type='hidden' name='tipo[nome]' value='text'>
< input type='text' name='campos[cnpj]'>
< input type='hidden' name='tipo[cnpj]' value='cnpj'>
quando tu chegar na página action do form:
foreach($_POST['campos'] as $fname => $fvalue) {
validField($fname,$fvalue,$_POST['tipo'][$fname]);
}
Nesta função vc chama uma outra para cada tipo de campo, em um esquema de switch, validando, e é claro, validando se está em branco primeiro. Também da pra validar se o campo é obrigatório, mas ai já tendo alguma coisa tipo base de dados, etc.
é uma boa base para um artigo, mas não coisas básicas meu caro.
Felipe 'chronos' Prenholato disse...
2 de Fevereiro de 2008 03:39
Olá.
Esse é o conceito que utilizamos no NeverForms ( http://www.ipontus.com.br/neverforms/ ). O projeto está desatualizado mas pode te ajudar a encurtar caminho se trabalhar com formulários dinâmicos.
Abraço.
Wladimir Camargo
wladimir.at.ipontus.com.br
Anônimo disse...
2 de Fevereiro de 2008 05:35
Chronos, é né 'meu caro', não se pode agradar a todos. Se você estava atrás de soluções miraculosas, etc. Esse não é o objetivo deste blog. Que além de alguns artigos pequenos e reviews, dá soluções simples, para coisas simples.
Aposto como esse artigo ajudou mais gente do que 'atrapalhou'. Meu caro.
Ramon Gadelha disse...
2 de Fevereiro de 2008 13:32
achei que fosse algo realmente melhor sim, afinal, foi parar no Br-Linux não é.
Deverias mandar para algum lugar mais direcionado a soluções PHP, do que um blog que definitivamente não é sobre programação, ou no minímo apresentar um artigo melhorado.
Vou começar a postar artigos de algo como '5 maneiras de matar processos via bash' pro br-linux, assim ganho também algumas visitas, e criticas como a que lhe fiz, pro meu blog.
Felipe 'chronos' Prenholato disse...
5 de Fevereiro de 2008 15:04
Hello. This post is likeable, and your blog is very interesting, congratulations :-). I will add in my blogroll =). If possible gives a last there on my blog, it is about the Computador, I hope you enjoy. The address is http://computador-brasil.blogspot.com. A hug.
Computadores disse...
9 de Abril de 2008 20:10
Hello. This post is likeable, and your blog is very interesting, congratulations :-). I will add in my blogroll =). If possible gives a last there on my blog, it is about the Fragmentadora de Papel, I hope you enjoy. The address is http://fragmentadora-de-papel.blogspot.com. A hug.
Fragmentadora de Papel disse...
9 de Abril de 2008 20:10
KRA..
VC QUEBRO UM GALHAoOO.. RS
OBRIGADO!!!
VLWSS
TarcioFranco disse...
12 de Junho de 2009 06:30