jul 8 2010

Obtener numerador y denominador desde una tabla en MySQL con PHP (numero / total)

En realidad no sé ni como poner titulo a este tema, pero les explico un poco lo que tenia que hacer para que encuentren este ejemplo útil en lo que necesiten.
Existe una tabla en la que almaceno registros que se enlazan a otra tabla por medio de un campo, ejemplo:

T1
a_id, a_referencia_t2_id, a_contenido

T2
b_id, b_algomas

Con esto, debía listar todas las filas de T1 y en obtener la el numerador del registro, es decir, 2 / 3 (el segundo registro de los tres disponibles con la misma referencia de la T2).

Obtener el denominador es sencillo:

$total_num = ceil(mysql_num_rows(mysql_query(“SELECT a_id FROM t1 WHERE a_referencia_t2_id=”.$row_t1['b_id'].”")));

Ahora, lo complicado, es generar ese “índice” para obtener el numerador, esto lo hice dentro de un while($row_t1=mysql_fetch_assoc($query_t1)), entonces la ejecución del código se hace por cada fila obtenida:

mysql_query(“set @a_id = ””);
mysql_query(“set @num  = 1;”);
$sql_num = ‘
SELECT
a_id as id_num,
a_referencia_t2_id,
@num := if(@a_id = a_referencia_t2_id, @num + 1, 1) as row_number,
@a_id:= a_referencia_t2_id as dummy
FROM `t1`
WHERE a_referencia_t2_id=’.$row_t1['a_referencia_t2_id'];
$query_num=mysql_query($sql_num) or die(mysql_error());
while($row_num=mysql_fetch_assoc($query_num)) {
if($row_num['id_num']==$row_t1['a_id']) {
$num=$row_num['row_number'];
}
}

Con esto, obtenemos el resultado deseado (Ej.: 4 / 8):

echo $num.” / “.$total_num

Espero que les sea útil!
Part ot this code came from: http://www.xaprb.com/blog/2006/12/02/how-to-number-rows-in-mysql/

  • Share/Bookmark

jun 29 2010

Convertir de cantidad a importe con letra en pesos mediante PHP

Necesitaba una función que pudiera traducir una cantidad dada con centavos a el total con letra, es decir escrito, para un sistema de facturación con PHP, encontré una función excelente en BLASTEN.com y me tome la libertad de moverle un poquito para hacer que la salida fuera exactamente como la necesitaba, es decir, incluyendo “X PESOS xx/100 M.N.”

Todo el crédito es para la gente de Blasten, pero le puse un poquito mas de sabor para quienes me leen y lo puedan utilizar con mayor facilidad.

Importante: La función por el momento solo acepta 2 decimales y el formato del numero tiene que ser xxx.xx, así que pueden utilizar number_format() para limpiar la variable antes de pasarla por la función.

Para utilizarlo, solo descarguen el código, péguenlo en su script o hagan un include con la ruta al fichero que pueden descargar aquí, de cualquier forma, lo único necesario es utilizar:

echo num2letras($var);

No queda mas que desearles happy coding!

num2letras en php

  • Share/Bookmark

jun 8 2010

Deprecated: Function set_magic_quotes_runtime() is deprecated en EzPdf class

Este error me hizo dar una buena búsqueda antes de resolverlo, cuando tenemos php 5.3.x instalado en nuestros servidores y usamos la clase ezclass para PDF de R&Os

El error que nos muestra puede ser muy similar a:

Cabe mencionar, que los números de línea pueden variar y, el la ubicación del script la escribí como “…”

Deprecated: Function set_magic_quotes_runtime() is deprecated in /…/class.pdf.php on line 2856
Deprecated: Function set_magic_quotes_runtime() is deprecated in /…/class.pdf.php on line 2858
Deprecated: Function set_magic_quotes_runtime() is deprecated in /…/class.pdf.php on line 2641
Deprecated: Function set_magic_quotes_runtime() is deprecated in /…/class.pdf.php on line 2653

Además de un:

Deprecated: Assigning the return value of new by reference is deprecated in /…/pdf.php on line X

Esto se arregla muy rápido y hay que saber el porque del problema, se trata tan solo de una función depreciada en PHP 5, que se iba a mantener en funcionamiento hasta ultima versión, solo que no mas en la 6, ósea, llegando a PHP 6 ya no se podrá utilizar esta función.

Lo que debemos hacer es simple, abrimos el fichero de la clase (class.pdf.php) en el editor de nuestra preferencia y eliminamos todas las líneas que contengan esto:

set_magic_quotes_runtime(0);

Por ultimo, solo es necesario editar nuestro script donde ejecutamos la creación del PDF y cambiamos de esto:

$pdf =& new Cezpdf(‘letter’,'portrait’);

Por esto:

$pdf = new Cezpdf(‘letter’,'portrait’);

Lo único que hicimos es quitar ese ampersand (&) antes del new, ya que esto solo se permite en PHP 4.

  • Share/Bookmark

mar 11 2010

Copiar la estructura de una tabla MySQL en una tabla nueva

Si deseas copiar la esctructura de una tabla dentro de una base de datos MySQL, peor no los datos, solo necesitas ejecutar una linea en un query. La Sintaxis es:

CREATE TABLE tabla_copia LIKE tabla_original;

Eso es todo, obtendremos los mismo campos que en la “tabla original” en la “tabla_copia” en un sencillo paso.

  • Share/Bookmark

mar 2 2010

Buscar en un campo separado por comas en MySQL

Debido a un desarrollo en el que actualmente trabajo, me tope con esto que resulto ser muy sencillo de hacer, pero no esta tan documentado como se espera. Que pasa si tienes un campo con cadenas de texto o enteros separados por coma, como categorías, nombres etc.

Un ejemplo practico seria,  el campo “cats” tiene un contenido como ’2,11,10,1,16′, si usamos el tradicional LIKE:

SELECT * FROM tabla WHERE cats LIKE '1';

Se podría pensar que esta solución es adecuada pero no es así, ya que nos devolvera:

cats:

  • 11
  • 10
  • 1
  • 16

Para lograr obtener solo el ’1′ y no todos los números que contengan el ’1′ se debe utilizar esta sintaxis:

SELECT * FROM tabla WHERE FIND_IN_SET('1', cats)

En el ejemplo práctico ‘tabla’ es el nombre de la tabla en la que queremos buscar y ‘cats’ el nombre del campo.

  • Share/Bookmark

feb 4 2010

Reparar tabla corrupta en MySQL

Lo único que hay que hacer, es un query mediante PHP, en  la consola interactiva o vía PhpMyAdmin conteniendo lo siguiente:

REPAIR TABLE mytablacorrupta;

Con esto, MySQL reparara los problemas que tengamos.

  • Share/Bookmark

dic 22 2009

Dividir resultado de query MySQL por bloques con PHP

Qué pasa si tienes un query que te arrojara cierta cantidad de filas, y necesitas dividirlas en bloques de “X” cantidad. Esto, en mi caso lo utilice para hacer un slider con JQuery, para se precisos con el plugin de Cycle.

Se asume que ya tienen establecida una conexión con la base de datos, así que solo pondré el código desde el query. Una vez que lean lo siguiente, será muy fácil entenderlo, si tienen dudas por favor comenten.

$query = "SELECT * FROM tabla";
$result = mysql_query($query, $con) or die(mysql_error());
// aqui decidimos el tamaño de los bloques
$divider = 4;

if($result){
	$i=0;
	while ($row = mysql_fetch_assoc($result)) {
		if($i%$divider==0){
//aquí escribimos el principio de el bloque
			echo('<div>'."\n");
			echo('<ul>'."\n");
		}
		$i++;
//aquí escribimos el codigo que queremos repetir por la cantidad de elementos dentro del bloque, en este caso 4
		echo("<li>".strtoupper($row['name'])."</li>\n");

		if($i%$divider==0){
//aquí escribimos el cierre de el bloque
			echo('</ul>'."\n");
			echo('</div>'."\n");
		}
	}
}

Como se puede leer, el ejemplo es muy sencillo, pero nos puede servir para infinidad de cosas.

  • Share/Bookmark

sep 18 2009

Tutorial sobre dhtmlScheduler, un calendario en Ajax

Por alguna razón necesitaba encontrar un calendario que me permitiera agregar eventos al vuelo y que algunas personas pudieran tener acceso a el. Quería encontrar algo dinámico (Ajax) y que tuviera el potencial para funcionar dentro de  una intranet que estoy armando en PHP y MySQL. Esto, es para que no me complicara insertando las tablas, sesiones etc en mi proyecto actual.

El resultado de la búsqueda fue dhtmlxScheduler, una app en dhtml que tiene la posibilidad de almacenar los datos de nuestras citas en una base de datos MySQL, PostgreSQL y algunas más.

Lo primero, como siempre, es descargar la aplicación que necesitamos de aquí.

**Este tutorial asume algunas cosas:

  • Tenemos un servidor Web previamente configurado (LAMP) o hosteamos en algún lugar.
  • El servidor ejemplo se llamara como siempre “Localhost”.
  • Las contraseñas e información de base de datos MySQL son muestra, tendremos que ajustar a nuestras necesidades.
  • Tenemos conocimientos de PHP, MySQL, Javascript y HTML y CSS.

Una ves descargada y descomprimida en algún directorio de nuestro disco duro (en el tutorial será nuestro home), copiaremos solamente los siguientes ficheros y directorios al directorio destino, es decir, donde vivirá nuestro calendario en el servidor Web.

  • $HOME/dhtmlxScheduler/codebase > todo el directorio
  • $HOME/dhtmlxScheduler/samples/common/config.php
  • $HOME/dhtmlxScheduler/samples/initialization_loading/php/events.php

Ahora, ya en el directorio que hemos creado para la aplicación, vamos a dar vida a un index.php en el que agregaremos el código contenido en el siguiente archivo:

index.txt

Con lo que en el explorador, debemos ver algo así:

calendario

Ahora, echemos un vistazo a como debería de estar organizado nuestro directorio de calendario en el servidor:

calendario-dir

Si hasta ahora va todo correcto (si vieron el calendario en el explorador, no se preocupen por el mensaje de error sobre el XML, ya que aun no llegamos a esa parte), Ahora editaremos lo mas fácil, que es el config.php y pondremos los valores que se adapten a nuestras configuraciones.

<?php
 $server = "localhost";
 $user    = "miusuario";
 $pass    = "mipasswd";
 $db_name= "miDB";
?>

Ahora crearemos un fichero llamado vaciado.sql en donde agregaremos lo siguiente:

DROP TABLE IF EXISTS `events`;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
CREATE TABLE `events` (
 `event_id` int(11) NOT NULL AUTO_INCREMENT,
 `event_name` varchar(127) NOT NULL,
 `start_date` datetime NOT NULL,
 `end_date` datetime NOT NULL,
 `details` text NOT NULL,
 PRIMARY KEY (`event_id`)
) ENGINE=MyISAM AUTO_INCREMENT=85 DEFAULT CHARSET=latin1;
SET character_set_client = @saved_cs_client;

Inmediatamente después, importaremos ese archivo a MySQL, ya sea con PhpMyAdmin o mediante la linea de comandos.

Finalmente, editaremos el fichero events.php donde ajustaremos las rutas a los archivos que necesita el calendario para trabajar correctamente:

<?php
 include ('codebase/connector/scheduler_connector.php');
 include ('config.php');

 $res=mysql_connect($server, $user, $pass);
 mysql_select_db($db_name);

 $scheduler = new schedulerConnector($res);
 $scheduler->enable_log("log.txt",true);
 $scheduler->render_table("events","event_id","start_date,end_date,event_name,details");
?>

Eso es todo, ahora visitamos el calendario con nuestro navegador y podremos agregar citas y eventos dando doble click sobre el día que deseamos, solo es necesario poner nombre y ajustar la hora de comienzo y termino.

  • Share/Bookmark