FormConstructor: Formulário Construído por Variável
Publicado por EVERTON DA ROSA 26/02/2007
[ Hits: 6.708 ]
Homepage: http://everton3x.github.io
Este script PHP contém uma função que constrói um formulário com base em informações passadas em uma variável. É um pouco complexo para montar a variável, mas é só seguir a existente no modelo. Depois ele monta o formulário.
Muito interessante para quem utiliza muitos formulários e deseja ou faz freqüentes mudanças de formatação e layout. Nesse caso, é só modificar a formatação direto na função.
Página forms.php que armazena as variáveis:
<?
$form1=array( //Contém a tag form
"title"=>"Título do formulário",
"name"=>"f_input.php",
"action"=>"acao.php",
"method"=>"get",
"fieldsets"=>array( //Contém as tags fieldset
array(//fieldset 1
"title"=>"Fieldset 1",
"id"=>"fieldset1",
"elements"=>array( //Array contendo os elementos do fieldset
array(
"field"=>"input",//contém o tipo de campo
"label"=>"Campo 1", //contém a legenda que vai pertencer ao campo
"name"=>"campo1",
"type"=>"text",
"value"=>"Texto do campo",
"size"=>"50"
),//fim campo1
array(
"field"=>"input",
"label"=>"Campo 2",
"name"=>"campo2",
"type"=>"password",
"value"=>"Texto do campo",
"size"=>"50"
),//fim campo2
array(
"field"=>"input",
"type"=>"checkbox",
"label"=>"Campo 3",
"name"=>"campo3",
"value"=>"3"
),//fim campo3
array(
"field"=>"input",
"type"=>"checkbox",
"label"=>"Campo 4",
"name"=>"campo4",
"value"=>"4",
"checked"=>"true"
),//fim campo4
array(
"field"=>"textarea",
"label"=>"Campo 5",
"name"=>"campo5",
"cols"=>"40",
"rows"=>"10",
"value"=>"Conteúdo do campo 5"
),//fim campo 5
array(
"field"=>"select",
"label"=>"Campo 6",
"name"=>"campo6",
"options"=>array(//array contendo as opções no formato value,selected,rótulo, separados por ponto-e-vírgula. Para as opões não selecionadas, coloque um espaçoem branco entre os ponto-e-vírgula
"0; ;Zero",
"1;selected;Um",
"2; ;Dois",
"3; ;Três"
)//fim array options
)//fim campo6
)//fim array elements
),//fim do fieldset1
array(//fieldset 1
"title"=>"Fieldset 2",
"id"=>"fieldset2",
"elements"=>array( //Array contendo os elementos do fieldset
array(
"field"=>"input",//contém o tipo de campo
"label"=>"Campo 1", //contém a legenda que vai pertencer ao campo
"name"=>"campo1",
"type"=>"text",
"value"=>"Texto do campo",
"size"=>"50"
),//fim campo1
array(
"field"=>"input",
"label"=>"Campo 2",
"name"=>"campo2",
"type"=>"password",
"value"=>"Texto do campo",
"size"=>"50"
),//fim campo2
array(
"field"=>"input",
"type"=>"checkbox",
"label"=>"Campo 3",
"name"=>"campo3",
"value"=>"3"
),//fim campo3
array(
"field"=>"input",
"type"=>"checkbox",
"label"=>"Campo 4",
"name"=>"campo4",
"value"=>"4",
"checked"=>"true"
),//fim campo4
array(
"field"=>"textarea",
"label"=>"Campo 5",
"name"=>"campo5",
"cols"=>"40",
"rows"=>"10",
"value"=>"Conteúdo do campo 5"
),//fim campo 5
array(
"field"=>"select",
"label"=>"Campo 6",
"name"=>"campo6",
"options"=>array(//array contendo as opções no formato value,selected,rótulo, separados por ponto-e-vírgula. Para as opões não selecionadas, coloque um espaçoem branco entre os ponto-e-vírgula
"0; ;Zero",
"1;selected;Um",
"2; ;Dois",
"3; ;Três"
)//fim array options
)//fim campo6
)//fim array elements
)//fim do fieldset2
)//fim array fieldsets
)// fim array form1;
?>
Página pagina.php, que contém as funções para montar o formulário:
<? include('forms.php');
function fieldConstructor($fields){
while(list($n,$tag)=each($fields)){
$type=$tag[field];
$campos.='<label for="'.$tag[name].'">'.$tag[label].': </label>';
if($type=='textarea'){
$campos.="<$type ";
while(list($prop,$value)=each($tag)){
if($prop!="field" && $prop!="value"){
$campos.=$prop.'="'.$value.'" ';
}else{}
}
$campos.='>'.$tag[value].'</textarea><br>';
}elseif($type=='select'){
$options=$tag[options];
$campos.="<$type ";
while(list($prop,$value)=each($tag)){
if($prop!="field" && $prop!="options"){
$campos.=$prop.'="'.$value.'" ';
}else{}
}
$campos.=">";
while(list($nn,$o)=each($options)){
$oo=explode(';',$o);
$value=$oo[0];
$selected=$oo[1];
$label=$oo[2];
$campos.='<option value="'.$value.'" '.$selected.'>'.$label.'</option>';
}
$campos.='</select><br>';
}else{
$campos.="<$type ";
while(list($prop,$value)=each($tag)){
if($prop!="field"){
$campos.=$prop.'="'.$value.'" ';
}
}
$campos.="><br>";
}
}
return $campos;
}
function formConstructor($form){
//Monta o cabeçalho da página/formulário
$f_title=$form[title];
$print="<h1>$f_title</h1><hr>";
//Monta a tag form
$print.="<form ";
while(list($key,$val)=each($form)){
if($key!="fieldsets"){
$print.=$key.'="'.$val.'" ';
}else{}
}
$print.='>';
//Monta os fieldsets
$fieldsets=$form[fieldsets];
while(list($k,$atual)=each($fieldsets)){
$print.='<fieldset ';
while(list($key,$val)=each($atual)){
if($key!="elements"){
$print.=$key.'="'.$val.'" ';
}else{}
}
$print.='>';
$print.="<legend>".$atual[title]."</legend>";
$print.=fieldConstructor($atual[elements]);//Insere os campos
$print.='</fieldset>';
}
//Fecha o formulário e imprime a página
$print.='<input name="voltar" type="button" onClick="javascript:history.back();" value="Voltar"><input name="limpar" type="reset" value="Limpar"><input name="enviar" type="submit" value="Enviar">';
$print.='</form>';
echo $print;
}
formConstructor($form1);
?>
Previsão do tempo para Porto Alegre/RS
Nenhum comentário foi encontrado.
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Novos apps de produtividade, avanços em IA e distros em ebulição agitam o universo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
dpkg: erro: gatilho de arquivo duplicado chamado pelo arquivo de nome (6)
Instalação não está resolvendo as dependencias (2)
Captação de áudio no zorin linux começa a diminuir com o tempo (5)
Alternativas ao Multilogin para gerenciamento de múltiplas contas/prof... (0)









