CRUD con Codeigniter

Como sabemos CodeIgniter es un framework PHP muy sencillo de aprender, aunque también es algo limitado(ya hablaré algún día sobre frameworks php porque es un tema muy interesante), no es tan potente como podrían serlo Zend Framework 2 o Symfony2, pese a esto considero que es una de las transiciones menos “dolorosa” desde PHP “a pelo” a un framework de desarrollo.
En PHP la mayoría de tareas que realizamos se basan en mostrar, insertar, modificar y borrar datos de una base de datos, por ello, a la hora de sentar las bases para empezar a utilizar un framework o seguir una metodología de trabajo es fundamental que veamos como se hace un CRUD(Create, Read, Update, Delete). Pues bien veamos como se hace esto en Codeigniter.
Para entender este ejemplo debes tener un conocimiento SOLIDO de PHP, programación orientada a objetos en PHP, patrón MVC y un conocimiento básico de como funciona Codeigniter.

Vamos a conseguir lo siguiente:
CRUD con Codeigniter

Al entrar en modificar:
CRUD con Codeigniter 2
Vamos a utilizar esta BD:

CREATE DATABASE crud;
USE crud;
CREATE TABLE IF NOT EXISTS `usuarios` (
  `id_usuario` int(255) NOT NULL AUTO_INCREMENT,
  `email` varchar(100) NOT NULL,
  `password` varchar(100) NOT NULL,
  `nombre` varchar(50) NOT NULL,
  `apellido` varchar(50) NOT NULL,
  PRIMARY KEY (`id_usuario`),
  UNIQUE KEY `email` (`email`)
) ENGINE=InnoDB;

# models/usuarios_model.php

<?php
               //extendemos CI_Model
class usuarios_model extends CI_Model{
    public function __construct() {
        //llamamos al constructor de la clase padre
        parent::__construct(); 
        
        //cargamos la base de datos
        $this->load->database();
    }
    
    public function ver(){
        //Hacemos una consulta
        $consulta=$this->db->query("SELECT * FROM usuarios;");
        
        //Devolvemos el resultado de la consulta
        return $consulta->result();
    }
    
    public function add($email,$password,$nombre,$apellido){
        $consulta=$this->db->query("SELECT email FROM usuarios WHERE email LIKE '$email'");
        if($consulta->num_rows()==0){
            $consulta=$this->db->query("INSERT INTO usuarios VALUES(NULL,'$email','$password','$nombre','$apellido');");
            if($consulta==true){
              return true;
            }else{
                return false;
            }
        }else{
            return false;
        }
    }
    
    public function mod($id_usuario,$modificar="NULL",$email="NULL",$password="NULL",$nombre="NULL",$apellido="NULL"){
        if($modificar=="NULL"){
            $consulta=$this->db->query("SELECT * FROM usuarios WHERE id_usuario=$id_usuario");
            return $consulta->result();
        }else{
          $consulta=$this->db->query("
              UPDATE usuarios SET email='$email', password='$password',
              nombre='$nombre', apellido='$apellido' WHERE id_usuario=$id_usuario;
                  ");
          if($consulta==true){
              return true;
          }else{
              return false;
          }
        }
    }
    
    public function eliminar($id_usuario){
       $consulta=$this->db->query("DELETE FROM usuarios WHERE id_usuario=$id_usuario");
       if($consulta==true){
           return true;
       }else{
           return false;
       }
    }


}
?>

# controllers/usuarios_controller.php

<?php
                        //extendemos CI_Controller
class usuarios_controller extends CI_Controller{
    public function __construct() {
        //llamamos al constructor de la clase padre
        parent::__construct(); 
        
        //llamo al helper url
        $this->load->helper("url");  
        
        //llamo o incluyo el modelo
        $this->load->model("usuarios_model");
        
        //cargo la libreria de sesiones
        $this->load->library("session");
    }
    
    //controlador por defecto
    public function index(){
        
        //array asociativo con la llamada al metodo
        //del modelo
        $usuarios["ver"]=$this->usuarios_model->ver();
        
        //cargo la vista y le paso los datos
        $this->load->view("usuarios_view",$usuarios);
    }
    
    //controlador para añadir
    public function add(){
        
        //compruebo si se a enviado submit
        if($this->input->post("submit")){
        
        //llamo al metodo add
        $add=$this->usuarios_model->add(
                $this->input->post("email"),
                $this->input->post("password"),
                $this->input->post("nombre"),
                $this->input->post("apellido")
                );
        }
        if($add==true){
            //Sesion de una sola ejecución
            $this->session->set_flashdata('correcto', 'Usuario añadido correctamente');
        }else{
            $this->session->set_flashdata('incorrecto', 'Usuario añadido correctamente');
        }
        
        //redirecciono la pagina a la url por defecto
        redirect(base_url());
    }
    
    //controlador para modificar al que 
    //le paso por la url un parametro
    public function mod($id_usuario){
        if(is_numeric($id_usuario)){
          $datos["mod"]=$this->usuarios_model->mod($id_usuario);
          $this->load->view("modificar_view",$datos);
          if($this->input->post("submit")){
                $mod=$this->usuarios_model->mod(
                        $id_usuario,
                        $this->input->post("submit"),
                        $this->input->post("email"),
                        $this->input->post("password"),
                        $this->input->post("nombre"),
                        $this->input->post("apellido")
                        );
                if($mod==true){
                    //Sesion de una sola ejecución
                    $this->session->set_flashdata('correcto', 'Usuario modificado correctamente');
                }else{
                    $this->session->set_flashdata('incorrecto', 'Usuario modificado correctamente');
                }
                redirect(base_url());
            }
        }else{
            redirect(base_url()); 
        }
    }
    
    //Controlador para eliminar
    public function eliminar($id_usuario){
        if(is_numeric($id_usuario)){
          $eliminar=$this->usuarios_model->eliminar($id_usuario);
          if($eliminar==true){
              $this->session->set_flashdata('correcto', 'Usuario eliminado correctamente');
          }else{
              $this->session->set_flashdata('incorrecto', 'Usuario eliminado correctamente');
          }
          redirect(base_url());
        }else{
          redirect(base_url());
        }
    }
}
?>

# views/usuarios_view.php

<!DOCTYPE HTML>
<html lang="es">
    <head>
        <meta charset="utf-8"/>
        <title>CRUD con CodeIgniter</title>
    </head>
    <body>
        <h2>Crud con CodeIgniter</h2>
        <?php
        //Si existen las sesiones flasdata que se muestren
            if($this->session->flashdata('correcto'))
                echo $this->session->flashdata('correcto');
            
            if($this->session->flashdata('incorrecto')) 
                echo $this->session->flashdata('incorrecto');
        ?>
<table border="1">
    <tr>
        <form action="<?=base_url("usuarios_controller/add");?>" method="post">
            <td></td>
            <td>
               <input type="email" name="email"/>
            </td>
            <td>
               <input type="text" name="password"/>
            </td>
            <td>
                <input type="text" name="nombre"/>
            </td>
            <td>
                <input type="text" name="apellido"/>
            </td>
            <td>
                <input type="submit" name="submit" value="Añadir" />
            </td>
        </form>
    </tr>
<?php
foreach($ver as $fila){
?>
    <tr>
        <td>
            <?=$fila->id_usuario;?>
        </td>
        <td>
            <?=$fila->email;?>
        </td>
        <td>
            <?=$fila->password;?>
        </td>
        <td>
            <?=$fila->nombre;?>
        </td>
        <td>
            <?=$fila->apellido;?>
        </td>
        <td>
            <a href="<?=base_url("usuarios_controller/mod/$fila->id_usuario")?>">Modificar</a>
            <a href="<?=base_url("usuarios_controller/eliminar/$fila->id_usuario")?>">Eliminar</a>
        </td>
    </tr>
<?php
   
}
?>
</table>
    </body>
</html>

# views/modificar_view.php

<!DOCTYPE HTML>
<html lang="es">
    <head>
        <meta charset="UTF-8" />
        <title>Modificar usuarios</title>
    </head>
    <body>
        <h2>Modificar usuario</h2>
        <form action="" method="POST">
            <?php foreach ($mod as $fila){ ?>
            <input type="email" name="email" value="<?=$fila->email?>"/>
            <input type="text"  name="password" value="<?=$fila->password?>"/>
            <input type="nombre" name="nombre" value="<?=$fila->nombre?>"/>
            <input type="apellido" name="apellido" value="<?=$fila->apellido?>"/>
            <input type="submit" name="submit" value="Modificar"/>
            <?php } ?>
        </form>
        <a href="<?=base_url()?>">Volver</a>
    </body>
</html>

Con esto ya tendremos un CRUD funcional. Esto a sido un ejemplo sencillo y rápido, sin validar formularios, etc. Se puede hacer todavía mejor.

Victor

Autor: Victor

Desarrollador web - Formador online - Blogger

Compartir este post

2 Comentarios

  1. Hola Víctor estoy implementado tu CRUD, pero tengo un problema no me resuelve bien los links (agregar, modificar, eliminar), cuando los enlazo manualmente si me funcionan, creo que es algo respecto a:

    <form action="” method=”post”>

    Si me pudieras ayudar te agradecería bastante 😀

    Responder
    • Si te refrieres a que no te funciona la función base_url(), es porque no has cargado en el constructor del controlador el helper url $this->load->helper(“url”);

      O porque en el fichero config.php no tienes bien configurada la url base, en mi caso tengo la tengo de esta forma:
      $config[‘base_url’]=’http://localhost/crudci/index.php’;

      Responder

Poner un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *