Merhaba arkadaşlar, ziyaretçi defteri scriptinde bir hata almaya başladım.
Hatayı session_start(); yerine ob_start(); ile değiştirdim mi hata kayboluyor fakat bu seferde formu gönderirken güvenlik kodunu yanlış girdiniz uyarısı veriyor.
Sizce nasıl çözebilirim bu sorunu?
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/hancicom/public_html/ziyaretci/index.php:1) in /home/hancicom/public_html/ziyaretci/libs/expenia.class.php on line 2
Hata veren sayfanın tam kodu
<?php
session_start();
class expenia{
public $version = "2.0";
public function __construct($dbhost, $dbuser, $dbpass, $dbname){
// database connection
$this->db = new mysqli($dbhost, $dbuser, $dbpass, $dbname) or die ('Veritabanı bağlantısı sağlanamadı: ' . mysqli_connect_error());
// set names to utf8
$this->db->query("SET NAMES 'utf8'");
// get settings from database
$result = $this->db->query("SELECT * FROM settings WHERE id = 1");
$this->settings = $result->fetch_object();
// define systempath
if (realpath($system_path) !== FALSE){ $system_path = realpath($system_path).'/'; }
$system_path = rtrim($system_path, '/').'/';
if (!is_dir($system_path)){ exit("Hata: ".pathinfo(__FILE__, PATHINFO_BASENAME) ); }
define('BASEPATH', str_replace("\\", "/", realpath(dirname(__FILE__))));
// get language file
include_once str_replace('libs', '', BASEPATH)."/lang/" . $this->settings->lang . ".php";
$this->lang = $lang;
}
public function security($var){
$var = trim(mysqli_real_escape_string($this->db, $var));
if(get_magic_quotes_gpc()){
$var = stripslashes($var);
}
$var = strip_tags($var);
return $var;
}
public function add_message($name, $email, $captcha, $message){
$name = $this->security($name);
$email = $this->security($email);
$message = nl2br($message);
$message = mysqli_real_escape_string($this->db, $message);
$timestamp = time();
$ip = $_SERVER['REMOTE_ADDR'];
$errors = array();
if(empty($name)){
$errors[] = $this->lang['NAME_SURNAME_EMPTY'];
}
// eğer email değişkeni boş ise dizimize hatayı ekliyoruz
if(empty($email)){
$errors[] = $this->lang['EMAIL_EMPTY'];
}else{ // email değişkeni boş değilse geçerli olup olmadığını kontrol ediyoruz
if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
// eğer geçerli değil ise dizimize hatayı ekliyoruz
$errors[] = $this->lang['INVALID_EMAIL'];
}
}
// mesaj alanı 6 karakterden az ise dizimize hatayı ekliyoruz
if(strlen($message) < 6){
$errors[] = $this->lang['MESSAGE_TOO_SHORT'];
}
// güvenlik kodu
if(empty($captcha)){
$errors[] = $this->lang['EMPTY_CAPTCHA'];
}else{
if (md5($captcha) != $_SESSION['captcha_code']){
$errors[] = $this->lang['INVALID_CAPTCHA'];
}
}
$smiley = array(';-D', ':-D', ':))', ':-)', ':-O', ':-P', ':-(', ':-|', ';-)');
$source = array(
'<img src="'.$this->settings->url.'/themes/'.$this->settings->theme.'/assets/img/smilies/emoticon_evilgrin.png" alt=";-D" />',
'<img src="'.$this->settings->url.'/themes/'.$this->settings->theme.'/assets/img/smilies/emoticon_grin.png" alt=":-D" />',
'<img src="'.$this->settings->url.'/themes/'.$this->settings->theme.'/assets/img/smilies/emoticon_happy.png" alt=":))" />',
'<img src="'.$this->settings->url.'/themes/'.$this->settings->theme.'/assets/img/smilies/emoticon_smile.png" alt=":-)" />',
'<img src="'.$this->settings->url.'/themes/'.$this->settings->theme.'/assets/img/smilies/emoticon_surprised.png" alt=":-O" />',
'<img src="'.$this->settings->url.'/themes/'.$this->settings->theme.'/assets/img/smilies/emoticon_tongue.png" alt=":-P" />',
'<img src="'.$this->settings->url.'/themes/'.$this->settings->theme.'/assets/img/smilies/emoticon_unhappy.png" alt=" :-(" />',
'<img src="'.$this->settings->url.'/themes/'.$this->settings->theme.'/assets/img/smilies/emoticon_waii.png" alt=":-|" />',
'<img src="'.$this->settings->url.'/themes/'.$this->settings->theme.'/assets/img/smilies/emoticon_wink.png" alt=" ;-)" />'
);
$message = str_replace($smiley, $source, $message);
if(count($errors) === 0){
$approval = ($this->settings->approval == 0) ? 1 : 0;
if($this->db->query("INSERT INTO messages (name, email, message, approval, timestamp, ip) VALUES ('$name', '$email', '$message', '$approval', '$timestamp', '$ip')")){
return true;
}
}else{
// eğer hata var ise hataları geri döndürüyoruz
return $errors;
}
}
public function show_response($id){
$query = $this->db->query("SELECT * FROM messages WHERE parent_id = '$id'");
if($query->num_rows == 1){
return $query->fetch_object();
}else{
return false;
}
}
public function get_messages(){
// eğer yönetici giriş yapmış ise bütün mesajları alıyoruz
if($_SESSION['loggedIn'] == 1){
$sql = "SELECT * FROM messages ORDER BY id DESC";
}else{ // giriş yapmamışsa sadece onaylanmış mesajları alıyoruz
$sql = "SELECT * FROM messages WHERE parent_id = '0' ORDER BY id DESC";
}
//adres çubuğuna yazılanı çekiyor kontrol ediyoruz
$this->pageNumber = (isset($_GET['page']) && is_numeric($_GET['page'])) ? $_GET['page'] : 1;
// sayfa başı kaç öğe olacağını belirliyoruz
$this->perPage = 10;
//sayfanın sağında ve solunda kaç sayfa göstereceğini belirliyoruz
$this->padding = 5;
//sayfanın kaçtan başlayacağını hesaplıyoruz
$this->startIndex = ($this->pageNumber * $this->perPage) - $this->perPage;
//toplam kaç adet veri olduğunu alıyoruz
$this->rowCount = $this->db->query($sql)->num_rows;
// ve veritabanından verilerimizi çekiyoruz
$result = $this->db->query($sql." LIMIT $this->startIndex, $this->perPage");
$data = array();
$i = 0;
if($this->rowCount > 0){
//çektiğimiz verileri array'e tanımlayıp döndürüyoruz
while($row = $result->fetch_assoc()){
$data[$i]['id'] = $row['id'];
$data[$i]['name'] = $row['name'];
$data[$i]['message'] = $row['message'];
$data[$i]['approval'] = $row['approval'];
$data[$i]['ip'] = $row['ip'];
$data[$i]['date'] = date('d', $row['timestamp']).' '.$this->lang[date('F', $row['timestamp'])].', '.date('Y', $row['timestamp']);
$data[$i]['time'] = date('H:i:s', $row['timestamp']);
$i++;
}
return $data;
}else{
return false;
}
}
/**
*
* sayfaları yazdırmaya yarayan fonksiyon
*
* @access public
* @return html
*/
public function display_pagination(){
//toplam sayfa sayısı
$this->numOfPages = ceil($this->rowCount / $this->perPage);
$return = '';
$return .= '<div id="pagination">';
$return .= '<ul>';
if($this->pageNumber > 1){
$return .= '<li><a href="?page='.($this->pageNumber - 1).'">« '.$this->lang['PRV'].'</a></li>';
}
##################################
if(($this->pageNumber - $this->padding) > 1){
$return .= '<li><a>...</a></li>';
$this->lowerLimit = $this->pageNumber - $this->padding;
for($i = $this->lowerLimit; $i < $this->pageNumber; $i++){
$return .= '<li><a href="?page='.$i.'">'.$i.'</a></li>';
}
}else{
for($i = 1; $i < $this->pageNumber; $i++){
$return .= '<li><a href="?page='.$i.'">'.$i.'</a></li>';
}
}
#####################################
if(($this->pageNumber != 0)){
$return .= '<li><a class="current">'.$this->pageNumber.'</a></li>';
}
######################################
if($this->pageNumber + $this->padding < $this->numOfPages) {
$this->upperLimit = $this->pageNumber + $this->padding;
for($i = ($this->pageNumber + 1); $i <= $this->upperLimit; $i++){
$return .= '<li><a href="?page='.$i.'">'.$i.'</a></li>';
}
$return .= "<li><a>...</a></li>";
}else{
for($i = $this->pageNumber + 1; $i < $this->numOfPages + 1; $i++){
$return .= '<li><a href="?page='.$i.'">'.$i.'</a></li>';
}
}
###################################
if($this->pageNumber != $this->numOfPages){
$return .= '<li><a href="?page='.($this->pageNumber + 1).'">'.$this->lang['FWD'].' »</a></li>';
}
$return .= '</ul>';
$return .= '</div>';
if($this->numOfPages > 1)
return $return;
}
}
?>