Welcome Guest, Not a member yet? Register   Sign In
problem with $posts variable
#1

i am a beginner in codeigniter,i am trying to make a crud website for learning website but i am facing this error.
A PHP Error was encountered
Severity: Notice
Message: Undefined variable: posts
Filename: posts/index.php
Line Number: 2
Backtrace:
File: /opt/lampp/htdocs/codeigniter/application/views/posts/index.php
Line: 2
Function: _error_handler
File: /opt/lampp/htdocs/codeigniter/application/controllers/Posts.php
Line: 23
Function: view
File: /opt/lampp/htdocs/codeigniter/index.php
Line: 315
Function: require_once

my controller file is

<?php
class Posts extends CI_Controller{
    public function index(){
        $data['title']='Latest Posts';
        $data['posts']=$this->Post_model->get_posts();




        $this->load->view('templates/header');
        $this->load->view('posts/index',$data);
        $this->load->view('templates/footer');
    }
    public function view($slug=NULL)
    {
        $data['post']=$this->Post_model->get_posts($slug);
        if(empty($data['post'])){
            show_404();
        }
        $data['title']=$data['post']['title'];
        print_r('$data');




        $this->load->view('templates/header');
        $this->load->view('posts/view',$data);
        $this->load->view('templates/footer');
    }

    public function create(){
        $data['title']='create post';
        $this->form_validation->set_rules('title','Title','required');
        $this->form_validation->set_rules('body','body','required');
        if($this->form_validation->run()===false){$this->load->view('templates/header');

        $this->load->view('posts/create',$data);
        $this->load->view('templates/footer');


        }
        else{
            $this->Post_model->create_post();
            printr('$data');

redirect('posts');
}

        
        }
        public function delete($id)
        {
            $this->Post_model->delete_post($id);
            redirect('posts');
        }



        
    public function edit($id)
    {

        $data['post']=$this->Post_model->get_posts($slug);
        if(empty($data['post'])){
            show_404();
        }
        $data['title']='edit post';
        $this->load->view('templates/header');
        $this->load->view('posts/index',$data);
        $this->load->view('templates/footer');
    }

    public function update()
    {
         $this->Post_model->update_post();
         redirect('posts');
}
}




my model file is
<?php
class Post_model extends CI_Model{
    public function __construct(){
$this->load->database();

    }
public function get_posts($slug=false){
if($slug===false){
    $this->db->order_by('id','DESC');

    $query=$this->db->get('posts');
    return $query->result_array();

}
$query=$this->db->get_where('posts',array('slug'=>$slug));
    return $query->row_array();
}
public function create_post(){
    $slug=url_title($this->input->post('title'));
    $data=array('title'=>$this->input->post('title'),
        'slug'=>$slug,
        'body'=>$this->input->post('body')
        );
    return $this->db->insert('posts',$data);
    
}

public function delete_post($id){

    $this->db->where('id',$id);
    $this->db->delete('posts');
    return true;
}

public function update_post()
{
    $slug=url_title($this->input->post('title'));
    $data=array('title'=>$this->input->post('title'),
        'slug'=>$slug,
        'body'=>$this->input->post('body')
        );    $this->db->where('id',$this->input->post('id'));
    return $this->db->update('posts',$data);

    

}


}
my index view is


<h2><?=$title?></h2>
<?php foreach($posts as $post)?>
    <h3><?php echo $post['title'];?></h3>o
    <small class="post-date">Posted on:<?php echo $post['created at'];?></small><br>
    <?php echo word_limiter($post['body'],60);?>
    <p><a class="btn btn-default" href="<?php echo site_url('/posts/' .$post['slug']);?>">read more</a></p>
    
<?php endforeach;?>

i am autoloaing my database in config.
plz someone help me out i am stuck.
Reply
#2

See my answer in this thread:
https://forum.codeigniter.com/thread-67686.html
Reply
#3

Your view file has a loop that reads

Code:
foreach($posts as $post)

but in your controller you set the variable to $data['post']. You need to change it to $data['posts'] for your loop to work correctly.
Reply
#4

Perhaps, I'm wrong with my first post. Sorry but the code is a bit messy. I don't see you loading your model and you didn't post your model. As a test try setting $data['posts'] = array('first', 'second', 'third'); and see if your loop runs.
Reply
#5

now I see your model. Try to use the code block when posting code. Easier to see. Big Grin
Reply
#6

(This post was last modified: 03-26-2017, 12:10 AM by anmol.)

sir can you plz visit this forum,i have tried to make things a bit clearer over.here,it woul be a great help for me.
https://forum.codeigniter.com/thread-676...#pid342031
Reply




Theme © iAndrew 2016 - Forum software by © MyBB