<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Quenerapú &#187; label</title>
	<atom:link href="http://quenerapu.com/etiquetas/label/feed/" rel="self" type="application/rss+xml" />
	<link>http://quenerapu.com</link>
	<description>Sentado delante de un ordenador desde 1982. ¿De qué voy a hablar, si no?</description>
	<lastBuildDate>Thu, 19 Jan 2012 13:02:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Construir formularios (casi) automáticamente con PHP</title>
		<link>http://quenerapu.com/php/construir-formularios-casi-automaticamente-con-php/</link>
		<comments>http://quenerapu.com/php/construir-formularios-casi-automaticamente-con-php/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 09:49:22 +0000</pubDate>
		<dc:creator>Quenerapú</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[arrays]]></category>
		<category><![CDATA[función]]></category>
		<category><![CDATA[input]]></category>
		<category><![CDATA[label]]></category>
		<category><![CDATA[select]]></category>
		<category><![CDATA[textarea]]></category>

		<guid isPermaLink="false">http://quenerapu.com/?p=129</guid>
		<description><![CDATA[Una función sencilla (y fácilmente escalable) para construir formularios html con php, basándose en simples arrays.]]></description>
			<content:encoded><![CDATA[<p>Construir formularios <strong>html</strong> es una tarea bastante monótona y en la que es fácil cometer algún error tonto y puñetero así que tenía que haber una forma de hacerlos automáticamente (o casi).</p>
<p>Como tengo la costumbre de convertir en <strong>arrays</strong> todo lo que saco de las bases de datos antes de combinarlo con el <strong>html</strong>, una buena parte del camino ya la tenía hecha.</p>
<p>El método que voy a proponer a continuación no es nada del otro mundo y sólo pretende ser un punto de partida para que cada cual lo adapte y complique a su gusto.</p>
<p>Cuando me di cuenta de que un array como este:</p>
<pre class="brush: php; title: ; notranslate">
$a = array(
	type=&gt;&quot;text&quot;,
	name=&gt;&quot;nombre&quot;,
	value=&gt;&quot;Pepe&quot;,
	)
</pre>
<p>era fácilmente convertible, vía <strong>php</strong>, en un <strong>html</strong> como este:</p>
<pre class="brush: php; title: ; notranslate">
&lt;input
	type=&quot;&lt;?=$a[type];?&gt;&quot;
	name=&quot;&lt;?=$a[name];?&gt;&quot;
	value=&quot;&lt;?=$a[value];?&gt;&quot;
/&gt;
</pre>
<p>Decidí hacer una función que resolviera la construcción de cualquier formulario simplemente recibiendo los datos necesarios en forma de arrays.</p>
<p>Antes de nada traté de agrupar más o menos los diferentes elementos que componen un formulario: Los <strong>&lt;input&gt;</strong> tipo text, password y hidden tienen una sintaxis muy parecida. A <strong>&lt;textarea&gt;</strong> hay que darle de comer aparte y lo mismo con los <strong>&lt;select&gt;</strong>. Los <strong>&lt;input&gt;</strong> tipo radio y checkbox se portan de una manera muy similar, y luego quedan los <strong>&lt;input&gt;</strong> tipo submit.</p>
<p>En el ejemplo de este artículo presento la <strong>función f</strong>, que resuelve los <strong>&lt;input&gt;</strong> tipo text, password, hidden y submit, los <strong>&lt;textarea&gt;</strong> y los <strong>&lt;select&gt;</strong> y los botones de submit. El resto lo dejo para una pŕoxima ocasión.</p>
<p>El ejemplo resuelve de paso los <strong>&lt;label&gt;</strong> y permite aplicar <strong>class</strong> o <strong>style</strong> particulares a cada elemento. Por cierto: Tengo la costumbre en los formularios de utilizar siempre el mismo valor en <strong>name</strong> y en <strong>id</strong>. No sé si eso es bueno o malo (al menos el validador del W3C no protesta), pero si a alguien no le gusta eso no tiene más que crear una nueva variable para uno de ellos.</p>
<p>Ah! La parte en la que se construye el menú desplegable tipo <strong>&lt;select&gt;</strong> es la que ya presenté en el artículo <a href="http://quenerapu.com/php/construir-un-menu-select/">Construir un menú Select con PHP</a> publicado el 25|09|2009.</p>
<p>Bueno, probadlo y a ver qué os parece. <a href="http://quenerapu.com/ejemplos/f.php">En este link he colgado una demo con CSS y todo</a>.</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
$colores = array( // Array de valores para el select
		1=&gt;Azul,
		2=&gt;Negro,
		3=&gt;Naranja,
		4=&gt;Violeta,
		5=&gt;Granate,
		);

$qq=array(
	f=&gt;array( // Datos generales del formulario
		fN=&gt;&quot;loginForm&quot;, // name
		fM=&gt;&quot;post&quot;, // method
		fA=&gt;&quot;form.php&quot;, // action
		fB=&gt;&quot;Enviar&quot;, // texto del botón submit
		),
	ff=&gt;array(
			array( // Datos del input id
				fN=&gt;&quot;id&quot;,
				fV=&gt;123,
				fT=&gt;&quot;hidden&quot;, // Tipo hidden
				),
			array( // Datos del input nombre
				fN=&gt;&quot;nombre&quot;, // Variable
				fV=&gt;&quot;Perico&quot;, // Valor
				fL=&gt;&quot;Nombre&quot;, // Texto para el label
				fT=&gt;&quot;text&quot;, // Tipo text
				fC=&gt;&quot;special&quot;, // Class CSS (dato opcional)
				fS=&gt;&quot;width:100px;&quot;, // Style CSS (dato opcional)
				),
			array( // Datos del input apellidos
				fN=&gt;&quot;apellidos&quot;,
				fV=&gt;&quot;Los Palotes&quot;,
				fL=&gt;&quot;Apellidos&quot;,
				fT=&gt;&quot;text&quot;,
				fC=&gt;&quot;readonly&quot;, // Class CSS (dato opcional)
				fS=&gt;&quot;width:200px;&quot;,
				rO=&gt;true, // queremos que sea 'readonly'
				),
			array( // Datos del input contrasena
				fN=&gt;&quot;contrasena&quot;,
				fV=&gt;&quot;123456&quot;,
				fL=&gt;&quot;Contraseña&quot;,
				fT=&gt;&quot;password&quot;, // Tipo password
				),
			array( // Datos del textarea direccion
				fN=&gt;&quot;direccion&quot;,
				fV=&gt;&quot;Calle de Los Desamparados s/n&quot;,
				fL=&gt;&quot;Dirección&quot;,
				fT=&gt;&quot;textarea&quot;, // Tipo textarea
				fC=&gt;&quot;login&quot;,
				fW=&gt;&quot;10|3&quot;, // Width | Height
				fS=&gt;&quot;width:200px;height:100px;&quot;,
				),
			array( // Datos del select desplegable color
				fN=&gt;&quot;color&quot;,
				fV=&gt;3, // Valor (numérico en este caso)
				fL=&gt;&quot;Color favorito&quot;,
				fT=&gt;&quot;select&quot;, // Tipo select (desplegable)
				fC=&gt;&quot;login&quot;,
				fZ=&gt;$colores, // Array de valores
				),
		),
	);

function f($x)
	{
	extract($x);
	$r=&quot;&lt;form name=\&quot;{$f[fN]}\&quot; id=\&quot;{$f[fN]}\&quot; method=\&quot;{$f[fM]}\&quot; action=\&quot;{$f[fA]}\&quot;&gt;\n&quot;;
	for($i=0;$i&lt;count($ff);++$i)
		{
		if(in_array($ff[$i][fT],array(&quot;text&quot;,&quot;password&quot;,&quot;hidden&quot;,))){$r.=&quot;\t&quot;.($ff[$i][fT]!=&quot;hidden&quot;?&quot;&lt;label for=\&quot;{$ff[$i][fN]}\&quot;&gt;{$ff[$i][fL]}&lt;/label&gt;&quot;:&quot;&quot;).&quot;&lt;input type=\&quot;{$ff[$i][fT]}\&quot; name=\&quot;{$ff[$i][fN]}\&quot; id=\&quot;{$ff[$i][fN]}\&quot; value=\&quot;{$ff[$i][fV]}\&quot;&quot;.($ff[$i][fT]!=&quot;hidden&quot;?($ff[$i][fC]?&quot; class=\&quot;{$ff[$i][fC]}\&quot;&quot;:&quot;&quot;).($ff[$i][fS]?&quot; style=\&quot;{$ff[$i][fS]}\&quot;&quot;:&quot;&quot;):&quot;&quot;).($ff[$i][rO]?&quot; readonly=\&quot;readonly\&quot;&quot;:&quot;&quot;).&quot; /&gt;&quot;.($ff[$i][fT]!=&quot;hidden&quot;?&quot;&lt;br /&gt;&quot;:&quot;&quot;).&quot;\n&quot;;}
		if(in_array($ff[$i][fT],array(&quot;textarea&quot;,))){$r.=&quot;\t&lt;label for=\&quot;{$ff[$i][fN]}\&quot;&gt;{$ff[$i][fL]}&lt;/label&gt;&lt;textarea name=\&quot;{$ff[$i][fN]}\&quot; id=\&quot;{$ff[$i][fN]}\&quot;&quot;;$w=explode('|',$ff[$i][fW]);$r.=&quot; cols=\&quot;{$w[0]}\&quot; rows=\&quot;{$w[1]}\&quot;&quot;.($ff[$i][fC]?&quot; class=\&quot;{$ff[$i][fC]}\&quot;&quot;:&quot;&quot;).($ff[$i][fS]?&quot; style=\&quot;{$ff[$i][fS]}\&quot;&quot;:&quot;&quot;).&quot;&gt;{$ff[$i][fV]}&lt;/textarea&gt;&lt;br /&gt;\n&quot;;}
		if(in_array($ff[$i][fT],array(&quot;select&quot;,))){$r.=&quot;\t&lt;label for=\&quot;{$ff[$i][fN]}\&quot;&gt;{$ff[$i][fL]}&lt;/label&gt;&lt;select name=\&quot;{$ff[$i][fN]}\&quot; id=\&quot;{$ff[$i][fN]}\&quot;&gt;&quot;;foreach($ff[$i][fZ] as $x=&gt;$v){$r.=&quot;&lt;option value=\&quot;$i\&quot;&quot;;$r.=$ff[$i][fV]==$x?&quot; selected=\&quot;selected\&quot;&quot;:&quot;&quot;;$r.=&quot;&gt;&quot;.$v.&quot;&lt;/option&gt;&quot;;}$r.=&quot;&lt;/select&gt;&lt;br /&gt;\n&quot;;}
		}
	$r.=&quot;&lt;input type=\&quot;submit\&quot; value=\&quot;{$f[fB]}\&quot; /&gt;&quot;;
	$r.=&quot;&lt;/form&gt;&quot;;
	return $r;
	}

echo f($qq);
?&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://quenerapu.com/php/construir-formularios-casi-automaticamente-con-php/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

