Problem: I am trying to do a header("locatio n: $url"); call.
Here is the error message:
The header location call is the line 53 in the error message. Below is the code for the NewsItem class. If I comment the usage of the NewsItem class everything works fine, so logic suggests something is wrong in the NewsItem class, but I don't see it.
The error appears even if I don't use the if statement where the NewsItem class is used.
Does anyone see the problem?
first here is the form_handler.ph p code which has the error on line 54
And here's the NewsItem class
Best regards
Rythmic
Here is the error message:
Warning: Cannot modify header information - headers already sent by (output started at D:\dev\web\brfc irkusprinsessan \dev\classes\Ne wsItem.php:1) in D:\dev\web\brfc irkusprinsessan \dev\handlers\f orm_handler.php on line 53
The error appears even if I don't use the if statement where the NewsItem class is used.
Does anyone see the problem?
first here is the form_handler.ph p code which has the error on line 54
Code:
<?php
session_start();
require_once '../classes/Calendar.php';
require_once '../classes/DBEasy.php';
require_once '../classes/Email.php';
require_once '../classes/NewsHolder.php';
require_once '../classes/NewsItem.php';
$widget = $_POST['widget'];
$action = $_POST['action'];
$db_id = $_POST['dbid'];
$location = getenv('HTTP_REFERER');
// *** dispatcher code ***
//
// calendar update
if ( $widget == 'calendar' && $action == 'update') {
$cal = new Calendar($db_id);
$cal->set_title($_POST['title']);
$cal->set_description($_POST['desc']);
$cal->save();
}
else if ($action=='doemail') {
$to = 'styrelsen@example.com';
$sub = 'Nytt kontaktmail - ' . $_POST['sub'];
$msg = $_POST['msg'];
$sender = 'hemsidan@example.com';
$sender_name = 'Hemsidans kontaktform';
//construct($recipient, $subject,$message,$sender,$sender_name='',$recipient_name='')
$email = new Email($to,$sub,$msg,$sender,$sender_name);
Email::send($email);
}
else if ( $widget == 'newsholder' && $action == 'update') {
$nh = new NewsHolder($db_id);
$nh->set_title($_POST['title']);
$nh->set_description($_POST['desc']);
$nh->set_max_news_displayed($_POST['max_news_displayed']);
$nh->set_max_news_message_length($_POST['max_news_message_length']);
$nh->save();
}
else if ( $widget == 'newsitem' && $action == 'update') {
$ni = new NewsItem($db_id);
$ni->set_title($_POST['title']);
$ni->set_message($_POST['message']);
//TODO: add image id handling
$ni->save();
}
// after updating the data model go back to referring page
header('Location: ' . $location);
?>
And here's the NewsItem class
Code:
<?php
class NewsItem {
private $db_id;
private $newsholder_id;
private $author_id;
private $creation_date;
private $title;
private $message;
private $image_url;
private $editable = false;
private $use_lightbox_view = true;
private $use_lightbox_edit = true;
public function __construct($db_id=-1) {
if ( $db_id != -1 ) {
$this->fetch($db_id);
if ( is_null( $this->db_id ) ) {
// handle error
}
}
}
public function get_db_id() {
return $this->db_id;
}
public function get_newsholder_id() {
return $this->newsholder_id;
}
public function set_newsholder_id($newsholder_id) {
$this->newsholder_id = $newsholder_id;
}
public function get_author_id() {
return $this->author_id;
}
public function set_author_id($author_id) {
$this->author_id = $author_id;
}
public function get_creation_date() {
return $this->creation_date;
}
public function get_title() {
return $this->title;
}
public function set_title($title) {
$this->title = $title;
}
public function get_message() {
return $this->message;
}
public function set_message($message) {
$this->message = $message;
}
public function get_image_url() {
return $this->image_url;
}
public function set_image_url($url) {
$this->image_url = $url;
}
public function get_editable() {
return $this->editable;
}
public function set_editable($editable) {
$this->editable = $editable;
}
/**
* @desc populates this NewsItem with data from the News containing the given
* db_id;
*/
private function fetch($db_id) {
$tbl = 'news_items';
$cols = array('news_item_id','news_holder_id', 'author_id', 'creation_date', 'title','message','image_url');
$db = new DBEasy($tbl, $cols);
$rows = $db->conditional_select(array(array('news_item_id','=','"' . $db_id .'"' )));
//if results - add values to fields
if ( count($rows) > 0 ) {
$this->db_id= $rows[0]['news_item_id'];
$this->newsholder_id = $rows[0]['news_holder_id'];
$this->author_id= $rows[0]['author_id'];
$this->creation_date= $rows[0]['creation_date'];
$this->title = $rows[0]['title'];
$this->message = $rows[0]['message'];
$this->image_url = $rows[0]['image_url'];
}
}
public function save() {
$tbl = 'news_items';
$cols = array('news_item_id','news_holder_id', 'author_id', 'creation_date', 'title','message','image_url');
$value_pairs = array('news_holder_id'=>$this->newsholder_id, 'author_id'=>$this->author_id, 'creation_date'=>$this->creation_date, 'title'=>$this->title,'message'=>$this->message,'image_url'=>$this->image_url);
$db = new DBEasy($tbl, $cols);
//insert
if (is_null($this->db_id) || $this->db_id == -1) {
$success = $db->insert($value_pairs);
}
//update
else {
$success = $db->conditional_update($value_pairs, array(array( 'news_item_id','=',$this->db_id)));
}
}
public function get_date($style=1) {
if ($style == 1)
return substr($this->creation_date, 0,10);
else if ($style == 2) {
return substr($this->creation_date,9,1) . '/' . substr($this->creation_date,6,2) . substr($this->creation_date, 0,4);
}
else if ($style == 3) {
return substr($this->creation_date,9,1) . ' ' . self::get_month_name(substr($this->creation_date,6,2)) . ' ' . substr($this->creation_date, 0,4);
}
else if ($style == 4) {
return substr($this->creation_date,9,1) . ' ' . self::get_month_name(substr($this->creation_date,6,2),true) . ' ' . substr($this->creation_date, 0,4);
}
}
public static function get_month_name($nbr, $full_name= false) {
if (!$full_name)
$month_names = array('jan','feb','mar','apr','maj','jun','jul','aug','sep','okt','nov','dec');
else
$month_names = array('januari','februari','mars','april','maj','juni','juli','augusti','september','oktober','november','december');
return $month_names[$nbr-1];
}
public function present_message($max_length = 0) {
if ( $max_length == 0)
return $this->message;
$disallowed_end_arr = array(',','.','!','?','-',';',':'."'");
if ( strlen($this->message) > $max_length ) {
for($i = $max_length; $i > 0; $i--) {
if ( strcmp(substr($this->message,$i,1),' ') === 0 )
if ( strcmp(substr($this->message,($i-1),1),',' ) === 0 ) {
return substr($this->message,0,$i-1) . '...';
}
else
return substr($this->message,0,$i) . '...';
}
}
else
return $this->message;
}
public function render($max_length = 0) {
if ( $this->use_lightbox_edit)
$class = 'lbOn';
else
$class = '';
$edit_link = '<a class="' . $class . '" href="adm_edit_news_item.php?ni=' . $this->db_id . '">Redigera</a>';
$code = array();
$code[] = '<div class="news_item" style="border:1px solid #000;margin:10px 3px;padding:0;">' ."\n";
$code[] = '<div class="news_item_header" style="background-color:#000;border-bottom:1px solid #000;">';
$code[] = '<h5 class="news_date" style="color:#555;font-family:verdana;font-size:10px;font-style:italic;padding: 2px 5px 2px 10px;;margin:0;text-align:right;">' . $this->get_date(4) . "</h5>";
$code[] = '<h4 class="news_rubrik" style="color:#ddd;font-family:arial;font-size:12px;font-weight:bold;padding:2px 10px 2px 5px;margin:0;">' . $this->title . '</h4>';
if ($this->editable)
$code[] = '<h4 class="news_rubrik" style="color:#ddd;font-family:arial;font-size:12px;font-weight:bold;padding:2px 10px 2px 5px;margin:0;">' . $edit_link . '';
$code[] = "</div>";
$code[] = '<div class="news_text" style="background-color:#eee;padding: 3px 5px;">' . $this->present_message($max_length);
//$code[] = '<div class="news_text" style="background-color:#f00;padding: 3px 5px; color:#fff;">' . $max_length;
if ($max_length != 0 && strlen($this->message) > $max_length) {
if ($this->use_lightbox_view)
$class = 'lbOn';
else
$class = '';
$code[] = '<br /><a class="'.$class.'" href="nyheter.php?nh=' . $this->newsholder_id . '&id=' . $this->db_id . '" title="Läs hela nyheten: ' . $this->title . '">Läs mer...</a>';
}
$code[] = "</div>";
$code[] = "</div>";
return join("\n", $code);
}
public function render_thumbnail_image() {
}
}
?>
Rythmic
Comment