¡No Quiero Programar! PHP, CodeIgniter y otros frameworks!

26ago/111

Migrando de MySQL a Oracle para PHP (problemas!)

Bueno, hacía tiempo que no escribía por aquí, la verdad es que me cuesta mantener un ritmo constante, puesto que ahora que tengo un trabajo fijo (bien!?) a veces vuelvo a casa y lo último que me apetece es seguir escribiendo sobre programación, pero que os voy a contar ¿no?

En fin, volviendo al tema importante, hace unos días nos propusieron actualizar una aplicación hecha enteramente en PHP (nativo, sin ningún framework), para que soportase oracle. Bien la cosa no parecía difícil, porque esa aplicación, tenía una librería con las funciones de MySQL, por lo que sería tan fácil como duplicar esa librería y substituir las funciones por las de Oracle. Después de ver lo que había, decidimos usar la OCI8 de PHP (documentación).

Bien, este artículo no es para haceros un tutorial sobre como migrar de MySQL a Oracle, pero si que quería comentar algunos de los problemas que nos hemos ido encontrando, tanto a nivel de funciones en PHP como al migrar con SQL de una a la otra. Y ojo! Yo tuve que aprender Oracle a marchas forzadas, por lo que me considero un usuario de este gestor totalmente novato, seguramente los errores expuestos a continuación se pueden solventar de una manera quizá mas compleja y profesional, pero al menos os daré un punto de partida si estáis en los mismos problemas que yo.

Para empezar, la migración la hicimos "automaticamente" mediante SQL Developer (enlace) y estos fueron algunos de los problemas y consideraciones que nos encontramos:

1) los campos TEXT de MySQL pasan a ser objetos LOB de Oracle, por lo que a posteriori, será diferente tratarlos, ya que las consultas no nos devolverán una "string", sino que te devuelven un objeto OCILOB (documentación), que para leerlo se tendrá que hacer algo así como:

//$cad sería el valor del campo de la base de datos tipo CLOB
$cad = (string)$blob->read($blob->size());
17feb/112

Creando nuestro Foro (Primera parte): La base de datos

Bueno abro este nuevo taller, para crear un foro en CodeIgniter. Obviamente no será tan completo como aquellos que circulan por Internet (phpBB y sucedaneos), pero si será una sencilla base para que por un lado aprendáis a usar CodeIgniter y por otro lado podáis ampliarlo para adaptarlo a vuestro gusto.

Como siempre empezaremos poco a poco y con buena letra. Lo primero será crear las tablas necesarias para la base de datos. Mantendremos el asunto sencillo y empezaremos con la estructura mas básica de todas.

Vamos a las categorías que tendrá el foro, ahora mismo se me ocurren estos campos

  • id
  • nombre
  • padre

Simple y sencillo. Padre simplemente hará referencia de si es una categoría que dependa de otras o es una principal. Este es el código SQL:

CREATE TABLE IF NOT EXISTS `forum_cat` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nombre` varchar(100) NOT NULL,
  `padre` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

Luego la tabla de posts quedaría con estos campos:

  • id
  • titulo
  • cuerpo
  • fecha
  • usuario_id
  • padre

Tampoco descarto que a mitad de la programación de este foro me de cuenta que falta algún campo, pues tened en cuenta que voy escribiendo esto a medida que lo voy a ir programando. Así quedaría el código SQL:

CREATE TABLE IF NOT EXISTS `forum_posts` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `titulo` varchar(100) NOT NULL,
  `cuerpo` text NOT NULL,
  `fecha` datetime NOT NULL,
  `usuario_id` int(11) NOT NULL,
  `padre` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

Y bueno para empezar creo que es todo lo que nos hará falta. Si creéis que me puedo dejar algún campo básico para el funcionamiento, comentad o pasaros por el foro y lo discutimos ;)

El próximo post mas y mejor.

28may/089

Gestor de noticias (Quinta parte): Paginación

Bueno hoy dedicaré esté post a la paginación en CodeIgniter, ya que es un tema que para una cosa o para otra siempre acaba saliendo y acabamos con un quebradero de cabeza monumental cuando intentamos crear una buena paginación.

Cómo toda aplicación web típica, CodeIgniter nos plantea una solución, así que siempre haced uso de su guía y buscad lo que os haga falta, que os aseguro que la mayor parte del tiempo lo encontraréis. En este caso haremos uso de la "Pagination Class".

[DEMO] Podéis ver aquí cómo quedará todo después de lo que os explicaré a continuación.

Ojo: si veis que no hay ninguna noticia puesta, probad de añadirlas con el link que hay ya que en un post anterior puse el scaffolding para testear y es posible que alguien lo haya borrado para probarlo.

Para usar la paginación en nuestra web necesitaremos proceder en 3 pasos:

  1. En el controlador: cargar la librería con la configuración que deseemos.
  2. Modificar la consulta de la base de datos para que nos muestre sólo una parte en vez de todos los resultados.
  3. Añadir los enlaces (los números) para que el usuario pueda navegar a través de las páginas generadas.

26abr/0813

Gestor de noticias (Tercera parte): Vistas y bases de datos

Bueno seguiremos un poco más con nuestro taller del "Gestor de Noticias" en CodeIgniter.

Retomando el código del taller anterior, donde hicimos nuestro primer "Hola Mundo", haremos que se cargue ese controlador juntamente con las vistas que generamos en el primer taller (en el que partimos nuestro diseño en una cabecera y un pie de página). Ya de paso crearemos un archivo en la carpeta views/ que será nuestra vista para la función "leer" de nuestro controlador "noticias", y ahí pondremos nuestro "Hola mundo", ya que la gracia de todo esto es dividir nuestra aplicación en modelos, vistas y controladores, por lo que cualquier salida de texto por pantalla debería estar en una vista y no en un controlador. La cosa quedaría así: