• 21-09-2012, 19:15:43
    #1
    ekranda aldigim hata kodu

    Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /home/xxx.com/httpdocs/ziyaretci-defteri/class/expeniaZD.class.php on line 39
    
    Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in /home/xxx.com/httpdocs/ziyaretci-defteri/class/expeniaZD.class.php on line 168
    
    Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /home/xxx.com/httpdocs/ziyaretci-defteri/class/expeniaZD.class.php on line 193
    home/www.xxx.com/httpdocs/ziyaretci-defteri/class/expeniaZD.class.php kodu

    <?php
    /**
     * ExpeniaZD sınıf dosyası
     *
     * Expenia Internet Solutions tarafından ücretsiz dağıtılmakta olan bir ziyaretçi defteri scriptidir.
     * GNU Public License ile korunmakta olup altta olan linki kaldırmak yasaktır.
     *
     * @author Hüseyin Koyun <mail@huseyin.at>
     * @version 1.0 | 08.11.2011
     * @copyright Copyright (c) 2011, Expenia Internet Solutions
     * @link http://www.expenia.com
     * @license http://opensource.org/licenses/gpl-license.php GNU Public License
     */
     
    class ExpeniaZD {
    
        public $dbhost = 'localhost';
        public $dbname = 'expenia_zd';
        public $dbuser = 'root';
        public $dbpass = '';
        
        public $settings;
        
        /**
         * __construct fonksiyonunda veritabanı bağlantısını kurup,
         * ayarları alıyoruz
         */
        public function __construct($dbhost, $dbuser, $dbpass, $dbname)
        {
            $this->dbhost = $dbhost;
            $this->dbuser = $dbuser;
            $this->dbpass = $dbpass;
            $this->dbname = $dbname;
        
            mysql_connect($this->dbhost, $this->dbuser, $this->dbpass) or die(mysql_error());
            mysql_select_db($this->dbname) or die(mysql_error());
            mysql_query("SET NAMES 'utf8'");
            
            $this->settings = mysql_fetch_array(mysql_query("SELECT * FROM settings WHERE id = 1"));
        }
        
        /**
         *
         * SQL injection, XSS, vb açıklara karşı temizler
         *
         * @access public
         * @static
         * @param mixed
         * @return mixed 
         */
        public static function clean($var)
        {
            $var = trim(mysql_real_escape_string($var));
            
            if(get_magic_quotes_gpc()){
                $var = stripslashes($var);
            }
            
            return $var;        
        }
        
        /**
         *
         * veritabanına gönderilen ziyaretçi defteri kaydını ekler
         *
         * @access public
         * @param string isim soyisim
         * @param string email adresi
         * @param string mesaj
         * @return int|array eğer array dönüyorsa hataları liste
         */
        public function add_message($name, $email, $message)
        {
            // gelen değerleri temizliyoruz
            $name    = self::clean($name);
            $email   = self::clean($email);
            $message = nl2br($message);
            $message = mysql_real_escape_string($message);
            
            // unix timestamp 
            $timestamp = time();
            
            // ip adresi
            $ip = $_SERVER['REMOTE_ADDR'];
            
            // hataları kayıt edeceğimiz diziyi oluşturuyoruz.
            $errors = array();
            
            // eğer name değişkeni boş ise dizimize hatayı ekliyoruz.
            if(empty($name)){
                $errors[] = 'Adınızı soyadınızı yazmadınız.';
            }
            
            // eğer email değişkeni boş ise dizimize hatayı ekliyoruz
            if(empty($email)){
                $errors[] = 'E-Posta adresinizi yazmadınız.';
            }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[] = 'Geçerli bir E-Posta adresi yazmadınız.';
                }
            }
            
            // mesaj alanı 6 karakterden az ise dizimize hatayı ekliyoruz
            if(strlen($message) < 6){
                $errors[] = 'Mesajınız çok kısa.';
            }
            
            // spam kontrol
            if(isset($_COOKIE['add'])){
                $minutes = 0;
                $seconds = $_COOKIE['add'] - time();
                if($seconds > 60){
                    $minutes = floor($seconds / 60);
                    $seconds = $seconds % 60;
                }
                $errors[] = 'Mesaj göndermek için '.$minutes.' Dakika ve '.$seconds.' Saniye beklemeniz gerekmektedir';
            }
            
            // kaç hata olduğunu sayıyoruz
            $count_errors = count($errors);
            
            // eğer yok ise..
            if($count_errors === 0){
                $approval = ($this->settings['approval'] == 0) ? 1 : 0;
                $add_data = mysql_query("INSERT INTO messages (name, email, message, approval, timestamp, ip) VALUES ('$name', '$email', '$message', '$approval', '$timestamp', '$ip')");
                
                if($add_data){
                    setcookie("add", time()+(60*3), time()+(60*3));
                    return true;
                }
                
            }else{
                // eğer hata var ise hataları geri döndürüyoruz
                return $errors;
            }
        }
        
        /**
         *
         * veritabanından bütün verileri çeker
         *
         * @access public
         * @return array
         */
        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 approval = '1' 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 = mysql_num_rows(mysql_query($sql));
            
            // ve veritabanından verilerimizi çekiyoruz
            $result = mysql_query($sql." LIMIT $this->startIndex, $this->perPage");
            
            
            $data = array();
            
            $months = array(
                'January' => 'Ocak',
                'February' => 'Şubat',
                'March' =>  'Mart',
                'April' => 'Nisan',
                'May' => 'Mayıs',
                'June' => 'Haziran',
                'July' => 'Temmuz',
                'August' => 'Ağustos',
                'September' => 'Eylül',
                'October' => 'Ekim',
                'November' => 'Kasım',
                'December' => 'Aralık'
            );
            
            $i = 0;
            //çektiğimiz verileri array'e tanımlayıp döndürüyoruz
            while($row = mysql_fetch_array($result)){
                $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']).' '.$months[date('F', $row['timestamp'])].', '.date('Y', $row['timestamp']);
                $data[$i]['time']       = date('H:i:s', $row['timestamp']);
                $i++;
            }
            
            return $data;
        }
        
        /**
         *
         * 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).'">« Geri</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).'">İleri »</a></li>';
            }
    
            $return .= '</ul>';
            $return .= '</div>';
            
            return $return;
        }
        
        /**
         *
         * admin giriş
         *
         * @access public
         * @param mixed
         * @return int 
         */
        public function admin_login($password)
        {
            $password = md5($password);
            
            return mysql_num_rows(mysql_query("SELECT id FROM settings WHERE admin_pass = '$password'"));
        }
        
        /**
         *
         * ayarları güncellemeye yarar
         *
         * @access public
         * @static
         * @param mixed site adresi: http://www.xxx.com/ziyaretci-defteri
         * @param mixed site başlığı: Ziyaretçi Defterim
         * @param mixed yönetici email: iletisim@xxx.com
         * @param mixed şifre: expenia
         * @return bool 
         */
        public function settings_update($url, $title, $email, $password, $approval)
        {
            $url        = self::clean($url);
            $title      = self::clean($title);
            $email      = self::clean($email);
            $password   = self::clean($password);
    
            if(empty($password)){
                if(mysql_query("UPDATE settings SET url = '$url', title = '$title', admin_email = '$email', approval = '$approval' WHERE id = '1'")){
                    return true;
                }
            }else{
                $password = md5($password);
                if(mysql_query("UPDATE settings SET url = '$url', title = '$title', admin_email = '$email', approval = '$approval', admin_pass = '$password' WHERE id = '1'")){
                    return true;
                }
            }
        }
    }
    
    ?>
  • 21-09-2012, 23:52:00
    #2
    veritabanı ayarlarınızın doğru olduğundan eminseniz ve bağlatınız doğru kurulduysa sıkıntı çekilecek verinin sayfaya düşmemesinden kaynaklanıyor. hata verdiği satırlardaki komutların doğru tablolardan doğru verileri çektiğinden emin olun

    Sanki şu kısım düzenlenmemiş gibi yada kullanıcının okuma izinleri olmayabilir

        public $dbhost = 'localhost';
        public $dbname = 'expenia_zd';
        public $dbuser = 'root';
        public $dbpass = '';
  • 22-09-2012, 09:12:26
    #3
    big_turk adlı üyeden alıntı: mesajı görüntüle
    veritabanı ayarlarınızın doğru olduğundan eminseniz ve bağlatınız doğru kurulduysa sıkıntı çekilecek verinin sayfaya düşmemesinden kaynaklanıyor. hata verdiği satırlardaki komutların doğru tablolardan doğru verileri çektiğinden emin olun

    Sanki şu kısım düzenlenmemiş gibi yada kullanıcının okuma izinleri olmayabilir

        public $dbhost = 'localhost';
        public $dbname = 'expenia_zd';
        public $dbuser = 'root';
        public $dbpass = '';

    vermis oldugunuz alaninda bilgilerini tanittim sonuc hala ayni hocam anlamadim gitti
  • 22-09-2012, 09:26:41
    #4
    Üyeliği durduruldu
    Settings tablondaki 1nolu id yi tekrar kontrol etmeni oneririm.

    S3 mobile message.
  • 22-09-2012, 09:34:07
    #5
    yapacagimi soylersen bakayim hocam
  • 22-09-2012, 10:16:20
    #6
    $this->settings = mysql_fetch_array(mysql_query("SELECT * FROM settings WHERE id = 1"));

    Bu Kısmı

    $this->settings = mysql_fetch_array(mysql_query("SELECT * FROM settings WHERE id = '1'"));


    Boyle Düzeltin Aldığınız Hata Yerlerinde

    1 Rakamını Tek Tırnak Yani ' ' İçine Alın
  • 22-09-2012, 10:35:02
    #7
    Bay_Keskin adlı üyeden alıntı: mesajı görüntüle
    $this->settings = mysql_fetch_array(mysql_query("SELECT * FROM settings WHERE id = 1"));

    Bu Kısmı

    $this->settings = mysql_fetch_array(mysql_query("SELECT * FROM settings WHERE id = '1'"));


    Boyle Düzeltin Aldığınız Hata Yerlerinde

    1 Rakamını Tek Tırnak Yani ' ' İçine Alın

    Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/xxx.com/httpdocs/ziyaretci-defteri/class/expeniaZD.class.php on line 84
    onu duzeltincede hata boyle
  • 23-09-2012, 20:33:05
    #8
    Tek Tırnakların Önüne \ İşareti Koyun Yani\' Böyle