martes, 5 de noviembre de 2013

Crud de Usuarios en CodeIgniter


Crud en CodeIgnter

Continuamos con el Tema 7 de la creación de un carrito de compras en codeIgniter, hoy
veremos cómo hacer una Crud de ususarios en CodeIgniter, en la que vamos a poder crear,
actualizar y eliminar a los usuarios del sistema;
en este caso los usuarios son únicamente los administradores, en el tema pasado vimos cómo crear un un sistemad de login con ajax, debido a que estabamos cargando algunas librerias en varios controladores y al ser necesarias en la mayoria de estos fué necesario hacer algunas modificaciones, entonces para seguir este tutorial lo primero que vamos a hacer es descargar aquí el ejemplo actualizado de la clase anterior, ahí se encuentra la base de datos la que también debemos actualizar. Recordemos que la url para acceder a las funciones administrativas es: http://localhost/cart/login y que el usuario y la contraseña es: admin.

Paso 2

Después de haber reemplazado el ejemplo y la base de datos lo primero que vamos a hacer es
crear un controlador llamado users.php, como ya sabemos lo ubicamos en cart/application/controllers/

Código users.php

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

class Users extends CI_controller{
   
    function __construct()
    {
        parent::__construct();
        $this ->load->model('Users_model');      
// estas reglas son comunes a los formularios de crear y editar por eso las inicializamos en el constructor  
        $this->form_validation->set_rules('name', 'Nombres', 'required|min_length[3]');
        $this->form_validation->set_rules('last_name', 'Apellidos', 'required|min_length[3]');             
        $this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[4]|md5');
        $this->form_validation->set_rules('passconf', 'Confirmar password', 'required|matches[password]|md5');
        $this->form_validation->set_message('required', 'el campo %s es requerido');
        $this->form_validation->set_message('matches', 'El password no coincide');          
        $this -> form_validation -> set_error_delimiters('<ul><li>', '</li></ul>');
   }
   
  function index(){
     
    $data['title'] = 'Administración de Usuarios';
    $data['records'] = $this->Users_model->get_users();
   
    $this->load->view('admin/header_admin',$data);
    $this->load->view('admin/users');
    $this->load->view('front/footer');
   
   }
  
  function add(){ // Agregar usuarios
     
    $data['title'] = 'Registrar Usuario';
      
      $this->form_validation->set_rules('username', 'Usuario', 'required|callback__username_check|min_length[4]|max_length[15]');      
    $this->form_validation->set_message('_username_check', 'El usuario ya existe');
      
        if ($this->form_validation->run() == FALSE){          
            $this->load->view('admin/header_admin',$data);
            $this->load->view('admin/add_user');
            $this->load->view('front/footer');      
        }else{
            $name = $this->input->post('name');
            $last_name = $this->input->post('last_name');
            $username = $this->input->post('username');
            $password = $this->input->post('password');
                  
            $insert = $this->Users_model->add_user($name, $last_name, $username, $password);
                  
            $data['title'] = 'El usuario se agregó correctamente';
            $this->load->view('admin/header_admin',$data);
            $this->load->view('admin/success');
            $this->load->view('front/footer');  
   
        }

} // fin del método  

  // Método privado
function _username_check($username){ // verificamos si el usario existe
        return $this->Users_model->username_check($username);
    }
   
function edit() // Método para tomar los datos del usuario y pasarlos al formulario de editar
    {   $id=$this->input->post('id');
      
        if($id!=''){
          
            $data['title'] = 'Editar Usuarios';
            $data['results'] = $this->Users_model->edit_user($id);
      
            $this->load->view('admin/header_admin',$data);
            $this->load->view('admin/edit_user');
            $this->load->view('front/footer');         
      
        }else{ redirect('users');}  
      
    } // fin

function update(){ // Si los datos son válidos se actualiza el usuario de lo contrario se muestran los mensajes de error
   
        $data['title'] = 'Editar Usuario';
        $data['id'] = $this->input->post('id');
      
            $this->form_validation->set_rules('username', 'Usuario', 'required|callback__user_check|min_length[4]|max_length[15]');      
        $this->form_validation->set_message('_user_check', 'El nuevo Usuario que trata de tomar está en uso');
      
        if ($this->form_validation->run() == FALSE){          
            $this->load->view('admin/header_admin',$data);
            $this->load->view('admin/edit_user');
            $this->load->view('front/footer');      
        }else{
            $id = $this->input->post('id');
            $name = $this->input->post('name');
            $last_name = $this->input->post('last_name');
            $username = $this->input->post('username');
            $password = $this->input->post('password');
                  
            $insert = $this->Users_model->update_user($id, $name, $last_name, $username, $password);
          
        if($insert){
          
            $data['title'] = 'El usuario se actualizó correctamente';
            $this->load->view('admin/header_admin',$data);
            $this->load->view('admin/success');
            $this->load->view('front/footer');
          
            }else{
              
            $this->load->view('admin/header_admin',$data);
            $this->load->view('admin/edit_user');
            $this->load->view('front/footer');  
              
            }
   
        }
   
 }// fin update

    function _user_check($username)
    {
        if($id = $this->input->post('id')){
          
        return  $this->Users_model->user_check($username, $id);
      
        }
      

    }
   
function delete(){
   
     $id = $this->input->post('id');
     $delete= $this->Users_model->delete_user($id);
   
     if($delete){
       
            $data['title'] = 'El usuario se eliminó correctamente';
            $this->load->view('admin/header_admin',$data);
            $this->load->view('admin/success');
            $this->load->view('front/footer');
     }
   
}  
   
}

Paso 3

vamos a cart/application/models/ y creamos un modelo llamado users_model.php

Código de users_model.php

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

class Users_model extends CI_Model{
   
function get_users(){
   $this->db->select('id, name, last_name, username');
   $query = $this->db->get('users');
   return $query->result();
  
}

function username_check($username)
{
  $this->db->where('username', $username);
  $query = $this->db->get('users');
 
  if($query->num_rows>0){
      return FALSE;
   }else{
           return TRUE;
        }
}


function add_user($name, $last_name, $username,$password){
   
    $data = array(
    'name' => $name,
    'last_name' => $last_name,
    'username' => $username,
    'password' => $password
    );
   
    return $this->db->insert('users', $data);
}

function edit_user($id)
{
  $this->db->where('id', $id);
  $query = $this->db->get('users');
 
return $query->result();
}

function update_user($id, $name,$last_name, $username,$password){
   
    $data = array(
               'name' => $name,
               'last_name' => $last_name,
               'username' => $username,
               'password'=>$password
            );

$this->db->where('id', $id);
return $this->db->update('users', $data);

   
}

function user_check($username, $id){
     
$this->db->where('id !=', $id);
$this->db->where('username', $username);
$query = $this->db->get('users');

   if($query->num_rows()>0){
     
    return false;
   
   }else{
     
    return true;
   }
 }

function delete_user($id){
   
    $this->db->where('id', $id);
    $query = $this->db->delete('users');

return true;

}

}

Último paso


vamos a cart/application/views/admin/ y creamos 4 vistas con estos nombres: users.php, add_user.php, edit_user.php y success.php.

Código de la vista users.php

<?=heading($title, 2);
   $new_img = '<img src="'. base_url().'assets/img/user.png"/>'; ?>
<div class="container_table">
    <p align="center"><?=anchor('users/add/' ,'Nuevo '.$new_img, 'title="Agregar Usuario"') ?></p>
   
<?php

$edit_img = '<img src="'. base_url().'assets/img/edit.png"/>';
$delete_img = '<img src="'. base_url().'assets/img/delete.png"/>';

    $this->table->set_heading('Nombres', 'Apellidos','Usuario', $edit_img, $delete_img);
    $tmpl = array ( 'table_open'  => '<table border="1">' );
    $this->table->set_template($tmpl);

$attributes = array('class' => 'edit_user');
$attributes2 = array('class' => 'delete_user');

$j = 0;

foreach($records as $record){
   
 if($j<1){
     $delete = '-';
 }else{
     $delete = form_open('users/delete',$attributes2).form_hidden('id', $record->id).form_submit('action', 'Eliminar').form_close();
 }  

    $this->table->add_row($record->name,
                          $record->last_name,
                          $record->username,
                          form_open('users/edit',$attributes).form_hidden('id', $record->id).form_submit('action', 'Editar').form_close(),
                          $delete
                         );                                
$j++;                                     
}

echo $this->table->generate();
?>
</div>

Código de la vista add_user.php

<?=heading($title,4);

$attributes = array('id' => 'form_login', 'class'=>'users');

    $name = array('name'=>'name', 'id'=>'name','class'=>'input','placeholder'=>'Nombres',
                      'value'=>set_value('name'), 'size'=> '35',);
                    
    $last_name = array('name'=>'last_name', 'id'=>'last_name','class'=>'input','placeholder'=>'Apellidos',
                      'value'=>set_value('last_name'), 'size'=> '35',);
                    
    $username = array('name'=>'username', 'id'=>'username','class'=>'input','placeholder'=>'Usuario',
                      'value'=>set_value('username'), 'size'=> '35',);
                    
    $password = array('name'=>'password', 'id'=>'password','class'=>'input','placeholder'=>'Contraseña',
                      'type'=>'password', 'size'=> '35',);
                    
    $passconf = array('name'=>'passconf', 'id'=>'passconf','class'=>'input','placeholder'=>'Repita la Contraseña',
                      'type'=>'password', 'size'=> '35',);
                  

if(validation_errors()):     
 ?>
<div id="error"><?=validation_errors();?></div>
<?php endif ?>

<?=form_open('users/add', $attributes);?>  
<div class="padding"><?=form_label('Nombres');?></div>
<div class="padding"><?=form_input($name);?></div>
<div class="padding"><?=form_label('Apellidos')?></div>
<div class="padding"><?=form_input($last_name)?></div>
<div class="padding"><?=form_label('Usuario')?></div>
<div class="padding"><?=form_input($username)?></div>
<div class="padding"><?=form_label('Password')?></div>
<div class="padding"><?=form_input($password)?></div>
<div class="padding"><?=form_label('Confirmar Password')?></div>
<div class="padding"><?=form_input($passconf)?></div>

<?=form_submit(array('name' => 'submit','class'=>'submit','value' => 'Guardar'))?>
<?=form_close();?>
<div class="clear"></div>

Código de la vista edit_user.php

<?=heading($title,4);

$attributes = array('id' => 'form_login', 'class'=>'users');

    $name = array('name'=>'name', 'id'=>'name','class'=>'input','placeholder'=>'Nombres',
                      'value'=>set_value('name'), 'size'=> '35');                                                            
    $last_name = array('name'=>'last_name', 'id'=>'last_name','class'=>'input','placeholder'=>'Apellidos',
                      'value'=>set_value('last_name'), 'size'=> '35');                    
    $username = array('name'=>'username', 'id'=>'username','class'=>'input','placeholder'=>'Usuario',
                      'value'=>set_value('username'), 'size'=> '35');                    
    $password = array('name'=>'password', 'id'=>'password','class'=>'input','placeholder'=>'Contraseña',
                      'type'=>'password', 'size'=> '35');                    
    $passconf = array('name'=>'passconf', 'id'=>'passconf','class'=>'input','placeholder'=>'Repita la Contraseña',
                      'type'=>'password', 'size'=> '35');
    $data = array('name'=>'id', 'value'=>set_value('id'));                    

if(validation_errors()){ ?>
   
<div id="error"><?=validation_errors();?></div>

<?php }else{
   

      foreach ($results as $result){
        
           $id = $result->id;            
           $name['value'] = $result->name;
           $last_name['value'] = $result->last_name;
           $username['value'] = $result->username;
                    
     }
   
}
?>

<?=form_open('users/update', $attributes);?>

<div class="padding"><?=form_label('Nombres');?></div>
<div class="padding"><?=form_input($name)?></div>
<div class="padding"><?=form_label('Apellidos')?></div>
<div class="padding"><?=form_input($last_name)?></div>
<div class="padding"><?=form_label('Usuario')?></div>
<div class="padding"><?=form_input($username)?></div>
<div class="padding"><?=form_label('Nuevo Password')?></div>
<div class="padding"><?=form_input($password)?></div>
<div class="padding"><?=form_label('Confirmar Password')?></div>
<div class="padding"><?=form_input($passconf)?></div>
<?=form_hidden('id',$id)?>

<?=form_submit(array('name' => 'submit','class'=>'submit','value' => 'Modificar'))?>

<?=form_close();?>

<div class="clear"></div>

Código de la vista success.php

Esta vista es donde damos los mensajes de éxito después de cada acción realizada.

<?php echo '<p class="success">'.$title.'</p>'; ?>


Así ya tenemos la crud de usuarios en codeIgniter.

Descargar Ejemplo

No hay comentarios. :