sábado, 17 de septiembre de 2011

Calcular tiempo transcurrido entre dos valores de hora (PHP, MySQL)

Hola:
Hoy voy a publicar cómo calcular el tiempo transcurrido entre dos valores de hora. Digamos por ejemplo que estuve realizando una acción desde las 11:59pm hasta las 4:01am y quiero saber el tiempo transcurrido.
Básicamente MySQL tiene una función para eso TIMEDIFF(expr1,expr2) que devuelve el resultado de la expr1-expr2 en un valor de tiempo (Importante: Ambas expresiones debes ser del mismo tipo).
Se puede utilizar asi:
SELECT TIMEDIFF('2011-12-31 04:01:00 ',   '2011-12-30 23:59:00 ');
Ahora, otra forma sencilla de hacerlo desde PHP, sin utilizar la función MySQL:

<?
function calcular_tiempo_trasnc($hora1,$hora2)
{
//divido la hora en horas, min y seg porque viene en formato hh:mm:ss
list( $h1, $m1, $s1 ) = split( '[:]', $hora1 );
list( $h2, $m2, $s2 ) = split( '[:]', $hora2 );
//resto los segundos
$st=$s2-$s1;
//si me da negativo resto el resultado a 60 y quito 1 a los minutos
if($st<0){
$st=60+$st;
$m2=$m2-1;
}
//resto los minutos
$mt=$m2-$m1;
//si me da negativo resto el resultado a 60 y quito 1 a las horas
if($mt<0){
$mt=60+$mt;
$h2=$h2-1;
}
//resto las horas
$ht=$h2-$h1;
//para que me de hh:mm:ss le agrego 0 alante del # si es menor que 10 sino me queda h:m:s para los menores que 10
$c=0;
if ($ht<10){
$ht=$c.$ht;
}
if ($mt<10){
$mt=$c.$mt;
}
if ($st<10){
$st=$c.$st;
}
//devuelvo el tiempo transcurrido en formato hh:mm:ss
return($ht.":".$mt.":".$st);
} //aquí termina la función
//imprimo el resultado de la función
echo calcular_tiempo_trasnc($hora1,$hora2);
?>

Bueno espero les sea de utilidad. Nos vemos luego para seguir hablando de programación.

lunes, 12 de septiembre de 2011

Conectarse a Interbase(Firebird) desde PHP

Hoy vamos a probar el acceso a datos con otro gestor: Interbase de Firebird.

Como en el caso de MSSQL vamos a comenzar con la configuración para evitarnos un error muy común : Fatal error: Call to Undefined function...

Lo primero es tener la dll. Vamos a comenzar buscando en el directorio dlls donde tengamos instalado el php para verificar si está allí la dll  php_interbase.dll. Si no se encuentra debes descargarla de internet y copiarla en el directorio antes mencionado.
Una vez que tienes la dll hay que modificar el php.ini. Lo puedes hacer con el notepad. Las modificaciones son muy sencillas.

Buscar la linea 
;extension=php_interbase.dll
Se les quita el ; que tiene delante. Guardas los cambios. Reinicias el Apache y listo.

Importante: Si la dll no estaba en la instalación y te las tuviste que descargar de internet debes cambiar también la linea
extension_dir =  Para poner la dirección donde se encuentran las dlls.

Una vez configurado todo vamos al código.

Existen las funciones especificas para conectarnos:


ibase_connect(BD, login, password)
ibase_pconnect(BD, login, password)

Las diferencias son básicamente las mismas que están explicadas en la entrada Conexión a MySQL desde PHP  para las funciones similares de MySQL.

Vamos entonces el ejemplo para la conexión.
<?

//ver que en estas funciones se da la ruta hasta la base de datos y no el nombre del servidor por lo
// que no hay que utilizar select_db. En el ejemplo la base de datos se llama Prueba y está en el
//servidor  remoto APPS

$DB="APPS\CIENCIAYTECNICA\BaseDatos\Prueba.GDB";
//Voy a utilizar el login y el password que trae Interbase por defecto.
$User="sysdba";
$Pass="masterkey";

@ibase_pconnect($DB,$User,$Pass) or die("Error al conectarse a la base de datos") ;

?>
Mi Recomedación: Reitero la recomendación que di en la entrada anterior. Creo que es mejor tener el código de conexión en un archivo aparte y referenciarlo de cada una de las páginas donde se necesite luego. De esta forma ante cualquier cambio en los datos de conexión como nombre del servidor, login o password, solo hay que realizar los cambios en un archivo.

Una vez conectados podemos realizar las consultas a la base de datos, ya sea INSERT, UPDATE, SELECT, DELETE. Para todas se utiliza la misma sentencia ibase_query($conexion, $cadenaconsulta) solo cambia la cadena de la consulta. Fíjese que a diferencia de las funciones similares de MSSQL y MySQL aquí el identificador de conexión se pasa primero y luego la cadena de consulta. Si no se pasa ningún identificador de conexión por defecto toma la última conexión abierta.

Veamos un ejemplo de consultas a la base de datos:
<?
/* Si como recomendé pusiste tu código de conexión en un archivo aparte lo primero es referenciarlo. Puedes hacerlo con require() o include().*/
include(''../conexion.php'');
//consulto la base de datos
$resultcliente = ibase_query($conexion ,"select NCliente, NombreCliente from clientes"); 
//muestro los resultados
while ($c=ibase_fetch_object($resultcliente)) //como hay varias filas lo pongo dentro de un ciclo
{
     echo $c->NombreCliente; //imprimo los resultados
 }//cierro el while
 //los resultados se pueden mostrar en algún elemento html como listbox, checkbox, etc..
?>

Bueno hasta aquí la entrada de hoy, espero sus comentarios y preguntas al respecto.

Nos vemos mañana para seguir hablando de programación.

jueves, 8 de septiembre de 2011

Conexión a MSSQL desde PHP

Bueno, ya sabemos conectarnos a MYSQL por la entrada anterior, vamos a probar ahora con otro gestor: MSSQL.

Vamos a comenzar con la configuración para evitarnos un error muy común : Fatal error: Call to Undefined function...

Lo primero es tener la dll. Vamos a comenzar buscando en el directorio dlls donde tengamos instalado el php para verificar si está allí la dll  php_mssql.dll. Si no se encuentra debes descargarla de internet y copiarla en el directorio antes mencionado.
Una vez que tienes la dll hay que modificar el php.ini. Lo puedes hacer con el notepad. Las modificaciones son muy sencillas.

Buscar la linea 
;extension=php_mssql.dll
Se les quita el ; que tiene delante. Guardas los cambios. Reinicias el Apache y listo.

Importante: Si la dll no estaba en la instalación y te las tuviste que descargar de internet debes cambiar también la linea
extension_dir =  Para poner la dirección donde se encuentran las dlls.

Una vez configurado todo vamos al código.

Como en el caso de MySQL existen las funciones especificas para conectarnos:

mssql_connect(servername, login, password)
mssql_pconnect(servername, login, password)

Las diferencias son básicamente las mismas que están explicadas en la entrada Conexión a MySQL desde PHP para las funciones similares de MySQL.

Vamos entonces el ejemplo para la conexión.
<?
$conexion = mssql_pconnect("NombreServidor","SA","passSA");
mssql_select_db("Prueba");
?>
Mi Recomedación: Reitero la recomendación que di en la entrada anterior. Creo que es mejor tener el código de conexión en un archivo aparte y referenciarlo de cada una de las páginas donde se necesite luego. De esta forma ante cualquier cambio en los datos de conexión como nombre del servidor, login o password, solo hay que realizar los cambios en un archivo.

Una vez conectados podemos realizar las consultas a la base de datos, ya sea INSERT, UPDATE, SELECT, DELETE. Para todas se utiliza la misma sentencia mssql_query($cadenaconsulta, $conexion) solo cambia la cadena de la consulta.

Veamos un ejemplo de consultas a la base de datos:
<?
/* Si como recomendé pusiste tu código de conexión en un archivo aparte lo primero es referenciarlo. Puedes hacerlo con require() o include().*/
include(''../conexion.php'');
//consulto la base de datos
$resultcliente = mssql_query("select NCliente, NombreCliente from clientes",$conexion); 
//muestro los resultados
while ($c=mysql_fetch_object($resultcliente)) //como hay varias filas lo pongo dentro de un ciclo
{
     echo $c->NombreCliente; //imprimo los resultados
 }//cierro el while
 //los resultados se pueden mostrar en algún elemento html como listbox, checkbox, etc..
?>

Bueno hasta aquí la entrada de hoy, espero sus comentarios y preguntas al respecto.

Nos vemos mañana para seguir hablando de programación.

miércoles, 7 de septiembre de 2011

Conexión a MySQL desde PHP

En muchas de las aplicaciones que realicemos vamos a necesitar acceso a datos. Hoy voy a comenzar una serie de tres entradas para hablar de las conexiones a diferentes gestores de bases de datos desde PHP. Estaremos hablando de MSSQL, Interbase de Firebird y MySQL que por ser el más comunmente utilizado es el que le da inicio a la serie.

Empezamos entonces...

Para conectarse a una base de datos MySQL PHP cuenta con dos funciones:

mysql_connect(server_name, login, password)
mysql_pconnect(server_name, login, password): Esta función abre una conexión persistente a la base de datos.

La diferencia fundamental entre las dos es que durante la conexión la función mysql_pconnect() chequea primero si ya existe algún enlace persistente abierto con los  mismos parámetros, y si es así, utiliza ese que ya existe, en vez de abrir una nueva conexión.
Otra diferencia es que como es persistente, la conexión no se cierra, permanece siempre abierta para ser utilizada en el futuro. En el caso de mysql_connect() la conexión debe cerrase cuando se termina de trabajar con ella utilizando la función mysql_close($conexion).

Vale aclarar que todos los parámetros son opcionales, si se deja alguno vacío asume los parámetros por defecto: server_name = localhost , login = nombre del usuario propietario del proceso y password vacía.

Bueno, dadas las explicaciones previas veamos un ejemplo.

<?
// yo he decidido declarar variables para los parámetros pero se pueden pasar directamente.
$server_name="miservidor";  // puede ponerse el nombre o el IP, si fuera local sería localhost
$login="root"; // el nombre de usuario para conectarse a la base de datos
$password="rootpass"; //la contraseña de ese usuario

$conexion=@mysql_pconnect($server_name,$login,$password) or die("Error al conectarse al servidor");

//luego seleccionas la BD que vas a utilizar de ese servidor. En este caso se llama Prueba
 @mysql_select_db("Prueba ",$conexion) or die("Error al conectarse a la base de datos");
   
?>

Mi recomendación: Tener la conexión aparte para que pueda ser utilizada en las diferentes páginas y en caso de alguna modificación en los datos de acceso tengas que modificar un solo archivo.

Una vez conectados podemos realizar las operaciones fundamentales sobre nuestra base de datos: Actualización y Consultas para lo que PHP cuenta con la función mysql_query("cadena SQL",$conexion);

Pero veamos un ejemplo:
Si como te sugerí pusiste tu conexión en un archivo aparte lo primero que debes hacer es referenciar ese archivo en la página actual donde vas a hacer tus consultas.
Lo puedes hacer utilizando require("../conexion.php") o include("../conexion.php")  donde ../conexion.php es la ruta completa al archivo conexion.php.

La consulta:
<?
//en este caso seleccionamos el Número y Nombre de los clientes de una Tabla Clientes.
$resultcliente = mysql_query("select NCliente, NombreCliente from clientes",$conexion);
?>

Mostrar los Resultados
Se pueden mostrar los resultados de muchas formas. Yo particularmente prefiero llevar el resultado de la consulta a objetos con la función mysql_fetch_object(''resultado de consulta'') porque creo que es mucho más fácil para trabajar, ya que podemos referirnos a los resultados con $variableobjeto->nombrecolumna.
<?
while ($c=mysql_fetch_object($resultcliente)) //como hay varias filas lo pongo dentro de un ciclo
{
echo $c->NombreCliente; //imprimo los resultados
 }//cierro el while
?>
Nota: Dentro del ciclo puedo asignar el resultado de la consulta a cualquier elemento HTML como listbox, checkbox u otros es tan sencillo como asignarle al elemento el resultado de la consulta.
Ej.
<?
echo (''<select name=\"cliente\" size=\"1\"  id=\"cliente\">");
while ($c=mysql_fetch_object($resultcliente))
            {           
               echo "<option value=\"$c->NCliente\" > $c->NombreCliente</option>";
            }//cierro el while
echo ("</select>'');
?>
Actualizaciones
Para actualizar los registros de la base de datos (entiéndase insertar, actualizar o eliminar registros) se utiliza la misma función mysql_query lo que cambia la cadena sql que le pasamos.
Por ejemplo insertamos un Cliente
<?  mysql_query ('' Insert into Clientes ($textboxNombre); ?>
Donde TextBoxNombre es la variable que me recoge por Post o Get el valor de un textbox donde entro el nombre que deseo insertar.

Bueno hasta aquí mi granito de arena, espero les sirva de ayuda, cualquier duda o sugerencia pueden comentarla aquí.