Kodları lütfen aşağıdaki butonları kullanarak renklendirin. Örnek: <php> echo "Selam Dünya"; </php>
Yardım
karakter kaldı

jQuery ile Selectbox 'a sınırsız kategorde ki verileri nasıl çekebilirim.

Merhaba arkadaşlar ,
kid
adi
aciklama
ustkid


alanlarında veritabanım var ve ;
ustkid = 0 olanlar " ANA KATEGORİLER".

kid adi aciklama ustkid
1 kazak kkkkk 0
2 pantolon ppppp 0
3 v yaka asdas 1 ---------> Bunun üst kategorisi "1" idsine sahip olan "kazak"tir.
4 siyah v kazakk 3 --------> Bu da "KAZAK > V YAKA > SİYAH V" şeklinde olup V YAKA nın alt ketegorisidir.

veri tabanımı anladığınızı düşünüp asıl soruya geçmek istiyorum.

içerik ekleyeceğim.ve buraya bir tane SELCETBOX koyup içeriğini mysql den "USTKID" değeri "0" olanları seçip listeletiyorum sonra bu listelenen değerler örnek olarak ;
value "1" adı : kazak
value "2" adı pantolan olarak iki adet çıkıyor.

İşte can alıcı nokta :)
bu seçilen değerin value değerine göre sınırsız selectboxlar nasıl açabilirim. yani alt kategorisi varsa onlar listeletecek selectbox çıksın istiyorum. Bunu çeşitli yollar la denedim ama hep iki üç tane kutucuk belirlenip içeriği jq ile çekilmiş benim amacım altkategori varsa oluştursun yoksa seçimimi oradan yapayım.
Normalde bu kadar uzun yazmam ama soruyu tam anlatmak istedim ki cevabım net olsun :) Teşekkürler..
+0
-0
Cevaba KatılıyorumKatılmıyorum
Cevap Yaz Yorum Yaz Arşivime Ekle Takip Et

Doğru Cevap

  • SeyfiCiftci adlı üyenin fotoğrafı
    9 yıl önce yazılmış
    7 cevap - 5 soru
    Evet arkadaşlar &quot;madpoet&quot; hocamızın büyük desteği ile sorunu çözmüş olduk.
    Kodlar şöyledir ;
    İndex.php
    <?php require_once('../Connections/neonturk.php'); ?>
    <?php
    mysql_select_db($database_neonturk, $neonturk);
    ?>
    <?php function boxlar($colname_kategoriler)  { ?>	
    <?php 
    
    $query_kategoriler = sprintf("SELECT kid, adi FROM kategori WHERE ustkid = %s", $colname_kategoriler);
    $kategoriler = mysql_query($query_kategoriler);
    $row_kategoriler = mysql_fetch_assoc($kategoriler);
    $totalRows_kategoriler = mysql_num_rows($kategoriler);
    ?>
    
    
    	<select name="combom[<?php echo $row_kategoriler['kid']?>]" class="combom">
        <option value="-1">Seçiniz</option>
    	<?php
                do {  ?>
                
                  <option value="<?php echo $row_kategoriler['kid']?>"><?php echo $row_kategoriler['adi']?></option>
                  <?php
                } while ($row_kategoriler = mysql_fetch_assoc($kategoriler));
                  $rows = mysql_num_rows($kategoriler);
                  if($rows > 0) {
                      mysql_data_seek($kategoriler, 0);
                      $row_kategoriler = mysql_fetch_assoc($kategoriler);
                  }
    	?>
    	</select>
    
    
    <?php } ?>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script type="text/javascript" src="/panelim/js/jquery.js"></script>
    
    <script type="text/javascript">
    
    $('.combom').live('change', function() {
        var ktgId = this.value;
        var $selectBox = $(this);
     
        // Daha önce eklenmiş alt kategoriler varsa önce onları uçuralım...
        $selectBox.nextAll().remove();
     
        $.get('ajax.php?kid=' + ktgId, function(response) {
            // Eğer ajax.php boş cevap döndürürse boşuna eleman eklemeyelim...
            if(!response) {
                return;
            }
    
            $selectBox.after(response);
        });
    });
    </script>
    </head>
    
    <body>
    
    
    <?php  boxlar(0); ?>
    
    
    </body>
    </html>
    
    


    ajax.php

    <?php require_once('../Connections/neonturk.php'); ?>
    <?php
    mysql_select_db($database_neonturk, $neonturk);
    ?>
    <?php function boxlar($colname_kategoriler)  { ?>	
    <?php 
      $nt = $colname_kategoriler;
    global $nt ;
    $query_kategoriler = sprintf("SELECT kid, adi FROM kategori WHERE ustkid = %s", $colname_kategoriler);
    $kategoriler = mysql_query($query_kategoriler);
    $row_kategoriler = mysql_fetch_assoc($kategoriler);
    $totalRows_kategoriler = mysql_num_rows($kategoriler);
    ?>
    
    <?php if($totalRows_kategoriler > 0) {  ?>
    	<select name="combom[<?php echo $row_kategoriler['kid']?>]" class="combom">
        <option value="">Seçiniz</option>
    	<?php
                do {  ?>
                
                  <option value="<?php echo $row_kategoriler['kid']?>"><?php echo $row_kategoriler['adi']?></option>
                  <?php
                } while ($row_kategoriler = mysql_fetch_assoc($kategoriler));
                  $rows = mysql_num_rows($kategoriler);
                  if($rows > 0) {
                      mysql_data_seek($kategoriler, 0);
                      $row_kategoriler = mysql_fetch_assoc($kategoriler);
                  }
    	?>
    	</select>
    <?php  } else { return($nt); } ?>
    
    <?php } ?>
    <?php
    
    $kid = $_GET["kid"];
     boxlar($kid); ?>
    


    Not: jquery ve veritabanı dosyalarınızı unutmayınız.

    Bir Allah razı olsun deseniz yeter :)

Cevaplar

  • madpoet adlı üyenin fotoğrafı
    9 yıl önce yazılmış
    84 cevap - 1 soru
    Biraz uyduruk olmakla beraber en basit çözüm şöyle olur...

    Select box'ın yapısı hepsinde aynı o yüzden üst kategori id'nin altındaki kategorilerden select box oluşturan bir fonksiyon yazarsın:
    function kıyafetCombo($ustKategoriId) {
       $kiyafetler = DB::fetchAll("select * from kiyafet where ustkid=?", ustKategoriId);
    
       // Eğer alt kategori yoksa çık...
       if(!$kiyafetler) return;
       ?>
       <select name="kiyafet[<?=$ustKategoriId?>]" class="kiyafet_combo">
           <option value="-1">Lütfen seçiniz</option>
           <? foreach($kiyafetler as $kiyafet):?>
           <option value="<?=$kiyafet['kid']?>"><?=$kiyafet['adi']?></option>
           <? endforeach?>
       </select>
    }
    


    Bu fonksiyonla ana kategoriyi (üst kategori id=0) elle ilk sayfaya eklersin. Sonra bu select'in değeri değiştiğinde ajax'la yine bu üstteki fonksiyonla select box oluşturursun, alt kategori yoksa bu üstteki boş değer oluşturacağı için birşey çıkmaz. Bu oluşturduğun select box'ı eski select box'ın arkasına eklersin...

    Yeni eklediğin select box'ın da aynı ajax'ı çalıştırmasını sağlarsan sonsuz level'da işlemini yapabilirsin...

    İlk sayfadaki ana kategori için select box oluşturmak için:

    <? kıyafetCombo(0) ?>
    


    Diğer combo'ları oluşturan şu javascript'i de ilk sayfaya ekliyoruz:

    // jQuery live metodu ile class'ı kiyafet_combo olan
    // tüm elemanların aynı işlevi yapmasını sağlıyoruz.
    // Yeni select box'lar ajax'la sonradan DOM'a eklenir, live 
    // metodu bu yeni elemanları da algılayarak işlevi hepsine
    // uygular...
    $('.kiyafet_combo').live('change', function() {
        // O select'in value'sunu alalım. Bunu üst ktg. id olarak kullanacağız
        var ktgId = this.value;
    
    
        // $.get içerisinden ilgili select box'ın arkasına yeni
        // select box'u ekleyeceğiz ancak javascript'te "this"
        // kullandığın yere göre değişir o yüzden biz burada
        // this'i $selectBox diye bir değişkene atıyoruz ki sonra kullanabilelim...
        var $selectBox = $(this);
    
        // Daha önce eklenmiş alt kategoriler varsa önce onları uçuralım...
        $selectBox.nextAll().remove();
    
        $.get('ajax.php?id=' + ktgId, function(response) {
            // Eğer ajax.php boş cevap döndürürse boşuna eleman eklemeyelim...
        	if(!response) {
                return;
        	}
    
            // Ajax'ın oluşturduğu yeni select box'ı select box'ın altına ekleyelim...
        	$selectBox.after(response);
        });
    });
    


    ajax.php de şu kadarcık:

    <? kıyafetCombo($_GET['id']) ?>
    



    Not: Test etmedim, kafadan yazdım denemek lazım...
    • SeyfiCiftci adlı üyenin fotoğrafı SeyfiCiftci
      Kardeş ben çalıştıramadım :(
      9 yıl önce yazılmış
    • madpoet adlı üyenin fotoğrafı madpoet
      Canın sağolsun
      9 yıl önce yazılmış
    • SeyfiCiftci adlı üyenin fotoğrafı SeyfiCiftci
      Sizin deneme şansınız varmı , eğer deneyebilirseniz çok memnun olacağım :) Heran kafayı yiyebilirim :)
      9 yıl önce yazılmış
    • chatlak49 adlı üyenin fotoğrafı chatlak49
      Arkadaşım gerçekten bidaha konuya bi göz atsan çok makbule geçer 2-3 gündür bununla uğraşıyorum..
      9 yıl önce yazılmış
    • siyahbeyaz adlı üyenin fotoğrafı siyahbeyaz
      bana kalırsa dogru bı noksanlık goremıorm ben... :S
      9 yıl önce yazılmış
    • SeyfiCiftci adlı üyenin fotoğrafı SeyfiCiftci
      mantık doğru ama çalıştıramadık biz :ß

      Ve sanırım şundan dolayı yapamamış olabiliriz.
      Üstadım orada databes wrapper kullanmış bu vesile ile ;
         $kiyafetler = DB::fetchAll("select * from kiyafet where ustkid=?", ustKategoriId);
      

      bu fonksiyonu çalıştırmış biz wrapper kullanmadığımız için o kodun yerine ne kullanmalıyız. mysql_fetch_assoc mu yoksa arraymı ikisini de denedim olmadı sorun burda kayanaklanıyor sanırım .. İlginize teşekkürler..
      9 yıl önce yazılmış 9 yıl önce güncellenmiş
    • SeyfiCiftci adlı üyenin fotoğrafı SeyfiCiftci
      Şu şekilde kullanmaya çalıştım fonksiyonu ama olmadı ;
      
      function kıyafetCombo($ustKategoriId) {
      $query_kategori = "SELECT kid, adi FROM kategori WHERE ustkid = '$ustKategoriId'";
      $kategori = mysql_query($query_kategori);
      $kiyafetler = mysql_fetch_array($kategori);
      
         // Eğer alt kategori yoksa çık...
         if(!$kiyafetler) return;
         ?>
         <select name="kiyafet[<?=$ustKategoriId?>]" class="kiyafet_combo">
             <option value="-1">Lütfen seçiniz</option>
             <? foreach($kiyafetler as $kiyafet):?>
             <option value="<?=$kiyafet['kid']?>"><?=$kiyafet['adi']?></option>
             <? endforeach?>
         </select>
      <?php } ?>
      
      9 yıl önce yazılmış
    • madpoet adlı üyenin fotoğrafı madpoet
      Bravo, sonunda iletişimi kuvvetlendirmeye başladık :)

      Yani neden çalıştıramadığınızı söylemezsen, tam olarak ne yaptınız sonucunda ne oldu, javascript hatası mı verdi, PHP hatası mı verdi söylemezsen nasıl yardımcı olabiliriz ki...

      Bu son kodu çalıştırınca ne oluyor, PHP hatası mı veriyor?

      fonksiyon adı "kıyafetCombo" kalmış türkçe karakter sorun yaratıyor olabilir...

      PS: Wrapper kullanın! Sene olmuş 2012 3-4 saat sonra kıyamet kopacak hala daha native fonksiyon kullanıyorsunuz :)
      9 yıl önce yazılmış 9 yıl önce güncellenmiş
    • SeyfiCiftci adlı üyenin fotoğrafı SeyfiCiftci
      Kıyamet kompadan yapıyımda aradan çıksın diyorum :)

      <?php require_once('../Connections/neonturk.php'); ?>
      <?php
      mysql_select_db($database_neonturk, $neonturk);
      ?>
      <?php function boxlar($colname_kategoriler)  { ?>	
      <?php 
      
      $query_kategoriler = sprintf("SELECT kid, adi FROM kategori WHERE ustkid = %s", $colname_kategoriler);
      $kategoriler = mysql_query($query_kategoriler);
      $row_kategoriler = mysql_fetch_assoc($kategoriler);
      $totalRows_kategoriler = mysql_num_rows($kategoriler);
      ?>
      
      
      	<select name="combom[<?php echo $row_kategoriler['kid']?>]" class="combom">
      	<?php
                  do {  ?>
                  
                    <option value="<?php echo $row_kategoriler['kid']?>"><?php echo $row_kategoriler['adi']?></option>
                    <?php
                  } while ($row_kategoriler = mysql_fetch_assoc($kategoriler));
                    $rows = mysql_num_rows($kategoriler);
                    if($rows > 0) {
                        mysql_data_seek($kategoriler, 0);
                        $row_kategoriler = mysql_fetch_assoc($kategoriler);
                    }
      	?>
      	</select>
      
      
      <?php } ?>
      
      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      <html xmlns="http://www.w3.org/1999/xhtml">
      <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      <script type="text/javascript" src="/panelim/js/jquery.js"></script>
      
      <script type="text/javascript">
      
      $('.combom').live('change', function() {
          var ktgId = this.value;
          var $selectBox = $(this);
       
          // Daha önce eklenmiş alt kategoriler varsa önce onları uçuralım...
          $selectBox.nextAll().remove();
       
          $.get('ajax.php?id=' + ktgId, function(response) {
              // Eğer ajax.php boş cevap döndürürse boşuna eleman eklemeyelim...
              if(!response) {
                  return;
              }
      
              $selectBox.after(response);
          });
      });
      </script>
      </head>
      
      <body>
      
      
      <?php boxlar(0) ?>
      
      
      </body>
      </html>
      
      
      


      Kodlarım bu şekilde veri tabanı bilgilerim

      kategori
      kid,adi,ustkid

      ajax.php de ;
      <?php boxlar($_GET['kid']) ?>
      


      Sizce sorun nerede ? :)
      9 yıl önce yazılmış 9 yıl önce güncellenmiş
    • SeyfiCiftci adlı üyenin fotoğrafı SeyfiCiftci
      Çok teşekkürler hocam Veeee yaptım sonunda :)
      Ama en sonuncu yani seçmek istediğim alt kategorinin değerini nasıl değişkene alabilirim hocam..

      Bir de en sonuncu alt kategoriden bir tanesini seçince değişken tanımsız hatası ile sayfaya hata veriyor. Yani en sonuncu id ye ait veri yoksa normalde çekmemesi gerekiyor ama çekiyor ve hata veriyor.
      9 yıl önce yazılmış 9 yıl önce güncellenmiş
    • SeyfiCiftci adlı üyenin fotoğrafı SeyfiCiftci
      Evet arkadaşlar "madpoet" hocamızın büyük desteği ile sorunu çözmüş olduk.
      Kodlar şöyledir ;
      İndex.php
      <?php require_once('../Connections/neonturk.php'); ?>
      <?php
      mysql_select_db($database_neonturk, $neonturk);
      ?>
      <?php function boxlar($colname_kategoriler)  { ?>	
      <?php 
      
      $query_kategoriler = sprintf("SELECT kid, adi FROM kategori WHERE ustkid = %s", $colname_kategoriler);
      $kategoriler = mysql_query($query_kategoriler);
      $row_kategoriler = mysql_fetch_assoc($kategoriler);
      $totalRows_kategoriler = mysql_num_rows($kategoriler);
      ?>
      
      
      	<select name="combom[<?php echo $row_kategoriler['kid']?>]" class="combom">
          <option value="-1">Seçiniz</option>
      	<?php
                  do {  ?>
                  
                    <option value="<?php echo $row_kategoriler['kid']?>"><?php echo $row_kategoriler['adi']?></option>
                    <?php
                  } while ($row_kategoriler = mysql_fetch_assoc($kategoriler));
                    $rows = mysql_num_rows($kategoriler);
                    if($rows > 0) {
                        mysql_data_seek($kategoriler, 0);
                        $row_kategoriler = mysql_fetch_assoc($kategoriler);
                    }
      	?>
      	</select>
      
      
      <?php } ?>
      
      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      <html xmlns="http://www.w3.org/1999/xhtml">
      <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      <script type="text/javascript" src="/panelim/js/jquery.js"></script>
      
      <script type="text/javascript">
      
      $('.combom').live('change', function() {
          var ktgId = this.value;
          var $selectBox = $(this);
       
          // Daha önce eklenmiş alt kategoriler varsa önce onları uçuralım...
          $selectBox.nextAll().remove();
       
          $.get('ajax.php?kid=' + ktgId, function(response) {
              // Eğer ajax.php boş cevap döndürürse boşuna eleman eklemeyelim...
              if(!response) {
                  return;
              }
      
              $selectBox.after(response);
          });
      });
      </script>
      </head>
      
      <body>
      
      
      <?php  boxlar(0); ?>
      
      
      </body>
      </html>
      
      


      ajax.php

      <?php require_once('../Connections/neonturk.php'); ?>
      <?php
      mysql_select_db($database_neonturk, $neonturk);
      ?>
      <?php function boxlar($colname_kategoriler)  { ?>	
      <?php 
        $nt = $colname_kategoriler;
      global $nt ;
      $query_kategoriler = sprintf("SELECT kid, adi FROM kategori WHERE ustkid = %s", $colname_kategoriler);
      $kategoriler = mysql_query($query_kategoriler);
      $row_kategoriler = mysql_fetch_assoc($kategoriler);
      $totalRows_kategoriler = mysql_num_rows($kategoriler);
      ?>
      
      <?php if($totalRows_kategoriler > 0) {  ?>
      	<select name="combom[<?php echo $row_kategoriler['kid']?>]" class="combom">
          <option value="">Seçiniz</option>
      	<?php
                  do {  ?>
                  
                    <option value="<?php echo $row_kategoriler['kid']?>"><?php echo $row_kategoriler['adi']?></option>
                    <?php
                  } while ($row_kategoriler = mysql_fetch_assoc($kategoriler));
                    $rows = mysql_num_rows($kategoriler);
                    if($rows > 0) {
                        mysql_data_seek($kategoriler, 0);
                        $row_kategoriler = mysql_fetch_assoc($kategoriler);
                    }
      	?>
      	</select>
      <?php  } else { return($nt); } ?>
      
      <?php } ?>
      <?php
      
      $kid = $_GET["kid"];
       boxlar($kid); ?>
      


      Not: jquery ve veritabanı dosyalarınızı unutmayınız.

      Bir Allah razı olsun deseniz yeter :)
      9 yıl önce yazılmış
    • chatlak49 adlı üyenin fotoğrafı chatlak49
      Yardımcı olan bütün arkadaşlardan Allah razı olsun. SeyfiCiftci arkadaşımızın en son paylaştığı kodlar ile sorunumu hallettim. Sorunsuz bir şekilde çalışmaktadır.
      9 yıl önce yazılmış