Creando una aplicación web con PHP (Parte 2)

Buenas tardes a todos los que visitana mi blog!. Tratare de ser mas constante ya que esta serie de posts que intento hacer no sirven de nada si solo pongo una parte! asi que tratare de irme un poco mas rapido para que tengan sentido estos posts!.

Bueno si recuerdan en el post anterior solo hicimos uso de los “includes” y “requires”, ahora lo que vamos a hacer es organizar nuestra pagina (modificar el codigo HTML) para que quede ya a nuestro gusto y empezar con la base de datos que vamos a usar en mysql y empezar a cargar contenido desde la base de datos y obviamente importante conectarse a una base de datos de mysql.

Bueno primero que nada hay que modificar el template que bajamos y poner los titulos y el contenido (que sera estatico por el momento) que nosotros queramos!, por ejemplo el mio quedo asi:

Instalar la base de datos en mySQL

Bueno no vamos a ver mucho sobre mysql, la base de datos yo la hice en mysql workbench usando diagramas EER, en realidad es muy facil crear bases de datos con esos diagramas, la base de datos que usaremos es la siguiente:

Como podemos ver habrá 2 tipos de usuarios (desde un principio el administrador del blog, y los usuarios que se pueden registrar y escribir contenido).

Ok para instalar esta base de datos simplemente ejecutemos este script que contiene el esquema completo de la base de datos y además contiene datos ya predefinidos para ya empezar a cargar contenido desde la base de datos.

una vez ejecutado este script ya tendremos la base de datos con las tablas e información predefinida, que podemos observarla si hacemos consultas en mysql.

Realizar la conexión a mysql

Primero que nada antes de querer cargar contenido al blog, tenemos que realizar obviamente la conexion a mysql, y esto es relativamente facil, pero lo haremos de una forma util. primero que nada vamos a dejar nuestro proyecto de netbeans asi:

image

Creamos una carpeta llamada clases y otra llamada config. En la primer carpeta como es evidente guardaremos todas las clases que utilizaremos y por el momento hemos creado una clase que se llama “FuncionesComunes” y dentro de config hay otra clase que se llama balusoftcfg esta clase contendra toda la informacion util de nuestro sitio, por el momento solo la conexion a la base de datos.

Para comenzar con la conexion, editaremos el archivo de configuracion:

image

Por el momento no contiene nada mas que la declaracion de la clase, lo que haremos es agregar 4 propiedades a esta clase, que son la direccion de nuestro servidor mysql, el usuario que se conectara, la contraseña y la base de datos que utilizaremos:

image

yo he puesto la informacion referente a mi servidor mysql, ustedes pondran la informacion correspondiente. Ahora lo que haremos es crear un metodo que servira para iniciar la conexion al servidor, crearemos un metodo llamado “iniciar_conexion”.

image

hacemos uso de la funcion “mysql_connect” existente en php y esta nos facilita extremadamente mucho la conexion al servidor mysql y mysql_select_db para evidentemente seleccionar la base de datos que vamos a usar y bueno aqui va una pequeña explicacion del o que se ve aqui:

Primero que nada estamos trabajando con php orientado a objetos, es obvio, hicimos una clase, atributos,etc si han trabajado con cualquier otro lenguaje orientado a objetos no creo que se les dificulte esto, con $this estamos haciendo referencia a esa misma clase ya sea para acceder a metodos o a propiedades de esa misma clase y el  “->” es como el punto en cualquier otro lenguaje, por ejemplo en Java seria  this.mysql_connect(); entonces en php es $this->mysql_connect(); es sencillo!. El “or die” creo queda mas que claro, sirve para manejar los errores que se lleguen a dar en ciertas instrucciones, es mas util un try catch como en otros lenguajes pero en php por el momento es asi (segun lei ya existen los try catch pero no son muy eficientes)

Ya tenemos un metodo que inicia la conexion, ahora lo que haremos es un metodo que va recibir como parametro una cadena, esta cadena sera la consulta sql que vamos a escribir cada vez que mandemos a llamar este metodo, este metodo se llamara “ejecutar_sql”.

image

Aqui en la linea 23 hacemos uso del metodo que hemos creado anteriormente, en la siguiente linea hacemos uso de la funcion “mysql_query” que evidentemente sirve para ejecutar sentencias sql en una conexino que ya se realizo, esta funcion nos devuelve un tipo de arreglo bidimencional (o sea una tabla), lo guardamos en la variable $result. Posteriormente cerramos la conexion del servidor y devolvemos el resultado de la consulta a donde sea que se llame a mandar esta funcion.

Ahora si ya tenemos lo mas importante, empecemos con las clases.

Clase entrada.php y entradaDAL.php

Lo que vamos a hacer es “mapear” toda la base de datos, osea prácticamente crearemos una clase por tablas ( no todas las tablas), para mi es mejor crear una “vista” en mysql y de esa crear una clase en php, lo haremos mas delante, pero por el momento solo queremos poder visualizar todos los posts que hay en la base de datos, asi que crearemos estas 2 clases e iremos viendo para que estas 2:

image

Creamos una clase “DAL”, ya lo hemos visto en posts anteriores, pero esta clase es la llamada “Data Acces Layer” ya que estaremos trabajando en algun tipo de modelo de 3 capas: capa de negocios (Entrada.php), capa de datos (EntradaDAL y BALUSOFTCFG) y la capa de usuario (en este caso index.php). Entonces en Entrada.php tendremos el modelo, o sea una clase que va a contener las propiedades de una entidad, en este caso es la tabla Entrada. asi que crearemos las propiedades de cada campo que tiene dicha tabla:

Entonces en Entrada.php iremos haciendo lo siguiente

image

Primero que nada agregamos las propiedades de la clase, que si se fijan son los campos de la tabla entrada, ahora haremos uso de una pequeña utilidad que AMO, es muy util para mi y es el de insertar codigo en netbeans, lo que hacemos aqui, escribimos nuestras propiedades y luego damos “ALT + INSERT” y nos aparecera esa lista desplegable y nos dara varias opciones para que netbeans inserte codigo automaticamente, vamos a elegir la de “Getter and Setter” y nos aparecera la siguiente ventana.

image

Aqui seleccionaremos las propiedades de la clase Entrada que queramos que se genere un Get y un Set, espero y sepan a lo que me refiero y si no, simplemente den clic en OK.

Y la clase quedara de esta manera:

image

Ahora si queda claro, automáticamente se genera un get y un set por cada propiedad que tengamos en nuestra clase.

Ya tenemos nuestro modelo, ahora vamos a trabajar en la clase EntradaDAL.php para alli realizar todos los metodos de obtencion de datos de la base de datos, en este caso sera obtener los primeros 5 posts mas recientes (por el momento solo hay uno por default en la base de datos), entonces nos vamos a EntradaDAL.php y crearemos el siguiente metodo:

image

Trate de dejarlo comentado para mayor comprensión, pero igual lo explicare:

Lo que hace esta función es simplemente ejecutar una consulta y devolver un arreglo con objetos de tipo Entradas, creo importante comprender bien esta parte porque esto es la clave de todo y asi haremos todas las demas consultas.

Que contiene $result?  (vista logica)

image

Cuando ejecutemos la funcion ejecutar_sql siempre estamos devolviendo una tabla como la de nuestra izquierda, esta tabla contiene los resultados de la consulta que hemos realizado, pero tenemos que “descomponer” este arreglo bidimensional en un arreglo o vector común y corriente, es por eso que usamos mysql_fetch_array y como parámetro damos el resultado, este paradigma es igual en todos los lenguajes, siempre, siempre se nos devuelve una tabla en cualquier lenguaje de programacion, simplemente se hace diferente en cada lenguaje. Cuando mandamos a llamar esa funcion “mysql_fetch_array” literalmente nos esta devolviendo una fila de la tabla resultado que hubo, y cada vez que volvemos a llamar esa funcion nos devuelve ahora la siguiente fila del resultado ( si es que la hubo), y si ya no hay resultados, simplemente nos devuelve NULL.

Mostrar las primeras Entradas en la pagina principal index.php

Ahora lo que vamos a hacer es hacer uso de esta funcion que acabamos de crear y la usaremos en index.php

Primero que nada dentro de index.php vamos a incluir el codigo que hemos escrito anteriormente y lo hacemos con require_once en vez de require, utilizo para ver la diferencia tambien. Require_once sirve para incluir codigo de un archivo .php igual que require, pero require_once se incluye si no ha sido incluido anteriormente (suele pasar), entonces si ese archivo ya sido incluido anteriormente, con require_once ya no se incluye, ya que si se incluye 2 veces suele dar error.

image

En realidad solo necesitamos EntradaDAL y el archivo de conexion, igual tal vez mas delante la utilizaremos, ahora vamos a mandar a llamar la funcion que escribimos en EntradaDAL y nos devolvera un arreglo de objetos y esos objetos, con los metodos get, podemos obtener la informacion que queramos, lo haremos de la siguiente manera (espero y no se confundan, porque aqui existira codigo php y codigo HTML) recuerden que codigo PHP siempre va dentro de las etiquetas <?php ?> y estas etiquetas se pueden distribuir por todo el archivo .php, pero dentro de estas etiquetas NUNCA ira codigo HTML literal, puede existirlo con funciones echo.

NOTA: Por error no incluí un campo llamado “titulo” a la tabla Entrada, yo se lo agregue con mysql WorkBench, y posteriormente se lo agregue a las clases Entrada y EntradaDAL, aqui les pongo como:

imageimage

Y aceptamos.

Agregar en Entrada.php

image

Agregar en EntradaDAL.php

image

Bueno continuamos, disculpen Enamorado

Entonces ya para terminar les enseñare como obtener los datos e incluirlos en el index.php

Veremos a primera vista todo el codigo:

image

Ahora lo veremos en partes :

Primero los require_once, ya los vimos mas arriba, lo importante aquí es todo lo que dejamos dentro de las etiquetas div “content”, hay que abrir la imagen en otra pestaña mejor

primero que nada en la linea 10 creamos un objeto de la clase EntradaDAL para poder hacer uso del metodo que hemos creado, en la linea 11 mandamos a llamar la funcion que nos va a devolver un arreglo de objetos tipo Entradas, lo importante aqui es el bucle for que estamos creando, si se dan cuenta estamos combinando codigo php y HTML, no se asusten esto es normal al final y al cabo si estamos organizando “medio bien” nuestro proyecto al hacerlo en “capas”. Primero que nada en la linea 13 iniciamos el ciclo for y recuerden $lista es un arreglo, entonces con sizeof obtenemos el tamaño de ese arreglo para asi recorrer cada elemento del arreglo (que cada uno es un objeto tipo Entrada), entonces obtenemos el elemento segun el indice del ciclo for (eso en la linea 14) y si se dan cuenta no cerramos el ciclo for, pero si cerramos codigo php con ?> y apartir de alli empezamos con codigo HTML y es el codigo de nuestra plantilla.

Ahora en la linea 17 aqui va en codigo HTML nuestro titulo de la entrada, y donde debe de ir literalmente letras comunes y corrientes, insertamos codigo PHP

image

Iniciamos las etiquetas <?php para poder insertar mas codigo php, recuerden todo este proceso se encuentra dentro del ciclo for, aunque HTML no este dentro de las etiquetas <?php ?> el codigo HTML se repetira segun el ciclo FOR. Recuerden que obtuvimos el objeto en la linea 14, el objeto maravillosamente tiene sus metodos GET y con estos siemplemente obtenemos el valor y con echo imprimimos literalmente en esa parte el valor de getTitulo, es de esa manera que nosotros vemos el titulo que se contenia.

hacemos lo mismo con lo demas y los demas elementos (lineas 18 y 22)

en la linea 25 es donde cerramos el ciclo FOR

image

y es asi como ya se mostraran los primeros 5 posts esto es inutil si no se ordenan por fecha, solo tendriamos que cambiar la consulta en… emm ya sabran donde Sonrisa

El resultado sera este si en la tabla Entrada tenemos lo siguiente:

image

image

Esto es todo por esta entrada, espera y a alguien le sirva Sonrisa, ya que este es mas practico que los 2 posts anteriores Sonrisa

Saludos! and Code4Fun

 

Edito: Aquí les dejo el código fuente de esta entrada, pronto estaré trabajando en la parte 3. saludos!  enlace

Anuncios

17 comentarios sobre “Creando una aplicación web con PHP (Parte 2)

  1. mmm muy detallado pero tengo un atoron que despues comento no quiero verme como tonto soy nuevo con php y lo voy hacer de nuevo!!!
    Gracias por el blog!!!!

  2. Gracias finalmente lo eh logrado todo me ha salido a la perfeccion!!! Ahora estoy en espera de la tercera parte para seguir aprendiendo ya que en mi trabajo me es de mucha utilidad espero logres tener un tiempo para la tercera parte!!!!

    Gracias!!!

  3. Te recomiendo que repases los paradigmas de programación orientada a objetos, te falta abstracción.
    tambien te recmiendo que veas diseño en capas.

  4. no consigo conectar con la base de datos. me sale un error como este:

    Warning: mysql_connect() [function.mysql-connect]: Access denied for user ‘balusoft’@’localhost’ (using password: YES) in C:\xampp\htdocs\Balusoft\config\Balusoft.php on line 22
    ha ocrrido un error al intentar conecatar a la base de datos

  5. Hola,tengo un problema, si alguien me puede ayudar..
    Ocurrio un error al intentar seleccionar la base de datos Unknown database ‘balusoft’
    No se a que se debe el problema.. (tengo instalado xampp y workbench)
    saludos!

  6. tengo un problema con la linea: getTitulo()) ?>, siempre me sale: Fatal error: Call to a member function, sabes que puede ser?? he hecho el debug, y la $lista si tiene los datos, pero a la hora de obtener el titulo me da el error, te agradezco cualquier ayuda.

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