• 31-01-2013, 13:40:04
    #1
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Merhaba arkadaşlar;

    Javascript,ajax,php ve postgresql le çalışan ağaç yapısı var mysql de hazır şablonu postgresql e çevirmek istiyorum. Agacı en yalın haline getirdim. Sadece veri çekip gösterecek hale. Nesneye yönelimli programlama kullanılmış ve benim bu konuda bilgim pek yeterli değil. Uzun süredir üzerinde çalışıyorum az da olsa yol kattetiğimi düşünüyorum. Lafı uzatmadan sorunu yazayım.

    <?php
    class _tree_struct {
    	// Structure table and fields
    
    	protected $fields	= array(
    			"_id"		=> false,
    			"_parent_id"	=> false,
    			"_position"	=> false,
    			"_left"		=> false,
    			"_right"	=> false,
    			"_level"	=> false
    		);
    
    	// Constructor
    	function __construct($table = "tree", $fields = array()) {
    		$this->table = $table;
                    
    			foreach($this->fields as $k => &$v) { $v = $k; }
    		
    		// Database
    		$this->db = new _database;
    	}
    
    	//veri çekiliyor.
    	function _get_children($id, $recursive = false) {
    		$children = array();
    		$this->db->query("SELECT ".implode(" , ", $this->fields)." FROM ".$this->table." WHERE ".$this->fields["_parent_id"]." = ".(int) $id." ORDER BY ".$this->fields["_position"]." ASC");
    		
    		while($this->db->nextr()) $children[$this->db->f($this->fields["_id"])] = $this->db->get_row("assoc");
    		return $children;
    	}
    	
    	
    }
    
    //type ve title ekleniyor.
    class json_tree extends _tree_struct { 
    	function __construct($table = "tree", $fields = array(), $add_fields = array("_title" => "_title", "_type" => "_type")) {
    		parent::__construct($table, $fields);
    		$this->fields = array_merge($this->fields, $add_fields);
    		$this->add_fields = $add_fields;
    	}
    
    	
    	function get_children($data) {
    		$tmp = $this->_get_children((int)$data["id"]); //id'ye dokunma.
    		
    		foreach($tmp as $k => $v) {
    			$result[] = array(
    				"attr" => array("id" => "node_".$k, "rel" => $v[$this->fields["_type"]]), //id'ye dokunma
    				"data" => $v[$this->fields["_title"]],
    				"state" => ((int)$v[$this->fields["_right"]] - (int)$v[$this->fields["_left"]] > 1) ? "closed" : ""
    			);
    		}
                    
    		return json_encode($result);
    	}
    	
    	
    }
    
    ?>
    Yukarıda ki dosyada gördüğünüz sorgulama doğru mu ya da postgresql de doğrusu nasıl olmalı? Burada ki $this-> 'in mantığı nedir kavrayamadım gitti.

    Gelelim diğer hataya veritabanına bağlantı kodlarını yazayım

    <?php
    class _database {
    	
    	function connect() {
                $this->data = new PDO('pgsql:host=localhost;dbname=agac;port=5432', "postgres", "1");
                return true;
    	}
    
    	function query($sql) {
    		$this->connect();
    		$this->result = $this->data->query($sql) ;
    		return ($this->result) ? true : false;
    	}
    	
    	function nextr(){
    		
    		unset($this->row);//row u temizle.
    		$this->row = $this->result->fetch_array(PGSQL_BOTH); //row 'a veriyi çek.
    		return ($this->row) ? true : false ;
    	}
    
    	function get_row($mode = "both") {
    		switch($mode) {
    			default:
    				$return = $this->row;
    				break;
    		}
    		return array_map("stripslashes",$return);
    	}
    
    
    
    	function f($index) {
    		return stripslashes($this->row[$index]);
    	}
    
    
    }
    Mysql de bağlanınca problem olmuyor ama yukarıda ki gibi postgresql e çevirdiğimde veri çekmede problem yaşıyorum. Kolon adlarında problem yok. Hepsi birebir eşleşiyor.

    Nerde hata yapıyorum acaba?
  • 31-01-2013, 18:55:27
    #2
    Aldığın hata ne, PostgreSQL de basit bir iki syntax farklılığı var ama sendeki sorgu normal düz bir sorgu çalışması gerekiyor.
  • 31-01-2013, 19:13:41
    #3
    Aldığınız hatayı bilmemiz gerekir, kodlarda bir hata gözükmüyor.
    $this in mantığı ise kullanıldığı klasın içindeki değişken veya fonksiyonlara erişmede kullanılır.

    class a{
    $degisken1 = 1;
    echo $this->degisken1;
    }
    en basit haliyle böyle konuyla alakasız ama değinmek istedim.
    Tahminimce hata port'tan kaynaklı olabilir gibi geliyor.
  • 31-01-2013, 19:18:21
    #4
    dbuser ve password yok bu arada database connect() de.
  • 31-01-2013, 19:25:08
    #5
    $dbh = new PDO('pgsql:host=localhost;port=5432;dbname=testdb;user=bruce;password=mypass');
    Php nin resmi sitesinde kullanım bu şekilde gösteriliyor. Siz $user ve $pass yerini sanırsam değiştirmemişsiniz şifrenizin 1 olamayacağını göz önünde bulundurursak. Connect fonksiyonunuzu bu kurala uygun olarak yeniden düzenleyin. Sadece PDO parantezleri içindeki kısımdan bahsediyorum. kullanıcı adı ve parolanızı veritabanı bilgilerinizi bir kontrol edin.
  • 01-02-2013, 13:10:01
    #6
    İşin kötüsü hata alamıyorum. Hatayı görüntüleyemiyorum daha doğrusu. Database connect te problem yok şifre 1 sorun nerde anlayamadım. Dosyaların tamamını vereyim isterseniz bir göz atın. İndex server.php 'yi gösteriyor. server.php içeriği :

    <?php
    require_once("config.php");
    $jstree = new json_tree();
    
    	echo $jstree->{$_REQUEST["operation"]}($_REQUEST);
    	die();
    
     
    ?>
    index.html içeriği:
    <!DOCTYPE html
    PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    	<title>Yalin Agac</title>
    	
    	<script type="text/javascript" src="../_lib/jquery.js"></script>
    	<script type="text/javascript" src="../_lib/jquery.cookie.js"></script>
    	<script type="text/javascript" src="../_lib/jquery.hotkeys.js"></script>
    	<script type="text/javascript" src="../jquery.jstree.js"></script>
    	
    	
    </head>
    <body >
    
    
    
    <!-- the tree container (notice NOT an UL node) -->
    <div id="demo" style="height:200px;"></div>
    
    <!-- JavaScript neccessary for the tree -->
    <script type="text/javascript" ><!-- class= "source below" yaparsan kodlar aşağıda görünür.-->
    $(function () {
    
    $("#demo")
    	
    	.jstree({ 
    		// List of active plugins
    		"plugins" : [ 
    			"themes","json_data","ui" 
    		],
    		"json_data" : { 
    			
    			"ajax" : {
    				// the URL to fetch the data
    				"url" : "./server.php",
    				
    				"data" : function (n) { 
    					// the result is fed to the AJAX request `data` option
    					return { 
    						"operation" : "get_children", 
    						"id" : n.attr ? n.attr("id").replace("node_","") : 1 
    					}; 
    				}
    			}
    		},
    		
    		
    		
    		
    	})
    
    
    
    	
    
    });
    </script>
    
    
    
    
    
    </body>
    </html>
    Sorguyu en sade haline getirmeye çalıştım.

    $this->db->pg_query("SELECT * FROM tree WHERE _parent_id = ".(int) $id." ORDER BY _position ASC");
    yapmak istediğim şey:

    https://github.com/vakata/jstree/archive/v.pre1.0.zip

    bunu postgresql e çevirmek. (Php ve Veritabanı kullanılan örneğini)
  • 01-02-2013, 19:23:19
    #7
    $this->db->pg_query("SELECT * FROM tree WHERE _parent_id = ".(int) $id." ORDER BY _position ASC");
    var_dump(pg_last_error());
  • 02-02-2013, 21:55:27
    #8
    Yok hocam olmuyor. Hata görüntüleyemiyorum. Hiç bir şey yapamıyorum elim kolum bağlandı.
  • 05-02-2013, 09:30:13
    #9
    Yardım edebilecek yok mu ?