• 26-06-2014, 10:44:24
    #1
    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;
        }
    	
    }
    ?>
  • 27-06-2014, 14:58:14
    #2
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Sayfanın üst tarafını;
    <?php ob_start(); ?>
    <?php
    session_start();
    class expenia{

    bu şekilde. Alt tarafını ise;

    if($this->numOfPages > 1)
    return $return;
    }

    }
    ?>
    <?php ob_end_flush(); ?>

    bu şekilde değiştirerek deneyin hocam. Ayrıca session_start(); komutunu kaldırmayın eğer kaldırırsanız oturum açılmaz ve güvenlik kodu hatalı der.
  • 27-06-2014, 17:47:14
    #3
    session_start(); önünde boşluk olmaması gerekiyor dikkat edin bazen bir boşluk bile hatayı vermeye sebep olabiliyor.
  • 27-06-2014, 18:35:20
    #4
    ob_start(); isini görür. Bu sefer de header ile alakali bir hata alir isen dosyayi UTF-8 bomsuz olarak kaydet.
  • 27-06-2014, 21:14:31
    #5
    yanlıs php yi eklemişsin bu kodda yönlendirme yok .

    ziyaretci/index.php yapıştırsana bir ilk satırında yönlendirmen var gibi
  • 30-06-2014, 11:13:38
    #6
    sawashan adlı üyeden alıntı: mesajı görüntüle
    Sayfanın üst tarafını;
    <?php ob_start(); ?>
    <?php
    session_start();
    class expenia{

    bu şekilde. Alt tarafını ise;

    if($this->numOfPages > 1)
    return $return;
    }

    }
    ?>
    <?php ob_end_flush(); ?>

    bu şekilde değiştirerek deneyin hocam. Ayrıca session_start(); komutunu kaldırmayın eğer kaldırırsanız oturum açılmaz ve güvenlik kodu hatalı der.

    Hocam dediğiniz gibi yaptım ama hala sorun veriyor. Bomsuz UFT-8 de denedim yine olmadı. Sayfanın sol hali

    <?php ob_start(); ?>
    <?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;
    }
    
    }
    ?>
    <?php ob_end_flush(); ?>
    Hata

    Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/karadag/public_html/newziya/index.php:1) in /home/karadag/public_html/newziya/libs/expenia.class.php on line 3
  • 30-06-2014, 12:56:20
    #7
    isterseniz teamviewer ile bağlanıp çözmeye çalışayım