Curso básico Codeigniter

Curso Codeigniter básico 5/5

Por último, vamos hacer una conexión a base de datos en donde usaremos un modelo y la clase que proporciona codeigniter para hacer querys

Para esta entrada iremos completando estos puntos:

  1. Crear la base de datos y una tabla con datos
  2. Modificar el archivo de configuración database.php (nombre de usuario, password, nombre la BD)
  3. Agregar en autoload.php un parámetro para usar la clase que forma querys
  4. Crear nuevo item en el menú para mostrar datos de ejemplo
  5. Crear Modelo
  6. Crear Controlador
  7. Crear Vista

Comencemos

1. Vamos a phpmyadmin y creamos una base de datos, en este caso la llamé ‘codeigniter’ y le creamos una tabla llamada ‘usuarios’ con estas columnas:

CREATE TABLE `usuarios` (
  `id` int(5) NOT NULL,
  `nombre` varchar(20) NOT NULL,
  `apellido` varchar(30) NOT NULL,
  `correo` varchar(50) NOT NULL,
  `edad` varchar(3) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
 
ALTER TABLE `usuarios`
  ADD PRIMARY KEY (`id`);


Recuerda que en el zip de esta entrada hay comentarios en el código que ayudan a comprender mejor el código.

2. Ahora vamos a modificar el siguiente archivo en /application/config/database.php para poner los datos de conexión como se ve a continuación:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

$active_group = 'default';
$query_builder = TRUE;

$db['default'] = array(
	'dsn'	=> '',
	'hostname' => 'localhost',
	'username' => 'root',        // Nombre de usuario
	'password' => '',			 // Para el ejemplo no hay password
	'database' => 'codeigniter', // Nombre de la Base de datos
	'dbdriver' => 'mysqli',
	'dbprefix' => '',
	'pconnect' => FALSE,
	'db_debug' => (ENVIRONMENT !== 'production'),
	'cache_on' => FALSE,
	'cachedir' => '',
	'char_set' => 'utf8',
	'dbcollat' => 'utf8_general_ci',
	'swap_pre' => '',
	'encrypt' => FALSE,
	'compress' => FALSE,
	'stricton' => FALSE,
	'failover' => array(),
	'save_queries' => TRUE
);

3. Para usar la clase que ayuda a formar querys tenemos que activarla en /application/config/autoload.php cerca de la línea 61. Solo hay que agregar un parámetro como se muestra aquí:

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

4. Ahora tenemos que crear un item en el menú, es decir, en /application/views/body/menu.php donde al dar click, veremos algunos ejemplos de querys, veamos:


<nav class="navbar navbar-default navbar-fixed-top" role="navigation">
   <div class="container">
      <!-- Brand and toggle get grouped for better mobile display -->
      <div class="navbar-header">
         <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target=".navbar-collapse.collapse">
         <span class="sr-only">Toggle navigation</span>
         <span class="icon-bar"></span>
         <span class="icon-bar"></span>
         <span class="icon-bar"></span>
         </button>
         <a class="navbar-brand" href="index.html"><span>Lorem</span></a>
      </div>
      <div class="navbar-collapse collapse">
         <div class="menu">
            <ul class="nav nav-tabs" role="tablist">
               <li role="presentation"  class="active"><a href="index.html">Home</a></li>
               <li role="presentation">
                  <a href="<?php echo base_url();?>inicio/nosotros">Nosotros</a>
               </li>
               <li role="presentation">
                  <a href="<?php echo base_url();?>inicio/contacto">Contacto</a>
               </li>
               <!-- AQUÍ CREAMOS UN ITEM EN EL MENÚ -->
               <li role="presentation">
                  <a href="<?php echo base_url();?>inicio/datos">Datos BD</a>
               </li>
            </ul>
         </div>
      </div>
   </div>
</nav>


5. Creamos el Modelo en la carpeta aplication/models, lo llamaremos Datos_model.php donde habrá 3 métodos como se muestran a continuación:

<?php class Datos_model extends CI_Model{

  public function obtenerTodos(){
      $this->db->select('*');
      $this->db->from('usuarios');
      $query = $this->db->get(); // get() ejecuta el query
      return $query->result();  // result() trae el resultado

      // SELECT * FROM usuarios
  }

  public function obtenerPorId($id){
      $this->db->select('*');
      $this->db->from('usuarios');
      $this->db->where_in('id', $id);
      $query = $this->db->get();
      return $query->result();

      // SELECT * FROM usuarios WHERE id = $id
  }

  public function totalRegistros(){
      return $this->db->count_all_results("usuarios");
      // Regresa el número de registros
  }

} //Fin class Datos_model


6. En el Controlador Inicio.php crearemos un nuevo método llamado datos y es donde cargaremos el modelo que acabamos de crear para poder hacer uso de éste, como se muestra a continuación :

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Inicio extends CI_Controller {

	public function index()
	{
		$datos['titulo'] = 'Curso Codeigniter';
		$this->load->view('headfoot/header', $datos);
			$this->load->view('body/menu');
			$this->load->view('body/slider');
			$this->load->view('body/lorem1'); 
			$this->load->view('body/lorem2');
		$this->load->view('headfoot/footer');

	}

	public function nosotros()
	{
		$datos['titulo'] = 'Curso Codeigniter';
		$this->load->view('headfoot/header', $datos);
			$this->load->view('body/menu');
			$this->load->view('body/nosotros'); 
		$this->load->view('headfoot/footer');

	}

	public function contacto()
	{
		$datos['titulo'] = 'Curso Codeigniter';
		$this->load->view('headfoot/header', $datos);
			$this->load->view('body/menu');
			$this->load->view('body/contacto');
		$this->load->view('headfoot/footer');
	}

	public function datos()
	{
		$this->load->model("Datos_model"); // Carga el modelo

		$datos['titulo'] = 'Curso Codeigniter';
		$datos['usuarios'] = $this->Datos_model->obtenerTodos();
		$datos['usuarioPorId'] = $this->Datos_model->obtenerPorId(1);
		$datos['total'] = $this->Datos_model->totalRegistros();

		$this->load->view('headfoot/header', $datos);
			$this->load->view('body/menu');
			$this->load->view('body/datos');
		$this->load->view('headfoot/footer');
	}
}

La gran ventaja de la que hablé en el artículo de "Mi experiencia con Codeigniter" es que si no estás acostumbrado a usar clases para hacer querys, tienes la oportunidad de usar tus propios querys y obtener el mismo resultado. En el zip de esta entrada viene explicado en los comentarios extras (que no vienen aquí para dar claridad al código y no perder la idea principal) la forma en que puedes usar tus propios los querys como venías usando de usar PHP puro.


7. Como se ve en el controlador, la variable $datos ahora también tendrá “usuarios” que es un arreglo donde vendrán todos los usuarios de la tabla usuarios. Luego tenemos “usuarioPorId” que es un arreglo de un solo elemento que traerá toda la información del id del usuario que se especifique. Finalmente y la variable  “total” que es el total de todos los registros en la tabla usuarios.

Entonces vamos a aplication/views/body/ y creamos un archivo llamado datos.php que tendrá 3 secciones para mostrar las variables antes descritas, veamos el archivo completo:

<div class="breadcrumb">
   <h2>Mostrar todos los datos de la tabla usuarios</h2>
</div>
<div class="container">
   <div class="row">
      <div class="col-md-12">
         <table class="table table-bordered">
            <thead>
               <tr>
                  <th>Id</th>
                  <th>Nombre</th>
                  <th>Apellido</th>
                  <th>Correo</th>
                  <th>Edad</th>
               </tr>
            </thead>
            <tbody>
               <?php foreach($usuarios as $usuario) {?>
               <tr>
                  <td><?php echo $usuario->id; ?></td>
                  <td><?php echo $usuario->nombre; ?></td>
                  <td><?php echo $usuario->apellido; ?></td>
                  <td><?php echo $usuario->correo; ?></td>
                  <td><?php echo $usuario->edad; ?></td>
               </tr>
               <?php } ?>
            </tbody>
         </table>
      </div>
   </div>
</div>
<div class="breadcrumb">
   <h2>Mostrar un usuario específico, de la tabla el id 1</h2>
</div>
<div class="container">
   <div class="row">
      <div class="col-md-12">
         <table class="table table-bordered">
            <thead>
               <tr>
                  <th>Id</th>
                  <th>Nombre</th>
                  <th>Apellido</th>
                  <th>Correo</th>
                  <th>Edad</th>
               </tr>
            </thead>
            <tbody>
               <tr>
                  <td><?php echo $usuarioPorId[0]->id; ?></td>
                  <td><?php echo $usuarioPorId[0]->nombre; ?></td>
                  <td><?php echo $usuarioPorId[0]->apellido; ?></td>
                  <td><?php echo $usuarioPorId[0]->correo; ?></td>
                  <td><?php echo $usuarioPorId[0]->edad; ?></td>
               </tr>
            </tbody>
         </table>
      </div>
   </div>
</div>
<div class="breadcrumb">
   <h2>Total de registros en la tabla usuarios</h2>
</div>
<div class="container">
   <div class="row">
      <div class="col-md-12">
         <pre>
	     <?php echo 'El total de registros en la tabla usuarios: ' . $total;?>
	 </pre>
      </div>
   </div>
</div>

Así es como se ven los datos que obtuvimos:


Con esta entrada damos por terminado el curso básico de codeigniter, hay que destacar que siguiendo este tuto de 5 artículos es lo que yo aprendí durante meses de investigar y a partir de todo esto fue como pude adentrarme más y más en las funcionalidades de Codeigniter para hacer sistemas y sitios web más rápidamente, con la gran ventaja que son muy fáciles de mantener.


No olvides que puedes descargar el zip de esta entrada Curso Codeigniter básico 5/5. Espero que me quieras compartir tus avances y/o dudas en el grupo de facebook del curso.

Si quieres puedes escribirme a ringhugos@gmail.com o al whatsapp para cualquier comentario o duda que tengas sobre este tutorial.




Espero que te haya sido de mucha ayuda esta entrada.
¿Te gustaría hacerme una donación?
Acá puedes hacerla con paypal fácil y seguro :)