Search code examples
phpmysqlcodeignitercodeigniter-3

CodeIgniter Add & Update Database without success, no error, nothing, just wont work


I am a newbie with PHP and CodeIgniter. I have been trying to add a new data in the stud table, or edit some data without success. The thing is I can delete the data just fine. So I don't really know what is the problem.

Stud_controller

<?php
class Stud_controller extends CI_Controller {
    function __construct(){
        parent::__construct();

        $this->load->helper('url');
        $this->load->database();
    }

    public function index(){
        $query = $this->db->get('stud');
        $data['records'] = $query->result();
        $this->load->helper('url');
        $this->load->view('Stud_view', $data);
    }

    public function add_student_view(){
        $this->load->helper('form');
        $this->load->view('Stud_add');
    }

    public function add_student(){
        $this->load->model('Stud_Model');
        $data = array(
            'roll_no' => $this->input->post('roll_no'),
            'name' => $this->input->post('name')
        );
        $this->Stud_Model->insert($data);
        $query = $this->db->get('stud');
        $data['records'] = $query->result();
        $this->load->view('Stud_view', $data);
    }

    public function update_student_view(){
        $this->load->helper('form');
        $roll_no = $this->uri->segment('3');
        $query = $this->db->get_where('stud', array('roll_no' => $roll_no));
        $data['records'] = $query->result();
        $data['old_roll_no'] = $roll_no;
        $this->load->view('Stud_edit', $data);
    }

    public function update_student(){
        $this->load->model('Stud_Model');
        $data = array(
                'roll_no' => $this->input->post('roll_no'),
                'name' => $this->input->post('name')
        );
        $old_roll_no = $this->input->post('old_roll_no');
        $this->Stud_Model->update($data, $old_roll_no);
        $query = $this->db->get('stud');
        $data['records'] = $query->result();
        $this->load->view('Stud_view', $data);
    }

    public function delete_student(){
        $this->load->model('Stud_Model');
        $roll_no = $this->uri->segment('3');
        $this->Stud_Model->delete($roll_no);
        $query = $this->db->get('stud');
        $data['records'] = $query->result();
        $this->load->view('Stud_view', $data);
    }
}
?>

Stud_Model

<?php
class Stud_Model extends CI_Model {
    function __construct(){
        parent::__construct();
    }

    public function insert($data){
        if ($this->db->insert('stud', $data)){
            return true;
        }
    }

    public function delete($roll_no){
        if ($this->db->delete('stud', 'roll_no =' . $roll_no )){
            return true;
        }
    }

    public function update($data, $old_roll_no){
        $this->db->set($data);
        $this->db->where('roll_no', $old_roll_no);
        $this->db->update('stud', $data);
    }
}
?>

Stud_add

<!DOCTYPE HTML>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Students Example</title>
</head>
<body>
    <form method = "" action = "">
        <?php
        echo form_open('Stud_controller/add_student');
            echo form_label('Roll No.');
            echo form_input(array('id' => 'roll_no', 'name' => 'roll_no'));
            echo "<br />";
            echo form_label('Name');
            echo form_input(array('id' => 'name', 'name' => 'name'));
            echo "<br />";
            echo form_submit(array('id' => 'submit', 'value' => 'Submit'));
        echo form_close();
        echo "<br />";
        echo "<a href='".base_url()."index.php'>Home</a></td>";
        ?>
    </form>
</body>
</html>

Stud_edit

<!DOCTYPE html>
<html lang="eng">
<head>
    <meta charset="utf-8">
    <title>Students Example</title>
</head>
<body>
    <form action="" method="">
        <?php
        echo form_open('Stud_controller/update_student');
        echo form_hidden('old_roll_no', $old_roll_no);
        echo form_label('Roll No.');
        echo form_input(array('id'=>'roll_no', 'name'=>'roll_no', 'value'=>$records[0]->roll_no));
        echo "<br />";
        echo form_label('Name');
        echo form_input(array('id'=>'name', 'name'=>'name', 'value'=>$records[0]->name));
        echo "<br />";
        echo form_submit(array('id'=>'submit', 'value'=>'Submit'));
        echo form_close();
        echo "<a href='".base_url()."index.php'>Home</a></td>";
        ?>
</body>
</html>

Solution

  • Try something like this(controller update_student)

    $query = $this->Stud_Model->update($data, $old_roll_no);
    if ($query->result() {
    $data['records'] = $query->result();
    }
    $this->load->view('Stud_view', $data);
    

    You do not need the $query = $this->db->get('stud');, because your model should be returning that. But your model isnt returning anything You have to initiate the method with an if statement. Try that in your other functions and make sure you are not updating in both controller and model. Also, when referring to controllers and models in your classes, use lower case names. Here is an example of an insert without using a model. Be sure and validate and escape your data

    function enterPosts()
    {
    $this->is_logged_in();
    $data = [
      'title'   => html_escape(trim($this->input->post('title'))),
      'content' => trim($this->input->post('content')),
      'date'    => html_escape(trim($this->input->post('date'))),
      'parent'  => html_escape(trim($this->input->post('parent'))),
      'status'  => html_escape(trim($this->input->post('status'))),
      'slug'    => trim($this->input->post('slug'))
    ];
    
    $this->form_validation->set_rules('title', 'Title', required|max_length[50]',));
    $this->form_validation->set_rules('content', 'content',  'required|min_length[50]'));
    $this->form_validation->set_rules('date', 'Date', 'required');
    $this->form_validation->set_rules('parent', 'Parent', 'required');
    $this->form_validation->set_rules('status', 'Status', 'required');
    $this->form_validation->set_rules('slug', 'Slug', required|trim|min_length[30]'));
    if( $this->form_validation->run() == FALSE) {
            echo validation_errors(); //or just load your form view
        }else
        {
            $this->db->insert('posts', $data);
    
        }
     } //end of enterposts