Cargar fecha de BD Postgres en 2 listas y un text usando PHP

En esta ocasion quiero mostrar como se puede cargar una fecha que esta guardada en una Base de datos de postgres en dos listas y un campo de texto, en este caso uso el siguiente software :

DBMS:  Postgres 8.4.3
Servidor web: Apache 2.2.16
Version de PHP: 5.2.14
Sistema operativo: Linux Ubuntu 9.10

La primera lista mostrara la lista de dias, la segunda la lista de meses y el campo de texto el año. La idea es que cuando se cargue la
pagina que muestra la fecha en la primera lista quede seleccionado el dia que se indica en la fecha de la BD, en la segunda lista quede seleccionado el mes y en la caja de texto se muestre el año.

Los datos de conexion al DBMS son los siguientes:

Usuario: postgres
password: 12345
Base de datos: prueba
Tabla: contactos

Para hacer el codigo mas facil de leer y por cuestiones didacticas e separado en otro archivo .php el codigo donde se hace la conexion al DBMS. En este post no voi a explicar nada referente a la conexion a la BD o como hacer consultas en postgres, doy por hecho que ya sabes como (o al menos entiendes mi codigo donde hago eso). El ejemplo consta de 2 archivos:

muestra_fecha.php que es la pagina que muestra la fecha.
conecta.php es la pagina donde se realiza la conexion al DBMS.

A continuacion se muestran los comandos para crear la tabla, con el fin de que se vea su estructura:

create table contactos(ID serial not null, fecha_ingreso date, primary key(ID));

 

Creacion de la tabla contactos

Creacion de la tabla

como se ve, la tabla solo tiene 2 campos el ID solo lo e puesto para que haya una clave primaria para la tabla. a continuacion se va a insertar un registro en la tabla:

INSERT INTO contactos(fecha_ingreso) VALUES('15-02-2010');

insercion

Antes que nada debemos recordar que Postgres almacena las fechas en el formato año/mes/dia. Por ejemplo una fecha valida es 2010/02/15 que corresponde al quince de febrero del año 2010.

otra cosa que hay que saber es que al enviar una fecha por medio de un INSERT desde el codigo PHP a postgres, se envia como INSERT INTO contactos(fecha_ingreso) VALUES(‘dia-mes-año’); donde  dia, mes y año son numeros, en este ejemplo no se va a mostrar como realizar el INSERT sino solamente como recuperar la fecha y cargarla en las listas y el campo de texto. Lo que me interesa explicar es que al hacer un SELECT desde el codigo la fecha viene en el formato año-mes-dia, o sea al reves de como se envia. El codigo del archivo conectar.php es el siguiente:

$conexion;

function conectar()
{
    global $conexion;
    $conexion = pg_pconnect("host=localhost dbname=prueba user=postgres password=12345");
    if (!$conexion)
   {
     print("La conexion fallo");
     exit;
   }
}

como se ve solo consta de una funcion que es la que conecta con el DBMS postgres (debe de estar corriendo).

y ahora el contenido del archivo cargarFecha.php

<!--
    Descripcion:
    Pagin web que muestra un formulario que carga una fecha en dos listas y un cuadro de texto.
    Author:     Gonzalo Silverio  gonzasilve@gmail.com
    Fecha:      16/12/2010
    Archivo:    cargarFecha.php
-->
   <?php
   /* Conexion a la base de datos */
   require('conectar.php');
   conectar();
 ?>

<html>
<head>
<title>Cargar un fecha</title>
</head>
<body >
    <h2 align="center">Cargar un fecha en Postgres y PHP</h2>
<form name="form_altas" action="http://localhost/cargarFecha/cargarFecha.php" method="GET">
<?php
   $sql="SELECT id FROM contactos";
   $rs = pg_Exec ($conexion, $sql);
	$filas = pg_num_rows($rs);
?>

Selecciona un ID de contacto del cual quieras ver su fecha:
   <select name="id_contacto" size="1">
       <?php
           for($i=0; $i < $filas; $i++)
           {
               echo "<option value='".pg_result($rs, $i, 0)."'>".pg_result($rs, $i, 0)."</option>";
           }
       ?>       
   </select>
 <input type = "submit" value="Cargar Fecha">

<br><br>
   <?php
		if(isset($_GET['id_contacto']) )
		{
			$sql="SELECT fecha_ingreso FROM contactos WHERE id=".$_GET['id_contacto'];
		}
		else
		{
			$sql="SELECT fecha_ingreso FROM contactos";
		}
		$rs = pg_Exec ($conexion, $sql);
		  $lafecha=pg_result($rs, 0, 0);
		  echo "Fecha cargada: <b>".$lafecha."</b> <br>";
	?>

   <select name="dia" size="1">
       <?php
           $separa=explode('-',$lafecha);
           $anio=$separa[0];
           $mes=$separa[1];
           $dia=$separa[2];
           $dias_mes =array("1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31");
           for($i=0; $i < count( $dias_mes ); $i++)
           {
               echo "<option value='".$dias_mes[$i]."' ";
               if( $dias_mes[$i] == $dia )
               {
                   echo " selected ";
               }
               echo ">".$dias_mes[$i]."</option>";
           }
       ?>
   </select>
   <b>Mes</b>
   <select name="mes" size="1">
       <?php
           $meses_anio =array("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre");
           for($i=0; $i < count( $meses_anio ); $i++)
           {
               echo "<option value='".($i+1)."' ";
               if( ($i+1) == $mes )
               {
                   echo " selected ";
               }
               echo ">".$meses_anio[$i]."</option>";
           }
       ?>
   </select>

   <b>a&ntilde;o</b>
   <input type="text" size="4" maxlength="4" name="anio"
    <?php
       echo " value='".$anio."'";
    ?>
    >
<br><br><br>
 </form>
</body>
</html>

Aqui los mas interesante es la funcion explode, que devuelve un arreglo. la funcion permite separar una cadena en varias subcadenas, espera recibir el sepador de las subcadenas. No doy explicaciones del codigo por falta de tiempo pero quiero mostrar la pagina en el navegador web:

ejemplo de cargar fecha corriendo

bueno espero comentarios para dudas o sugerencias.

o si quieren los fuentes 😉 solo ahi que pedirlo…

Acerca de gonzasilve
Freelance Web Developer.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: