user2988211
user2988211

Reputation: 69

Codeigniter error message Cannot modify header information

I got this error message when i run my php CodeIgniter project:

A PHP Error was encountered

Severity: Warning

Message: Cannot modify header information - headers already sent by (output started at C:\AppServ\www\tree\application\models\mtree.php:17)

Filename: core/Common.php

Line Number: 442

line 17:

echo $row->members_id . "</br>";

this is my model function:

function convert_all() {
    $this->db->empty_table('table1');
    $this->db->empty_table('table2');
    $this->db->query("INSERT INTO `table1` (`members_id`, `members_username`);
    $query = $this->db->get('table2');
    foreach ($query->result() as $row) {
        if ($row->members_id > 1) {
            echo $row->members_id . "</br>";
        }
        if ($this->isadvanced($row->members_id, $row->members_direct_id)) {
            $this->insert_to_right($row, $row->members_direct_id);
        } else {
            $this->insert_to_left($row, $row->members_direct_id);
        }
    }
}

Upvotes: 2

Views: 22995

Answers (4)

Monir
Monir

Reputation: 115

You can't display anything before the header function is called. You should not display anything form model or controller to avoid this kind of error. If you want to display something form the controller or model then you should store the output to the buffer instead of sending it to the browser. You can store the output to the buffer using ob_start() function before header() function is called. Then you can do something like this

if(true)
{
    header("Location:http://google.com");
}
else
{
   ob_end_flush();
}

Upvotes: 1

MALIK KHAN
MALIK KHAN

Reputation: 41

I think it will be helpfull Use $config['sess_save_path'] = sys_get_temp_dir(); instead of $config['sess_save_path'] = NULL; in your Application/config/config.php file

Upvotes: 1

linuxeasy
linuxeasy

Reputation: 6499

While using codeigniter, its best recommended that you echo only in views.

Echoing anywhere randomly sends some data to browser, after which you can't modify headers (this includes attempt to redirect, set content-type, etc)

You should re-organize your code, such that, echo are done within views only. This will solve your header issues in Codeigniter.

This also includes extra whitespaces at the end after the closing brace "} ?>" in non-view php files.

Upvotes: 12

joemisika
joemisika

Reputation: 74

this was your issue - echo $row->members_id . ""; -- as the above answers say, don't echo something in your controllers, push to do it in the views - always

Upvotes: 0

Related Questions