Atrevete a bajar de peso y mejorar tu salud con una gran aplicación web

Logo desafío de peso

Hace tiempo desarrolle un proyecto llamado www.desafiodepeso.com , junto a un gran webdesigner y una gran idea engendrada por unas expertas en nutrición que decidieron crear una aplicación web al estilo social network para poder bajar de peso compitiendo contra miembros de tu lugar de trabajo, llevando en todo momento una dieta balanceada hecha especialmente para tí, con graficas de avances y notificaciones por mail así como un “consultorio virtual” donde podras tener asesoría por un experto en nutrición que te guiara y te ayudara a por fin eliminar los kilos de mas y llevar una vida saludable fácil y divertido.

Les dejo unas pantallas del sistema.

Inscriban a su empresa. 😀

Pantalla principal

captura-de-pantalla-2009-09-10-a-las-230252

Pantalla de registro

captura-de-pantalla-2009-09-10-a-las-230659

Pantalla Principal del usuario.

captura-de-pantalla-2009-09-10-a-las-230726

Pantalla de avance de usuario y marcador

captura-de-pantalla-2009-09-10-a-las-230826

Consultorio Virtual

captura-de-pantalla-2009-09-10-a-las-230741

El proyecto esta enteramente desarrollado con Zend Framework, Xhtml y jQuery.

Instalar xDebug en mac con Xampp y Netbeans

Posiblemente si llegaste aquí es por que seguramente eres un feliz usuario de mac deseando instalar un buen “debugger” para saber el estado de tus variables durante la ejecución del código o bien encontrar errores cuando programas con PHP.

Para tener un flamante Netbeans con Xdebug para mac es necesario seguir estos pasos.

  1. Instalar XAMPP para Mac
  2. Instalar la versión develpment XAMPP
  3. Bajar el código fuente de xDebug
  4. Crear una carpeta en donde tu desees, de preferencia de fácil acceso ejemplo directamente en el disco local “Macintosh HD/xdebug”

Carpeta Xdebug

  1. Copiar el archivo que bajamos del código fuente de xdebug dentro de la carpeta que acabamos de crear

Archivo XDEBUG

  1. Abrir la consola o terminal, para encontrar esto solo basta escribir en spotlight “Terminal

Terminal mac

  1. Ya abierta la terminal usamos el comando CD para moverlos a la carpeta que creamos tecleando “cd /xdebug

Terminal mac

  1. Ya estando dentro de esta carpeta descomprimimos el archivo tar.gz que bajamos del código fuente, simplemente escribimos tar -xzf xdebug-2.0.5.tgz

imagen-6

  1. Entramos a la carpeta descomprimida “cd xdebug-2.0.5
  2. Ejecutamos phpize para preparar nuestro xdebug, poniendo el path absoluto “/Applications/XAMPP/xamppfiles/bin/phpize-5.2.9” para que sea compilado con nuestra versión de PHP, para obtener algo como esto.

phpize

  • Ahora necesitamos compilar xdebug escribiendo “./configure –enable-xdebug –with-php-config=/Applications/XAMPP/xamppfiles/bin/php-config“, para asegurarnos de que se configure con la configuración de PHP instalada.

Si todo sale correctamente, se generara un archivo xdebug.so dentro de la carpeta “xdebug-2.0.5/build” ahora solo nos queda agregar nuestro archivo compilado a la ruta del php.ini que se encuentra en “/Applications/XAMPP/etc

; Configuración de Zend extension
[xdebug]
zend_extension=”/xdebug/xdebug-2.0.5/build/xdebug.so
xdebug.file_link_format = “txmt://open?url=file://%f&line=%l”
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9001

Nota. use el puerto 9001 por que en la mac a veces el puerto 9000 esta ocupado por alguna aplicación de ADOBE.

Ahora podemos comprobar en un archivo phpinfo.php que la extensión fue agregada correctamente.

zend extension

Lo único que falta es configurar netbeans y listo :)

Abrimos netbeans, y nos vamos al menu Netbeans/Preferences/Php y configuramos el puerto 9001

netbeans en mac

Ahora ¿qué tal? feliz debug ehh..

xdebug netbeans

ActionOsForm, una forma fácil de actualizar una Base de datos con PHP

Hace tiempo, cuando iniciaban los Frameworks para el desarrollo rapido de aplicaciones, en los tiempos de luz de Struts, Ruby on Rails, CakePHP, etc etc, uno no podía concebir para desarrollos rápidos o no orientados a objetos, existiera una manera facil rapida y escalable de hacer CRUD en una base de datos con validación de los datos “on the fly“, la pregunta obligada era ¿como puedo acoplar toda mi lógica de negocio?, a un sistema MVC como lo es un framework, sin mover todo mi código y bien solo tocar las partes que pueden crecer, como son los datos pedidos por una aplicación, hay muchos sistemas pequeños que no usan la lógica de negocio separada en capas y estan acostumbrados a usar una sola capa, ya que esto fue la punta de lanza del por que PHP triunfo en internet, era accesible hacer un “hello world” en 3 segundos, no obstante esto desemboco en sistemas poco escalables y dificil de mantener, por esto decidi hacer esta clase que funciona en el modelo a una capa, pero que permite, validar datos con reglas REGEX, ActionOSForm, es una clase pensada en mejorar esto, ya es código viejo, pero puede servir para mostrar alguna técnica, de optimización y reducción del código que se escribe dia con dia.

Vamos a hacer un ejemplo practico del cambio de paradigma y como nos ayuda ActionOsForm.

Tenemos una Base de datos con esta estructura.

Nombre de Tabla: Maestros

Campos: id_maestro,nombre, apellidos, RFC, claveAccesso,nivelAcceso

Necesitamos un sistema de altas, bajas y modificaciones, para esta tabla, en una aplicación tradicional en PHP, crearíamos un formulario y mandariamos los datos por POST hacia una pagina que procesaria los datos de nuestro formulario. En una aplicación tradicional hariamos esto.

Formulario HTML

Registro Maestro

Este formulario con los nombres de campos llamados, nombre, apellidos, y RFC respectivamente, van a ser enviados a una pagina llamada procesar.php, nuestro archivo procesar, se va a encargar de recibir estos datos, y registrarlos en una base de datos, en este caso mySQL.

En nuestra aplicación tradicional usando las funciones habituales de insersión de datos con mysql, procederiamos de la siguiente manera, en nuestro archivo procesar, vamos por pasos.

1.- Recibir los datos del formulario.

//Recibiriamos los datos por medio de POST
$nombre = $_POST['nombre'];
$apellidos = $_POST['apellidos'];
$rfc = $_POST['rfc'];

2.- Validar el formulario:

Aquí viene una de las grandes ventajas de ActionOsForm, en este momento nuestro formulario se ve muy sencillo de validar, ya que solo son pocos datos, ¿pero que sucede si un dia de estos nos dicen que agreguemos 15 campos mas para los datos del Maestro, seria tedioso crear una comprobación por cada campo suponiendo, que una validación simple podria ser de esta manera.

if(trim($nombre)!="" && trim($apellidos)!="" && trim($rfc)!=""){
	//Proceder a insertar los datos
}

Sorprendente el tamaño del IF o la condición que se tendría que crear para actualizar los demas, campos, Pero ¿Que tal si cada campo necesita un tratamiento de validación especial? como el RFC, que como ustedes saben o algunos tal vez no, es una clave que nos identifica a los Mexicanos, imaginemos que dentro de estos campos viene, también una fecha, una CURP, o tal vez un numero de identificación que cumple con algún patrón especifico. Tal vez podríamos hacer algo como esto…

2.1: Validación mas especifica

function isRFC($cadena)
{
$cadena = trim($cadena);
if(ereg("[a-zA-Z]{4}([0-9]{6})([A-Z0-9]{3})?$",$cadena))
	{
	return true;
	}else
		{
		return false;
		}
}
function isCURP($cadena)
{
$cadena = trim(strtoupper($cadena));
if(ereg("[a-zA-Z]{4}([0-9]{6})([A-Z]{6})([0-9]{2})$",$cadena))
	{
	return true;
	}else
		{
		return false;
		}
}
if(trim($nombre)!="" && trim($apellidos)!="" && isRFC($rfc) && isCURP($rfc) && N....){
	//Proceder a insertar los datos
}

No obstante, imaginemos el escenario, para actualizar un sistema de este tipo, tendriamos que aumentar el if, o bien hacer un if else if, sin embargo esto se vuelve tedioso con el tiempo, cuando se necesitan agregar nuevos tipos de datos al sistema o mas campos por validar, esto es lo que nos viene a resolver y ayudar ActionOsForm, como lo veremos mas adelante esto nos da un mayor control, de los mensajes de error y la encapsulación del proceso.

3.- Inserción de en la DB

$con = mysql_connect("localhost","usuario","password");
$sqlStr = "INSERT INTO Maestros (nombre,apellidos,RFC) VALUES ('".$nombre."','".$apellidos."','".$RFC."')";
$consulta = mysql_query($sqlStr,$con);

Volvemos a la misma tarea tediosa a la hora de actualización, si nos pidieran agregar 15 campos a la inserción, tendriamos que modificar esta consulta y concatenar, realmente no tenemos tiempo para tareas tediosas, imaginemos, al momento de la actualización y el borrado, es hora de conocer ActionOsForm.

Archivo procesar.php Completo

//Recibiriamos los datos por medio de POST
$nombre = $_POST['nombre'];
$apellidos = $_POST['apellidos'];
$rfc = $_POST['rfc'];

function isRFC($cadena)
{
$cadena = trim($cadena);
if(ereg("[a-zA-Z]{4}([0-9]{6})([A-Z0-9]{3})?$",$cadena))
	{
	return true;
	}else
		{
		return false;
		}
}
function isCURP($cadena)
{
$cadena = trim(strtoupper($cadena));
if(ereg("[a-zA-Z]{4}([0-9]{6})([A-Z]{6})([0-9]{2})$",$cadena))
	{
	return true;
	}else
		{
		return false;
		}
}
if(trim($nombre)!="" && trim($apellidos)!="" && isRFC($rfc) && isCURP($rfc) && N....){
	//Proceder a insertar los datos
}

//validamos los datos
if(trim($nombre)!="" && trim($apellidos)!="" && trim($rfc)!=""){
	//Proceder a insertar los datos
    $con = mysql_connect("localhost","usuario","password");
	$sqlStr = "INSERT INTO Maestros (nombre,apellidos,RFC) VALUES ('".$nombre."','".$apellidos."','".$RFC."')";
	$consulta = mysql_query($sqlStr,$con);
}else{
	echo "Datos incorrectos";
}

5.- Hagamos lo mismo con ActionOsForm, Para usar esta clase solo hace falta incluirla y utilizar los metodos para validar e insertar los datos, y sin escribir ninguna consulta SQL, ni tampoco una expresión regular para validar los datos. Todo lo anterior se puede resumir con ActionOsForm, a este codigo.

include("WEB-INF/class/actionOsForm.php");
	$registro = new actionOsForm('Maestros');
		$registro->activeData($_POST);
		if($registro->validateForm())
			{
			$registro->doInsert();
				if($registro->getNumErrors()==0)
					{
					echo "Registro insertado y validado";
					}else{
					$registro->getErrors();
					}
			}else{
			$registro->getErrors();
			}

Ahora, ¿como funciona?, este pedazo de codigo, ya válido los datos, por su tipo de datos, y encapsulo el posible error para que si no pasa la validación todo el formulario, regresar un arreglo con los errores generados en la validación..

Explicación linea a linea:

En esta linea incluimos la clase que se hara todo el trabajo pesado

include("WEB-INF/class/actionOsForm.php");

Creamos un nuevo objeto ActionOsForm Pasándole como argumento al constructor, la tabla en la que insertara los datos.

$registro = new actionOsForm('Maestros');

Pasamos los datos enviados por el formulario al método que contendría todos nuestros datos, con su respectivo tipo de datos.

$registro->activeData($_POST);

Esta sentencia condicional se encarga de validar todo el formulario entero, ya sean, nombres, apellidos, fechas, RFC, CURP, telefono, codigo postal, numeros, y regresa TRUE, en caso de que todos los datos sean validos y esten listos para sen insertados en la base de datos, en caso contrario, regresa FALSE y guarda en un Array Todos los errores de validación que pudieran surgir durante el proceso.

if($registro->validateForm())

Si los datos son validos, llamamos al método doInsert, encargado de crear una consulta SQL adecuada para ingresar los datos en la DB

$registro->doInsert();

Si cualquiera de los dos métodos, regresa FALSE podemos obtener los errores de inserción con el método..

$registro->getErrors();

Hasta la próxima :D, ¿parece útil no?, ¿Por que escribir tediosas consultas SQL, o validar datos, con expresiones regulares, si ActionOsForm lo puede hacer por ti, el codigo mencionado arriba, puede servir para 1 o para 100 campos sin aumentar ni una linea de código.