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á:

 

Encuesta de Hoy

Qué gadget te gustaria tener?

Acerca de: MG

Es un proyecto sobre un sitio web, donde los usuarios podrán leer noticias y artículos de relevancia sobre todo lo que envuelve a la Tecnología; Escritos por profesionales en los ramos de Diseño Web, Programacion Web, TI, etc.

Leer más...

MundoGeek

Comentarios y Sugerencias por favor a: contactoarroba_1mundogeek.com, Gracias por tu preferencia.

Login Form