Google
 

Quarta-feira, 30 de Janeiro de 2008

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.

9 comentários:

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";
}

1 de Fevereiro de 2008 09:26  

Solução interessante.

Gostei =)

infog.casoft.info

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.

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

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.

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.

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.

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.

9 de Abril de 2008 20:10  

KRA..
VC QUEBRO UM GALHAoOO.. RS

OBRIGADO!!!
VLWSS

12 de Junho de 2009 06:30  

Postagem mais recente Postagem mais antiga Início