Tutorial para Crear una Aplicación de Libro de Visitas con CodeIgniter

Hola que tal!

En este tutorial de CodeIgniter, te mostrare los fundamentos basicos mientras desarrollamos una aplicación de libro de visitas muy simple.

Para empezar, necesitarás la edición más reciente de CodeIgniter, por lo tanto, puedes descargalo desde su sitio web aquí y al terminar solo debes cargar todos los archivos en la raíz del sitio.

Qué es CodeIgniter

CodeIgniter es un framework de PHP creado por EllisLab, el creador de Expression Engine en un entorno de desarrollo abierto (licencia Open Source Apache/BSD-style). Que permite crear sitios webs dinámicos con PHP. Para ampliar tu conocimiento sobre ¿Qué es CodeIgniter? entra aquí.

CodeIgniter utiliza el patrón de arquitectura Model View Controller (MVC) que te ofrece la flexibilidad necesaria para reutilizar, modificar y actualizar el código.

Si navegas por los archivos de CodeIgniter, ve a la carpeta de la aplicación (System -> Application) donde veráz 3 subcarpetas con los nombres: modelos, controladores y vistas (models, controllers and views). Un controlador controlará lo que los usuarios pueden ver en su pantalla y un modelo se utiliza para ejecutar varias funciones. La vista es simplemente una plantilla.

Tutorial del libro de visitas con CodeIgniter

El controlador de ejemplo que usarémos a continuación se llama “Welcome.php”. Para cambiar el controlador predeterminado, necesitaremos cambiar el archivo llamado Routes.php que se encuentra dentro de la carpeta Config. Desplázate hasta la parte inferior del archivo y encontrarás:

$route['default_controller'] = "welcome";

Cambia “Welcome” a “guestbook” porque cambiaremos el nombre del controlador más adelante a “guestbook.php“. Pero primero abre el archivo database.php config file (System -> Application -> Config -> database.php) y actualiza la configuración de la base de datos.

$db['default']['hostname'] = "localhost";
$db['default']['username'] = "root";
$db['default']['password'] = "";
$db['default']['database'] = "guestbook";
$db['default']['dbdriver'] = "mysql";

Ahora crea un archivo vacío y guárdalo en la carpeta de los controladores con el nombre “guestbook.php”. En este archivo PHP vamos a crear una clase PHP llamada “Guestbook” que extiende la clase principal “Controller”.

class Guestbook extends Controller {
}

En nuestra función de construcción (construct function), debemos decirle a nuestra clase que se utiliza el controlador de clase padre. Creamos también nuestra primera función llamada “index”.

class Guestbook extends Controller {
function __construct() {
parent::Controller();
}
function index() {
echo "Hello World";
}
}

Si inicias tu sitio de prueba, deberías ver “Hello World” en la pantalla. Vuelve a abrir el archivo del controlador, y elimina el código de ejemplo “hello world” y guarda de nuevo el archivo. A continuación, crearemos nuestra base de datos y nuestro modelo. La base de datos solo necesita una tabla con solo 4 campos comment_id (int 11), name (varchar 255), url (varchar 255) y comment (text). Y luego vamos a importar esta declaración de SQL a través de phpMyAdmin o cualquier otra herramienta de MySQL.

CREATE TABLE guestbook.comments (
comment_id INT( 11 ) NULL AUTO_INCREMENT ,
name VARCHAR( 255 ) NOT NULL ,
url VARCHAR( 255 ) NOT NULL ,
comment TEXT NOT NULL ,
PRIMARY KEY ( comment_id )
) ENGINE = MYISAM;

Para el modelo, creamos un nuevo archivo dentro de la carpeta de modelos (System -> Application -> Models) y le asígnaremos el nombre “guestbook_model.php”. Dentro del archivo, crea la clase Guestbook_model que amplía la clase de modelo principal. Como el controlador que creamos antes.

class Guestbook_model extends Model {
function __construct() {
parent::Model();
}
}

Ahora solo necesitamos dos funciones para nuestro modelo: una para publicar entradas y otra para leerlas de la base de datos. Para usar las diversas bibliotecas disponibles en CodeIgniter, primero debemos cargarlas. Un buen lugar para cargar nuestra base de datos es la función de construcción.

class Guestbook_model extends Model {
function __construct() {
parent::Model();
$this->load->database();
}
}

En lugar de cargar la biblioteca en cada modelo individual, podemos cargarlos utilizando la función de autocarga. Abre el archivo autoload.php (System -> Application -> Config -> autoload.php) y añadae las bibliotecas de nombres de la matriz.

$autoload['libraries'] = array();

Debes colocar los nombres de cada biblioteca que te gusta cargar para usar.

$autoload['libraries'] = array('database');

Volvemos al modelo y crearemos la primera función “view”.

function view() {
$sql = "SELECT * FROM ". $this->table ." ORDER BY comment_id DESC";
}

Primero necesitamos definir la variable llamada “table”. Esta variable nos da la libertad para cambiar el nombre de la tabla más tarde sin la necesidad de cambiar nuestro código PHP. La función usará alguna declaración SQL para consultar nuestra base de datos para las entradas del libro de visitas y devolverá los datos.

function view() {
$sql = "SELECT * FROM ". $this->table ." ORDER BY comment_id DESC";
$query = $this->db->query( $sql );
return $query->result_array();
}

Ahora necesitamos escribir una función para agregar nuevas entradas en la base de datos.

function insert( $data = array() ) {
$data["name"] = $this->db->escape_str($data["name"]);
$data["url"] = $this->db->escape_str($data["url"]);
$data["comment"] = $this->db->escape_str($data["comment"]);
$data["name"] = htmlspecialchars( $data["name"] );
$data["url"] = htmlspecialchars( $data["url"] );
$data["comment"] = htmlspecialchars( $data["comment"] );
$sql = "INSERT INTO ". $this->table ." (comment_id, name, url, comment) VALUES ('null', '". $data["name"] ."', '". $data["url"] ."', '". $data["comment"] ."')";
return $this->db->query( $sql );
}

El código anterior es realmente sencillo, escapamos de los datos utilizando htmlspecialchars para evitar ataques XSS e insertar los datos en la tabla de comentarios. Ahora hemos terminado con el modelo y podemos seguir trabajando para que funcione el controlador. CodeIgniter no proporciona acceso directo a $_POST y $_GET vars por razones de seguridad. Esta es la razón por la cual los procesamos primero usando la clase de entrada nativa:

$this->input->post("post_name");

En nuestro controlador, creamos un objeto de entrada para nuestros datos de publicación y dejamos que CodeIgniter verifique lo que el usuario ha enviado como comentario.

class Guestbook extends Controller {
//...
function index() {
if( $this->input->post("submit") ) {
$data = array(
"name" => $this->input->post("name"),
"url" => $this->input->post("url"),
"comment" => $this->input->post("comment")
);
$this->Guestbook_model->insert( $data );
}
}
}

A continuación, debemos tomar las entradas usando nuestra función de vista en el modelo de libro de visitas y pasar los datos al archivo de la plantilla.

class Guestbook extends Controller {
// ...
function index() {
$data = array();
$data["posted"] = false;
if( $this->input->post("submit") ) {
$data = array(
"name" => $this->input->post("name"),
"url" => $this->input->post("url"),
"comment" => $this->input->post("comment")
);
if( $this->Guestbook_model->insert( $data ) ) {
$data["posted"] = true;
}
}
$data["entries"] = $this->Guestbook_model->view();
$this->load->view("guestbook.php", $data);
}
}

Ahora tenemos que lidiar con un poco más de código, primero creamos una matriz llamada data que contiene un único valor predeterminado “false”. Siempre que se envíe el formulario de comentarios, los datos se verificarán y se agregarán a la base de datos.

La función establecerá el valor del nombre del elemento del conjunto de datos “posted” en “true”.

Después de eso leemos los datos llamando a la función view de nuestro modelo de libro de visitas ( guestbook model) y devolvemos los datos en un formato de matriz. Ahora llamamos a la función de vista de carga y le decimos a CodeIgniter que abra la plantilla con el nombre guestbook.php. La matriz con el nombre $data se pasara a la plantilla. Finalmente, necesitamos crear la plantilla.

Creamos un archivo vacío dentro de la carpeta de vistas “views” (System -> Application -> Views) y le asígnamos el nombre guestbook.php. Colocamos todo el código HTML en este archivo de plantilla. CodeIgniter analizará la plantilla y pasará la matriz $data a diferentes lugares dentro de la plantilla. Por ejemplo, si pasaste esta matriz:

$data["test"] = "Hello";

en el archivo de vista “view”, entonces podría hacer “echo” del valor de la matriz usando $test

echo $test; // Would output "Hello"
Así que vamos a recorrer los resultados de nuestra base de datos y repetirlos en una lista desordenada.

echo '

    • ';

 

    • foreach( $entries as $entry ) {

 

}
echo '

';
?>

Finalmente, necesitamos agregar un formulario simple para publicar nuevas entradas en el libro de visitas.

He agregado una declaración IF para verificar si una entrada se ha enviado correctamente. Si la entrada fue enviada, aparecerá un mensaje de agradecimiento en la parte superior del libro de visitas.


echo '

    • ';

 

    • foreach( $entries as $entry ) {

 

}
echo '

';
?>

Submit a comment

Name


Listo eso es todo, espero que este tutorial de PHP sea un buen punto de partida si consideras usar CodeIgniter para tus proyectos de PHP. Si tienes alguna duda puedes dejar un comentario.