Jannis M
Jannis M

Reputation: 745

Codeigniter tutorial delete Post doesn't work

After completing the tutorial from the codeigniter user guide I ran into a problem I was forcing for the last two hours. I am trying to add functionality to delete a post, selected by ID, I am new to PHP and couldn't find any solution for my problem:

The Controller

public function delete($id){
    $id = $this->uri->segment(3);

    $data['title'] = 'Delete an item';

    if($this->news_model->delete_news($id)){
        $this->load->view('templates/header', $data);  
        $this->load->view('news/success');
        $this->load->view('templates/footer');
    }else{
    }
}

The Model

  public function delete_news($id){
        $this->db->where('id',$id)->delete('news');

        return $this->db->affected_rows();
    }

The Routing

   $route['news/delete/(:num)'] = 'news/delete/$1';

I'm calling the function out of the index-page where all posts are shown with an anchor:

<p><a href="<?php echo site_url('news/delete/'.$news_item['id'])?>">Delete article</a></p>

and it calls the correct URL (http://localhost/webapp/index.php/news/delete/2) which should correctly execute and delete the post with the ID 2 from my news table.

I really can't understand where the mistake ism but by executing this, I get a 404. What am I doing wrong?

Upvotes: 1

Views: 1038

Answers (1)

AshBrad
AshBrad

Reputation: 492

In your function delete I don't see that you loaded the news_model. That could be the issue if it isn't auto-loading. Perhaps, start by verifying that the controller is talking to the model by inserting:

echo 'Hello Model';

in the delete_news function of your news_model.

EDIT:

Instead of

  if($this->news_model->delete_news($id)){ 
     //conditions
  }

And

Have your model send a T/F based on it's execution. This will tell us if the error is in the SQL. By returning TRUE no matter what, we'll see if that model function even runs:

 return TRUE;

Try to add the step (for error checking)

$del = $this->news_model->delete_news($id);
echo 'del';
if($del == TRUE){
   //conditions
}

With the 404 - I'm also suspicious it's a routing issue. I'll take a look at that as well.

Upvotes: 3

Related Questions