简体   繁体   中英

codeigniter: Update table from another table with session

I'm having some challenge updating table a form joined with session userdata from another table. Each time I run, it displays undefined function. Please let me know where I'm getting it wrong so could fix it.Please find time to review it I'm a newbie. Here's the controller

 public function index()
    {

        if ( $this->session->userdata('logged_in') )
        {

            $id = $this->session->userdata('id');
            $this->load->model('Userinfo_model');
            $data['result'] = $this->Userinfo_model->get_users($id);

            $this->load->view("usermain_info", $data);

        }
    }
    public function update_user (){
        $data = $this->input->post('userId');
        $id = array(
            'balance' => $this->input->post('balance'),
            'id' => $this->input->post('id')
        );
        $this->Userinfo_model->update_user($id, $data);
        $this->index();
    }

Model

function get_users($userid)
    {

        if (isset($this->session->userdata['logged_in'])) {

            $userid = ($this->session->userdata['logged_in']['id']);
        } else {
            header("location: nwpgroup/nwp2/index.php");
        }

        /* all the queries relating to the data we want to retrieve will go in here. */

        $query = $this->db->query("SELECT * FROM walletbalance WHERE userId='$userid'");


        return $query;
    }
    function update_user($id,$data){
        if (isset($this->session->userdata['logged_in'])) {

            $data = ($this->session->userdata['logged_in']['id']);
        } else {
            header("location: nwpgroup/nwp2/index.php");
        }
        $this->db->where('userId', $data);
        $this->db->update('walletbalance', $id);
    }

View

<form method="post" action="<?php echo base_url() . "index.php/userinfo/update_user"?>">
            <?php if($result->num_rows() == 0){
                echo 'No user found';
            }
            else {
                foreach ( $result->result_array() as $new_user ){ ?>
                    <h4>Your name:<input value=" <?php echo $new_user['balance'] ?>" type="text" /> </h4><br />
                    <h4>Your name:<input value=" <?php echo $new_user['id'] ?>" type="text"/> </h4><br/>
                    <h4>Your name: <input value="<?php echo $new_user['userId'] ?>" type="hidden"/> </h4>
                    <input type="submit" id="submit" name="dsubmit" value="Update">
                <?php   }
            }
            ?>

Error message

Message: Undefined property: Userinfo::$Userinfo_model

and

Message: Call to a member function update_user() on null

Thanks, I'm grateful

In your update_user function you didn't include the usermain_info model. That is why the error is coming. Please create constructor function and include the model in it. I have updated your code. Try with this.

<?php    
    function __construct() {
        parent::__construct();
        $this->load->library('session');
        $this->load->model('Userinfo_model');
    }
    public function index(){
        if ( $this->session->userdata('logged_in') ){
            $id = $this->session->userdata('id');            
            $data['result'] = $this->Userinfo_model->get_users($id);
            $this->load->view("usermain_info", $data);
        }
    }
    public function update_user (){
        $data = $this->input->post('userId');
        $id = array(
            'balance' => $this->input->post('balance'),
            'id' => $this->input->post('id')
        );
        $this->Userinfo_model->update_user($id, $data);
        $this->index();
    }

?>

change your view as follows :

<form method="post" action="<?php echo base_url() . "index.php/userinfo/update_user"?>">
        <?php if($result->num_rows() == 0){
            echo 'No user found';
        }
        else {
            foreach ( $result->result_array() as $new_user ){ ?>
                <h4>Your name:<input value=" <?php echo $new_user['balance'] ?>" type="text" name="balance" /> </h4><br />
                <h4>Your name:<input value=" <?php echo $new_user['id'] ?>" type="text" name="id" /> </h4><br/>
                <h4>Your name: <input value="<?php echo $new_user['userId'] ?>" type="hidden" name="userId"/> </h4>
                <input type="submit" id="submit" name="dsubmit" value="Update">
            <?php   }
        }
     ?>
</form>

form will send data to server only if the element has a name

and you cannot submit a form multiple times. The above code will create update button for each row. So if you want to update all the records in a single updation, use update_batch() in codeigniter. and change view as follows :

foreach ( $result->result_array() as $new_user ){ ?>
                <h4>Your name:<input value=" <?php echo $new_user['balance'] ?>" type="text" name="balance" /> </h4><br />
                <h4>Your name:<input value=" <?php echo $new_user['id'] ?>" type="text" name="id" /> </h4><br/>
                <h4>Your name: <input value="<?php echo $new_user['userId'] ?>" type="hidden" name="userId"/> </h4>

            <?php   } ?>
<input type="submit" id="submit" name="dsubmit" value="Update">

for reference : https://www.codeigniter.com/userguide3/database/query_builder.html#updating-data

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