Doğru Cevap
-
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 :)
Cevaplar
-
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
Kardeş ben çalıştıramadım :(10 yıl önce yazılmış -
madpoet
Canın sağolsun10 yıl önce yazılmış -
SeyfiCiftci
Sizin deneme şansınız varmı , eğer deneyebilirseniz çok memnun olacağım :) Heran kafayı yiyebilirim :)10 yıl önce yazılmış -
chatlak49
Arkadaşım gerçekten bidaha konuya bi göz atsan çok makbule geçer 2-3 gündür bununla uğraşıyorum..10 yıl önce yazılmış -
siyahbeyaz
bana kalırsa dogru bı noksanlık goremıorm ben... :S10 yıl önce yazılmış -
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..10 yıl önce yazılmış 10 yıl önce güncellenmiş -
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 } ?>
10 yıl önce yazılmış -
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 :)10 yıl önce yazılmış 10 yıl önce güncellenmiş -
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 ? :)10 yıl önce yazılmış 10 yıl önce güncellenmiş -
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.10 yıl önce yazılmış 10 yıl önce güncellenmiş -
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 :)10 yıl önce yazılmış -
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.10 yıl önce yazılmış
-