• 11-04-2013, 18:21:26
    #1
    Merhaba arkadaşlar bir oyun için cms sistemi geliştiriyorum ve karakter envanterleri şu şekilde mysql'e kayıt ediyor:

    [slot_id(item_id:item_index:durability)xcount]

    Ve bu oyun pluginini yapan kişi şöylede bir php kodu vermiş sanırım örnek olarak:

    $inventory = '[0(0:0:0)x1];[1(0:0:0)x1];[2(0:0:0)x1];[3(0:0:0)x1];[4(0:0:0)x1];[5(0:0:0)x1];[6(0:0:0)x1];[7(0:0:0)x1];[8(0:0:0)x1];[9(0:0:0)x1];[10(0:0:0)x1];[11(0:0:0)x1];[12(0:0:0)x1];[13(0:0:0)x1];[14(0:0:0)x1];[15(0:0:0)x1];[16(0:0:0)x1];[17(0:0:0)x1];[18(0:0:0)x1];[19(0:0:0)x1];[20(0:0:0)x1];[21(0:0:0)x1];[22(0:0:0)x1];[23(0:0:0)x1];[24(0:0:0)x1];[25(0:0:0)x1];[26(0:0:0)x1];[27(0:0:0)x1];[28(0:0:0)x1];[29(0:0:0)x1];[30(0:0:0)x1];[31(0:0:0)x1];[32(0:0:0)x1];[33(0:0:0)x1];[34(0:0:0)x1];[35(0:0:0)x1];[103(0:0:0)x1];[102(0:0:0)x1];[101(0:0:0)x1];[100(0:0:0)x1];';
    $invArr = explode(';', $inventory);
    $invFinalArr = array();
    $i = 0;
    
    foreach($invArr as $row){
          $row = str_replace('[', '', str_replace(']', '', $row));
          $count = explode(')x', $row);
         @$count = $count[1];
    
         $id = explode(':', $row);
         @$index = $id[1];
         $id = explode('(', $id[0]);
         @$id = $id[1];
    
         $place = explode('(', $row);
    				
         $invFinalArr[$i]['count'] = $count;
         $invFinalArr[$i]['id'] = $id;
         $invFinalArr[$i]['place'] = trim($place[0]);
         $i++;
    }

    Ben şimdi itemleri çekip, adını sayısını vs göstermek istiyorum ve envanterde çeşitli item ekleme vs gibi olayları yapmak istiyorum.

    Bu veri formatını nasıl bir sistem ile tanıyabilirim/ değişkenlere vs atayabilirim?

    Şimdiden teşekkürler,
  • 11-04-2013, 18:28:56
    #2
    İlk satırda bulunan $inventory değişkenine [slot_id(item_id:item_index:durability)xcount] ifadesini değer olarak atayın. Yukarıdaki kodu kullanınca;

    $invFinalArr[0]['count'];
    $invFinalArr[0]['id'];
    $invFinalArr[0]['place'];
    ile değerlere erişebilirsiniz.
  • 12-04-2013, 12:20:49
    #3
    Biraz daha net açıklayabilirmisiniz?

    mesela şöyle oyuncunun envanterini seciyorum:
    $username = uyeler['USERNAME'];
    $sql="select * from sqlinv where user_id=$username";
  • 12-04-2013, 12:36:42
    #4
    Aşağıdaki kodları örnek olarak gösterelim o halde. Sisteminizi bilmediğim için, tamamen hayal ürünüdür.

    Ekrana place isimli envanter i basar.

    <?php
    $user_id = 5;
    $sql = mysql_query("select envanter from uyeler where user_id=$user_id");
    if(mysql_num_rows($user_id) > 0){
    	$sonuc = mysql_fetch_object($sql);
    	$envanter = envanterAl($sonuc->envanter);
    	echo $envanter[0]['place'];
    }else{
    	echo 'Üye kaydı bulunamadı.';
    }
    
    
    function envanterAl($inventory){
    
    	$invArr = explode(';', $inventory);
    	$invFinalArr = array();
    	$i = 0;
    
    	foreach($invArr as $row){
    		  $row = str_replace('[', '', str_replace(']', '', $row));
    		  $count = explode(')x', $row);
    		 @$count = $count[1];
    
    		 $id = explode(':', $row);
    		 @$index = $id[1];
    		 $id = explode('(', $id[0]);
    		 @$id = $id[1];
    
    		 $place = explode('(', $row);
    					
    		 $invFinalArr[$i]['count'] = $count;
    		 $invFinalArr[$i]['id'] = $id;
    		 $invFinalArr[$i]['place'] = trim($place[0]);
    		 $i++;
    	}
    	return $invFinalArr;
    }
  • 12-04-2013, 17:03:58
    #5
    sisteme uyarlamaya çalıştım fakat mysql_fetch_object te sorun cikartiyor ve non-object falan diyiyor :/

    edit: Notice: Trying to get property of non-object in D:\wamp\www\SpartaCMSv1\pages\hesabim.php on line 31
  • 12-04-2013, 17:53:54
    #6
    Şu iki satırı:

        $sonuc = mysql_fetch_object($sql); 
        $envanter = envanterAl($sonuc->envanter);
    şöyle değiştirin:

        $sonuc = mysql_fetch_assoc($sql); 
        $envanter = envanterAl($sonuc['envanter']);
    Bir de bu şekilde deneyin, nasıl bir sonuç çıkacak bakalım. SQL Sorgunuz ve tablonuz hakkında bilgi verebilir misiniz..
  • 12-04-2013, 21:17:11
    #7
    uyeler tablosu:
    CREATE TABLE IF NOT EXISTS `webwhitelister` (
      `ID` int(11) NOT NULL AUTO_INCREMENT,
      `USERNAME` varchar(16) NOT NULL,
      `WHITELISTED` tinyint(1) NOT NULL,
      `password` varchar(255) NOT NULL,
      `ip` varchar(40) NOT NULL,
      `lastlogin` bigint(20) DEFAULT NULL,
      `x` smallint(6) NOT NULL DEFAULT '0',
      `y` smallint(6) NOT NULL DEFAULT '0',
      `z` smallint(6) NOT NULL DEFAULT '0',
      `email` varchar(255) NOT NULL DEFAULT 'your@email.com',
      `rank` tinyint(5) NOT NULL,
      PRIMARY KEY (`ID`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;
    
    --
    -- Tablo döküm verisi `webwhitelister`
    --
    
    INSERT INTO `webwhitelister` (`ID`, `USERNAME`, `WHITELISTED`, `password`, `ip`, `lastlogin`, `x`, `y`, `z`, `email`, `rank`) VALUES
    (1, 'HuniliDeli', 1, 'e10adc3949ba59abbe56e057f20f883e', '192.168.2.7', 1364996287750, 0, 0, 0, 'your@email.com', 1);

    Envanter tablosu:
    CREATE TABLE IF NOT EXISTS `sqlinv` (
      `user_id` varchar(50) DEFAULT NULL,
      `inventory` varchar(1000) DEFAULT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    
    --
    -- Tablo döküm verisi `sqlinv`
    --
    
    INSERT INTO `sqlinv` (`user_id`, `inventory`) VALUES
    ('HuniliDeli', '[0(3:0:0)x64];[1(89:0:0)x4];[2(0:0:0)x1];[3(0:0:0)x1];[4(0:0:0)x1];[5(0:0:0)x1];[6(0:0:0)x1];[7(0:0:0)x1];[8(0:0:0)x1];[9(0:0:0)x1];[10(0:0:0)x1];[11(0:0:0)x1];[12(0:0:0)x1];[13(0:0:0)x1];[14(0:0:0)x1];[15(0:0:0)x1];[16(0:0:0)x1];[17(0:0:0)x1];[18(0:0:0)x1];[19(0:0:0)x1];[20(0:0:0)x1];[21(0:0:0)x1];[22(0:0:0)x1];[23(0:0:0)x1];[24(0:0:0)x1];[25(0:0:0)x1];[26(0:0:0)x1];[27(0:0:0)x1];[28(0:0:0)x1];[29(0:0:0)x1];[30(0:0:0)x1];[31(0:0:0)x1];[32(0:0:0)x1];[33(0:0:0)x1];[34(0:0:0)x1];[35(0:0:0)x1];[103(0:0:0)x1];[102(0:0:0)x1];[101(0:0:0)x1];[100(0:0:0)x1];');
    Dediğinizi deniyorum..

    edit:

    şu hatayı veriyor:
     Parse error: syntax error, unexpected end of file in D:\wamp\www\SpartaCMSv1\pages\hesabim.php on line 41
    hesabim.php'nin içeriğide şöyle:
    <h2><?php echo uyeler('USERNAME');  ?></h2>
    <img src="3d.php?&abg=0&ratio=8&format=png&displayHairs=true&headOnly=false&login=<?php echo uyeler('USERNAME'); ?>"
    
    
    <?php 
    $user_id = $uyeler['USERNAME']; 
    $sql = mysql_query("select envanter from uyeler where user_id=$user_id"); 
        $sonuc = mysql_fetch_assoc($sql);  
        $envanter = envanterAl($sonuc['envanter']); 
        echo $envanter[0]['place']; 
    
    
    function envanterAl($inventory){ 
    
        $invArr = explode(';', $inventory); 
        $invFinalArr = array(); 
        $i = 0; 
    
        foreach($invArr as $row){ 
              $row = str_replace('[', '', str_replace(']', '', $row)); 
              $count = explode(')x', $row); 
             @$count = $count[1]; 
    
             $id = explode(':', $row); 
             @$index = $id[1]; 
             $id = explode('(', $id[0]); 
             @$id = $id[1]; 
    
             $place = explode('(', $row); 
                         
             $invFinalArr[$i]['count'] = $count; 
             $invFinalArr[$i]['id'] = $id; 
             $invFinalArr[$i]['place'] = trim($place[0]); 
             $i++; 
        } 
        return $invFinalArr; 
    ?>
    
    </br>
    </br>
    <hr>
  • 12-04-2013, 22:10:01
    #8
    hesabim.php içinde return $invFinalArr; satırından sonra } koymayı unutmuşsunuz, hatayı ondan dolayı veriyor. Ayrıca ben kodlarda echo $envanter[0]['place']; şeklinde bir değişkeni ekrana yazdırdım. Ancak veritabanından gelen değerde "place" kelimesi yok. envanter verisinden bahsediyorum. Ben bu değeri sizin üsteki mesajınıza binaen yazmıştım. Ayrıca yine uyeler tablonuzda envanter diye bir sütun yok. Ben yine mesajımda sql sorgusunu "hayal ürünü" olarak yazmıştım. Kodları kendinize göre uyarlamamışsınız.
  • 13-04-2013, 11:30:44
    #9
    bayGaReZ adlı üyeden alıntı: mesajı görüntüle
    hesabim.php içinde return $invFinalArr; satırından sonra } koymayı unutmuşsunuz, hatayı ondan dolayı veriyor. Ayrıca ben kodlarda echo $envanter[0]['place']; şeklinde bir değişkeni ekrana yazdırdım. Ancak veritabanından gelen değerde "place" kelimesi yok. envanter verisinden bahsediyorum. Ben bu değeri sizin üsteki mesajınıza binaen yazmıştım. Ayrıca yine uyeler tablonuzda envanter diye bir sütun yok. Ben yine mesajımda sql sorgusunu "hayal ürünü" olarak yazmıştım. Kodları kendinize göre uyarlamamışsınız.
    Özür dilerim daha acemiyim :/ Acaba veritabanima gore uyarlayabilirmisiniz?