Reputation: 542
I'm having some trouble updating records with the Codeigniter framework. I'm using the MVC pattern and active records.
The code is for updating user profiles.
No error but it won't save to my DB. What could be the possible solution for this?
Models (model_users.php)
public function profile_update()
{
$user_profile = $this->db->get('ij_users');
if($user_profile) {
$row = $user_profile->row();
$data = array(
'user_fname' => $row->user_fname,
'user_lname' => $row->user_lname,
'user_pass' => $row->user_pass,
'user_company' => $row->user_company
);
$user_update = $this->db->update('ij_users', $data);
}
if($user_update) {
return true;
}
return false;
}
Controller (members.php)
public function validate()
{
$this->load->library('form_validation');
$this->form_validation->set_rules('user_fname', 'First name', 'trim|xss_clean');
$this->form_validation->set_rules('user_lname', 'Last name', 'trim|xss_clean');
$this->form_validation->set_rules('user_pass', 'Password', 'required|trim|xss_clean');
$this->form_validation->set_rules('user_re_pass', 'Re-type Password', 'required|trim|xss_clean|matches[user_pass]');
$this->form_validation->set_rules('user_company', 'Company name', 'trim|xss_clean');
if($this->form_validation->run()) {
$this->load->model('model_users');
if($this->model_users->profile_update()) {
//update database
//show successfull message
echo "Successfully saved!";
} else {
//show error updating message
echo "Problem adding to database 2.";
}
} else {
//show error message
echo "Problem adding to database.";
}
}
View (profile.php)
<div class="form-signin">
<?php echo form_open('members/validate'); ?>
<?php
echo '<div class="alert alert-error"><button type="button" class="close" data-dismiss="alert">×</button><h5>All fields are required!</h5>';
echo validation_errors();
echo '</div>';
echo "<p><strong>Email address </strong></p>";
echo form_input('user_email', $this->input->post('user_email'), 'disabled');
echo "<p><strong>First name</strong></p>";
echo form_input('user_fname', $this->input->post('user_fname'));
echo "<p><strong>Last name</strong></p>";
echo form_input('user_lname', $this->input->post('user_lname'));
echo "<p><strong>Password </strong></p>";
echo form_password('user_pass');
echo "<p><strong>Re-type password </strong></p>";
echo form_password('user_re_pass');
echo "<p><strong>Company name</strong></p>";
echo form_input('user_company', $this->input->post('user_company'));
echo "<p>";
echo form_submit('save_submit', 'Save changes', 'class="btn btn-primary"');
?>
<a href="<?php echo base_url() . "members" ?>" class="btn btn-link btn-small">Cancel</a>
<?php
echo "</p>";
echo form_close();
?>
Upvotes: 0
Views: 2000
Reputation: 745
By looking at your model code, I don't see any primary key ID, which is where the record needs to be updated. So add the ID to your $data array in the model file.
$data = array(
'user_id/id' => $row->id //********* add id here *********
'user_fname' => $row->user_fname,
'user_lname' => $row->user_lname,
'user_pass' => $row->user_pass,
'user_company' => $row->user_company
);
Upvotes: 1
Reputation: 437
There could be multiple reasons not to work. However, I have seen something in your model that is not entirely correct.
Unless you have just one row in the users table (and even then not sure this works), you should use:
$user_profile = $this->db->get_where('ij_users',array('id'=>$this->session->usedata('id')));
/*supposing you have id as PK in the table, an active session for that id, and want to get the logged in profile user data */
Upvotes: 0