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.

15 Response to "Como capturar campos de formulários dinâmicos em PHP"

  1. Anônimo says:

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

    Anônimo says:

    Solução interessante.

    Gostei =)

    infog.casoft.info

    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.

    Anônimo says:

    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

    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.

    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.

    KRA..
    VC QUEBRO UM GALHAoOO.. RS

    OBRIGADO!!!
    VLWSS

    Dimmi says:

    Funciona, mas queria saber como enviar por email, já que o texto quando enviado fica todo atrapalhado. Alguém posta um exemplo aí, please.

    Anônimo says:

    Sobre esse tal Felipe 'chronos' Prenholato:

    A estratégia de quem SE ACHA tão grande é tentar diminuir os outros.

    Anônimo says:

    Heya i'm for the first time here. I came across this board and I find It really useful & it helped me out much. I hope to give something back and help others like you helped me.

    Also visit my web page :: What Is a graduate certificate

    Anônimo says:

    Heya i'm for the first time here. I came across this board and I find It really useful & it helped me out much. I hope to give something back and help others like you helped me.

    Also visit my web blog :: What Is a graduate certificate

    Anônimo says:

    This is my first tme pay a vieit at here and i am in fact happy to
    reead all at alone place.

    Here is my site - pest Control angel Islington London

    Anônimo says:

    Αccordіng to studies, drinking ƿlenty of water is found to be
    very beneficial to flush out toxins from body orgɑns like kidney.
    What fat loss comes down to is veгy simple, Calories in Vs.

    If you have done ѕome resеarсh by yourself аƄout Weight Loss Diet,
    and Weight Loss Recipеs in general, I am sure ɑt
    some point of your active interest tο find the гight
    proǥrаm, you started to realize a trenԁ about "Effective and Legitimate Diet Programs" aгe based
    of three components:.

    Ңave a look at my web site: ultimate herpes prоtоcol free - Collegedatingcoaches.com,

    Anônimo says:

    to Android app was actually better than Android's simple edits program.
    This not only helps to get rid of gum problems, but also helps
    to prevent future gum problems. Beautiful tooth communicate several
    messages to Health and vitality.

    my site - best tooth whitening (Onnl.snu.ac.Kr)

    Anônimo says:

    hi!,I love your writing so much! share we keep up a correspondence extra approximately your post on AOL?

    I require a specialist in this space to solve my problem.

    Maybe that's you! Taking a look ahead to peer you.


    Review my blog post; goji berry