Sábado, 13 de Noviembre de 2010 13:27
Escrito por Fernando Padilla

Como hacer un ListBox en un formulario
La manera mas sencilla de hacer un ListBox en un formulario trabajando con PHP es la siguiente:
Nota1: Primero les mostraré como tiene que ir en nuestro index o controller es decir el orden y la organización que debe tener nuestro codigo para poder transportar las variables y hacer uso de ellas en el formulario. Después muestro el formulario y el uso del listbox de la manera mas sencilla que lo puedes encontrar.
En el ejemplo presento la variable transportable ($frmVars) donde envio todas las variables que aparecerán en nuestro formulario:
Este ejemplo se basa en un case 'editar':
En la primera fase del case 'editar': le indico que me traiga solamente los datos del registro indicado y despliego un mensaje 'Favor de actualizar el registro'.
$dbDetalle = $detalle->dbDetalle->dbgetDetallePorId();
$listadoDetalle = $dbDetalle->db_fetch_full_array();
$frmVars = $listadoDetalle[0];
$fechaInicio = $dateHandler->invertFecha($listadoDetalle[0]['fechaInicio']);
$fechaFin = $dateHandler->invertFecha($listadoDetalle[0]['fechaFin']);
$frmVars['fechaInicio'] = $fechaInicio;
$frmVars['fechaFin'] = $fechaFin;
$frmVars['sub'] = 'editar';
$frmVars['boton'] = 'actualizar';
$frmVars['periodo'] = $listadoDetalle[0]['periodo'];
$frmVars['catPeriodo'] = array(0=>'-',1=>'Quincenal',2=>'Mensual',3=>'Anual');
if(!$_POST){
$message = 'Favor de actualizar el registro';
$display = 'detalle';
$sub = 'editar';
$tipo = 'normal';
//echo 'hola';
En la fase 2 actualizo los datos del formulario que serán enviados a la BD.
Antes de transportarlos por la variable tipo arreglo $frmVars valido un par de datos: fechaInicio y fechaFin para verificar su tipo ejemplo: 25/12/86.
Después $frmVars se encarga de trasportar todas las variables:
}else{
//###fase 2 actualizo datos de la forma en la bd
$today1 = $dateHandler->today();
$fechaInicio = $_POST["fechaInicio"];
$fechaFin = $_POST["fechaFin"];
$valFechaInicio = $dateHandler->validaFecha($fechaInicio, $today1);
$valFechaFin = $dateHandler->validaFecha($fechaFin, $today1);
if($valFechaInicio !=0 && $valFechaFin !=0){
$frmVars = array('id_svc'=> $_REQUEST['id_svc'],
'id_producto'=>$id_producto,
'descripcion'=>$descripcion,
'costo'=>$costo,
'periodo'=>$periodo,
'fechaInicio'=>$valFechaInicio,
'fechaFin'=>$valFechaFin,
);
$frmVars['catPeriodo'] = array(0=>'-',1=>'Quincenal',2=>'Mensual',3=>'Anual');
if($dbDetalle){
//Trae los datos de la tabla de detalle y despliega el mensaje de actualizo correctamente
//Y en caso que no se cumplan las condiciones muestro el mensaje del posible error
$dbDetalle = $detalle->dbDetalle->dbgetDetalle();
$listadoDetalle = $dbDetalle->db_fetch_full_array();
$message = "ACTUALIZO CORRECTAMENTE!";
$tipo = 'normal';
$display = 'detalle';
$sub = 'listado';
}else{
//No se pudo actualizar en la base de datos
$message = "NO ACTUALIZO NADA !!";
$tipo = 'alerta';
$display = 'detalle';
$sub = 'editar';
$frmVars = array('boton'=>'actualizar');
}
}else{
//Fecha invalida se muestra de nuevo la forma para corregir el error
$message.= "Edite correctamente la fecha
";
$tipo = 'alerta';
$display = 'detalle';
$sub = 'editar';
$frmVars['boton'] = 'actualizar';
Nota2: Usando el Model View Controller como modelo estructural de nuestro codigo; les mostrare que el formulario lo coloco en una clase en la cual también tengo mas codigo HTML lo cual me permite tenerlo mas organizado.
En la variable tipo arreglo $frmVars enviamos la variable $periodo sin embargo antes del formulario tenemos el Dataset con las variables que han sido enviadas y de la forma como serán introducidas .
Cuando entra a esta función $periodo se divide en sus diferentes opciones como lo muestro a continuación:
function disListaDetalleData($frmVars){
if(is_array($frmVars)) extract($frmVars);
switch($periodo){
case 1:
$strPeriodo= "Quincenal";
break;
case 2:
$strPeriodo= "Mensual";
break;
case 3:
$strPeriodo="Semanal";
break;
default:
$strPeriodo="Error";
}
$html = <<
<strong> $id_producto </strong>
<strong> $descripcion </strong>
<strong> $costo </strong>
<strong> $strPeriodo </strong>
<strong> $fechaInicio </strong>
<strong> $fechaFin </strong>
<strong> $action $erase </strong>
ENDH;
return $html;
}
Como se puede apreciar en la función las variables han sido transportadas y serán mostradas a traves del formulario.
En el caso de $periodo tiene un identificador , en este caso es la variable $periodostr, la cual almacena las opciones del listBox:
function disFormaDetalle($frmVars){
if(is_array($_REQUEST)) extract($_REQUEST);
if(is_array($frmVars)) extract($frmVars);
$periodoSelected[$periodo] = 'selected';
foreach($catPeriodo as $periodo=>$description){
$periodoStr.="$description\n";
}
$html = <<
<form method="post">
<input name="id_svc" type="hidden" value="$id_svc" />
Id Producto: <input name="id_producto" type="int" value="$id_producto" />
Descripcion: <input name="descripcion" type="var" />
Costo: <input name="costo" type="float" />
Periodo:<select name="periodo"> </select>
FechaInicio:<input id="from" name="fechaInicio" type="date" />
FechaFin:<input id="to" name="fechaFin" type="date" />
<input type="submit" value="$boton" />
</form>
ENDH;
return $html;
}
De esta manera el resultado será:
