简体   繁体   中英

Codeigniter, Field not updating but other fields will update

Here is my function

function store(){
            $this->load->library('form_validation');
            $this->form_validation->set_rules('shorthand','Shorthand','required|is_unique[locations.shorthand]');

            if($this->form_validation->run() == FALSE){
                redirect('locations');
            } else {
            $id = $this->input->post('location_id');
            $location_name = ucwords(strtolower($this->input->post('location_name')));
            $shorthand = strtolower($this->input->post('shorthand'));
            $station = ucwords(strtolower($this->input->post('station')));

            $data = array(
                'location_name'=>$location_name,
                'shorthand'=>$shorthand,
                'station'=>$station
            );

            }if($id){
                $result = $this->location_model->update($data,$id);
                if($result > 0){
                    $this->session->set_flashdata('success', 'Update successfull!');
                }else{
                    $this->session->set_flashdata('error', 'Failed to update!');
                }
                redirect('locations');
            }else{
                $result = $this->location_model->create($data);
                if($result > 0){
                    $this->session->set_flashdata('success', 'Location added!');
                }else{
                    $this->session->set_flashdata('error', 'Failed to add location!');
                }
                redirect('locations');
            }
        }

The shorthand updates fine but station and location_name wont update no matter what I do. But if I remove this chunk of code.

$this->load->library('form_validation');
            $this->form_validation->set_rules('shorthand','Shorthand','required|is_unique[locations.shorthand]');

            if($this->form_validation->run() == FALSE){
                redirect('locations');
            } else {

All of the fields will update. Can you please look at my codes? Thanks in advance.

Here is my Update Query

function update($data, $id){
            $this->db->where('location_id', $id);
            $this->db->update('locations', $data);        
            return $this->db->affected_rows();
        }

I think this what you need. Please manage according to your need

$locations = $this->db->get_where('locations', array('location_id' => $id))->row();
$original_value = $locations->shorthand; 
if($this->input->post('shorthand') != $original_value) {
   $is_unique =  '|is_unique[locations.shorthand]';
} else {
  $is_unique =  '';
}

$this->form_validation->set_rules('shorthand','Shorthand','required|trim|xss_clean'.$is_unique);

Guys for the people who have commented, thank you but I have already solved the problem it was inside controller I forgot to put else after this line

if($this->form_validation->run() == FALSE){
                redirect('locations');
            }

This is how the whole function looks now

function store(){
            $this->form_validation->set_rules('location_name','Location_name','required');
            $this->form_validation->set_rules('shorthand','Shorthand','required|callback_locationExists');
            $this->form_validation->set_rules('station','Station','required');

            $id = $this->input->post('location_id');
            $location_name = ucwords(strtolower($this->input->post('location_name')));
            $shorthand = strtolower($this->input->post('shorthand'));
            $station = ucwords(strtolower($this->input->post('station')));

            $data = array(
                'location_name'=>$location_name,
                'shorthand'=>$shorthand,
                'station'=>$station,
            );
            if($this->form_validation->run() == FALSE){
                redirect('locations');
            }else{
                if($id){
                    $result = $this->location_model->update($data,$id);
                    if($result > 0){
                        $this->session->set_flashdata('success', 'Update successfull!');
                    }else{
                        $this->session->set_flashdata('error', 'Failed to update!');
                    }
                    redirect('locations');
                }else{
                    $result = $this->location_model->create($data);
                    if($result > 0){
                        $this->session->set_flashdata('success', 'Location added!');
                    }else{
                        $this->session->set_flashdata('error', 'Failed to add location!');
                    }
                    redirect('locations');
                }
            }
        }

Thanks for reading

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM