ExpressionEngine CMS
Open, Free, Amazing

Thread

This is an archived forum and the content is probably no longer relevant, but is provided here for posterity.

The active forums are here.

Best way to populate an edit form from a database

April 30, 2009 12:19pm

Subscribe [17]
  • #16 / Jul 06, 2011 4:40pm

    satanuzo

    3 posts

    Mi metodo

    CONTROLLERS

    Para cargar la vista

    public function add_ciudad(){
    
            $data['data_form']          = $this->session->flashdata('data_form');
            $data['insertar_otro']      = $this->session->flashdata('insertar_otro');
            
            $data['opt_region']         = $this->localidad_model->opt_region();
            
            $data['url_navegacion']     = anchor('localidad/list_ciudad/listar/'.$this->session->userdata('offset').'',$this->titulo_nav_2).' > '.'Nueva ciudad';
            $data['url_accion']         = site_url('localidad/insert_ciudad');
    
            $this->load->view('head');
            $this->load->view('localidad_ciudad_insert', $data);
            $this->load->view('foot');
        }


    Para insertar

    public function insert_ciudad(){
    
            $data_form          = $this->input->post('data_form');
            $insertar_otro      = $this->input->post('insertar_otro');
    
            $msg = '';
            $this->form_validation->set_rules('data_form[id_region]', 'Región', 'trim|required|xss_clean');
            $this->form_validation->set_rules('data_form[nombre_ciudad]', 'Nombre', 'trim|required|min_length[3]|xss_clean|callback_ciudad_check');
             
    
            // run validation
            if ($this->form_validation->run() == FALSE){
                $msg['error'] = 'No se pudo ingresar la ciudad, intentelo nuevamente.
    '.validation_errors();
                $this->session->set_flashdata('msg', $msg);
                $this->session->set_flashdata('data_form', $data_form);
                $this->session->set_flashdata('insertar_otro', $insertar_otro);
                redirect('localidad/add_ciudad','location', 301);
            }else{
                $id_region = $this->localidad_model->insert_ciudad($data_form);
                $msg['ok'] = 'La ciudad ha sido ingresada.';
                $this->session->set_flashdata('msg', $msg);
                if ($insertar_otro == 'on'){
                    $this->session->set_flashdata('insertar_otro', $insertar_otro);
                    redirect('localidad/add_ciudad','location', 301);
                }else{
                    redirect('localidad/list_ciudad/listar/'.$this->session->userdata('offset').'','location', 301);
                }
            }
        }

    VIEWS

    <div class="content">
        <div class='tible'><?=$url_navegacion;?></div>
        <?=form_open($url_accion)?>
            <div class="data_form">
                <table>
                    <tr>
                        <th width="30%">Región<span class="requerido"> *</span></th>
                        <td><?=form_dropdown('data_form[id_region]', $opt_region, $data_form['id_region'])?></td>
                    </tr>
                    <tr>
                        <th width="30%">Nombre<span class="requerido"> *</span></th>
                        <td><?=form_input('data_form[nombre_ciudad]', $data_form['nombre_ciudad'])?></td>
                    </tr>
                    <tr>
                        <th> </th>
                        <td><?=form_submit('guardar','Guardar')?> <?=form_checkbox('insertar_otro','on', ($insertar_otro == 'on' ? TRUE : FALSE))?>INSERTAR OTRO</td>
                    </tr>
                </table>
            </div>
        <?=form_close()?>
        
    
    </div>
  • #17 / Jul 06, 2011 4:45pm

    satanuzo

    3 posts

    PARA EDITAR

    CONTROLLERS

    public function edit_ciudad($id_ciudad){
    
            if ($this->session->flashdata('data_form')){
                $data['data_form']          = $this->session->flashdata('data_form');
            }else{
                $data['data_form']          = $this->localidad_model->ciudad_por_id($id_ciudad);
            }
            
            $data['opt_st_ciudad']      = $this->estado;
            $data['id_ciudad']          = $id_ciudad;
            $data['opt_region']         = $this->localidad_model->opt_region();
    
            $data['url_navegacion']     = anchor('localidad/list_ciudad/listar/'.$this->session->userdata('offset').'',$this->titulo_nav_2).' > '.'Actualizar ciudad';
            $data['url_accion']         = site_url('localidad/update_ciudad/'.$id_ciudad);
            // load view
    
            $this->load->view('head');
            $this->load->view('localidad_ciudad_edit', $data);
            $this->load->view('foot');
        }
    
        public function update_ciudad($id_ciudad){
            $this->session->set_userdata('id_ciudad', $id_ciudad);
            $data_form      = $this->input->post('data_form');
    
            $msg = '';
    
            $this->form_validation->set_rules('data_form[id_region]', 'Región', 'trim|required|xss_clean');
            $this->form_validation->set_rules('data_form[nombre_ciudad]', 'Nombre', 'trim|required|min_length[3]|xss_clean|callback_ciudad_check');
            
            $this->form_validation->set_rules('data_form[st_ciudad]', 'Estado', 'trim|required|xss_clean');
            // run validation
            if ($this->form_validation->run() == FALSE){
                $msg['error'] = 'No se pudo actualizar la ciudad, intentelo nuevamente.
    '.validation_errors();
                $this->session->set_flashdata('msg', $msg);
                $this->session->set_flashdata('data_form', $data_form);
                redirect('localidad/edit_ciudad/'.$id_ciudad,'location', 301);
            }else{
                $num_filas_afectadas = $this->localidad_model->update_ciudad($id_ciudad, $data_form);
                $msg['ok'] = 'La ciudad ha sido actualizada.';
                $this->session->set_flashdata('msg', $msg);
                redirect('localidad/list_ciudad/listar/'.$this->session->userdata('offset').'','location', 301);
            }
        }

    VIEW

    <div class="content">
        <div class='tible'><?=$url_navegacion;?></div>
        <?=form_open($url_accion)?>
            <div class="data_form">
                <table>
                    <tr>
                        <th width="30%">Id</th>
                        <td><?=form_input('data_form[id_region]', $id_region, 'disabled')?></td>
                    </tr>
                    <tr>
                        <th width="30%">Nombre<span class="requerido"> *</span></th>
                        <td><?=form_input('data_form[nombre_region]', $data_form['nombre_region'])?></td>
                    </tr>
                    <tr>
                        <th>Estado<span class="requerido"> *</span></th>
                        <td><?=form_dropdown('data_form[st_region]', $opt_st_region, $data_form['st_region'])?></td>
                    </tr>
                    <tr>
                        <th> </th>
                        <td><?=form_submit('actualizar','Actualizar')?></td>
                    </tr>
                </table>
            </div>
        <?=form_close()?>
        
    
    </div>


    la idea es que los campos del form se llamen igual a los campos de la db

     

    CREATE TABLE IF NOT EXISTS `tbl_ciudad` (
      `id_ciudad` smallint(3) unsigned NOT NULL AUTO_INCREMENT,
      `nombre_ciudad` tinytext,
      `id_region` tinyint(2) unsigned NOT NULL DEFAULT ‘0’,
      `st_ciudad` enum(‘activo’,‘inactivo’) NOT NULL DEFAULT ‘activo’,
      PRIMARY KEY (`id_ciudad`),
      KEY `id_region` (`id_region`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT AUTO_INCREMENT=349 ;

    en el formulario
    <input type=“test” name=“data_form[nombre_ciudad]”

    MODELS

    function insert_ciudad($data_form)
        {
            $this->db->insert('tbl_ciudad', $data_form);
            return $this->db->insert_id();
        }
    
        function update_ciudad($id_ciudad, $data_form)
        {
            $this->db->update('tbl_ciudad', $data_form, array('id_ciudad' => $id_ciudad));
            return $this->db->affected_rows();
        }
    
        function ciudad_por_id($id_ciudad)
        {
            $sql="
                SELECT
                        tbl_ciudad.id_ciudad,
                        tbl_ciudad.nombre_ciudad,
                        tbl_region.nombre_region,
                        tbl_region.id_region,
                        tbl_ciudad.st_ciudad
    
                FROM    tbl_ciudad, tbl_region
                WHERE   tbl_ciudad.id_ciudad = $id_ciudad
                AND     tbl_ciudad.id_region = tbl_region.id_region";
            $result = $this->db->query($sql);
            return $result->row_array();
        }
  • #18 / Jul 06, 2011 5:57pm

    cyberjunkie

    34 posts

    Not sure if this is what you’re looking for.. I use the following for the input value.

    (set_value('some_value')) ? set_value('some_value') : $row->some_value

    (You might want to add an isset to that)

    In the Model class I’m using

    return $query->row();

    and in Controller sending it to my view as $row

    $data['row'] = $this->My_model->populate_form();
    $this->load->view('my_view', $data);

    It’s a very straight-forward technique.

.(JavaScript must be enabled to view this email address)

ExpressionEngine News!

#eecms, #events, #releases