• 22-12-2012, 12:04:32
    #1
    Üyeliği durduruldu
    Merhaba arkadaşlar kategoriler adlı bir veritabanım var

    bu veritabanımdan bilgileri çekip listeletebiliyorum. çektiğim bilgileri selectlere listeleniyor. Ana kategorisine tıklayınca Yanına yeni bir select açılarak tıkladığım kategorinin alt kategorisi listeleniyor. bu işlem en son eklenen alt kategoriye kadar devam ediyor.

    Aşağıdaki Resimdeki gibi;



    Benim istediğim burada tıklanan kategorileri devam et butonuna bastığımda. açılacak olan ilan-ekle-detay.php sayfasında listelemek.

    (örn; Vasıta > otomobil > Anadol > Böcek > 1.3 )

    yukarıdaki örnekteki gibi listelemek istiyorum. Form olarak post ettiriyorum ama post ettirdiğimi nasıl çekebileğimi beceremedim.

    Kodlamam aşağıdaki şekilde ;

    İlan-ekle.php

    <?php require_once('baglan/baglann.php'); ?>
    
    <?php function boxlar($colname_kategoriler)  { ?> 
    <?php 
     
    $query_kategoriler = sprintf("SELECT kategori_id, kategori_adi FROM kategoriler WHERE kategori_ustid = %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['kategori_id']?>]" class="combom" size="10">
    ****<option value="-1">Seçiniz</option>
        <?php
                do {  ?>
                 
                  <option value="<?php echo $row_kategoriler['kategori_id']?>"><?php echo $row_kategoriler['kategori_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="http://ajax.microsoft.com/ajax/jQuery/jquery-1.3.2.min.js"></script>
     
    <script type="text/javascript">
     
    $('.combom').live('change', function() {
        var kategori_id = this.value;
        var $selectBox = $(this);
      
        // Daha önce eklenmiş alt kategoriler varsa önce onları uçuralım...
        $selectBox.nextAll().remove();
      
        $.get('ajax.php?kategori_id=' + kategori_id, 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('baglan/baglann.php'); ?>
    
    
    <?php function boxlar($colname_kategoriler)  { ?> 
    <?php 
      $nt = $colname_kategoriler;
    global $nt ;
    $query_kategoriler = sprintf("SELECT kategori_id, kategori_adi FROM kategoriler WHERE kategori_ustid = %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['kategori_id']?>]" class="combom" size="10">
        <?php
                do {  ?>
                 
                  <option value="<?php echo $row_kategoriler['kategori_id']?>"><?php echo $row_kategoriler['kategori_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 { ?> 
    <div id="processDone" class="adsok"> 
    
    <p style="font-size:14px;">Kategori seçimi tamamlanmıştır.</p> 
    <br clear="all"> 
    <input class="okButton uiButton" type="submit" value="Devam Et"> 
    </div> 
    <?php } } ?> 
    
    
    
    <?php
     
    $kategori_id = $_GET["kategori_id"];
     boxlar($kategori_id); ?>

    Yardımlarınızı bekliyorum arkadaşlar.
  • 22-12-2012, 12:39:22
    #2
    Ufak bir örnekle başlayalım:

    <?
    if ($_POST) {
      $kategori = $_POST['kategori'];
      echo $kategori[0] . ' > ' . $kategori[1];
    }
    ?>
    
    <form action="?" method="post">
    
      <select name="kategori[]">
           <option>Araba</option>
      </select>
    
      <select name="kategori[]">
           <option>BMW</option>
           <option>Audi</option>
           <option>Peugeot</option>
      </select>
    
      <input type="submit" value="test" />
    </form>
    yukarıdaki kod istediğini aslında yapıyor. fakat senin kodunda SELECT (option) value olarak kategori-id koymuşsun. Haliyle yukarıdaki kodun PHP kısmı sana Araba > BMW değil 123 > 43 gibi id leri gösterir.

    Burda value olarak hem kategori id, hemde kategori adını gönderebilirsen işin kolay olur. Örn çıktın şu şekilde olmalı:

    <select name="kategori[]">
       <option value="[123][Araba]">Araba</option>
    </select>
    
    <select name="kategori[]">
       <option value="[43][BMW]">BMW</option>
    </select>
    böylece form post halinde $kategori[0] değişkeni [123][Araba] değerini getirir. Buradan da ID ve KAT.ADI nı parçalayarak alabilirsin. Örn:

    <?
    preg_match_all('#\[(\d+)\]\[([^\]]*)\]#', $kategori[0], $ana_kat);
    
    $ana_kategori_id = $ana_kat[1][0];
    $ana_kategori_adi = $ana_kat[2][0];
    ?>

    son olarak tüm select ler üzerindeki verileri işleme kısmını döngü ile yapabilirsin:

    <?
    $kategoriler = $_POST['kategori'];
    $kat_isimleri = array();
    foreach ((array) $kategoriler as $birKategori):
      preg_match_all('#\[(\d+)\]\[([^\]]*)\]#', $birKategori, $cat_data);
      $kat_isimleri[] = $cat_data[2][0];
    endforeach;
    
    if (count($kat_isimleri)) echo implode (' > ', $kat_isimleri);
    ?>
  • 22-12-2012, 12:49:21
    #3
    Üyeliği durduruldu
    Yardımlarınız için teşekkürler dediklerinizi hemen deniyorum.

    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 10:49:21 -->-> Daha önceki mesaj 10:44:52 --

    Dediğiniz gibi value değerine kategori_adi nıda verdiğim select seçimlerinde böyöle bir hata aldım.

    Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\wamp\www\ilanver\ajax.php on line 10
    Call Stack
    # Time Memory Function Location
    1 0.0006 688232 {main}( ) ..\ajax.php:0
    2 0.0034 689576 boxlar( ) ..\ajax.php:43
    3 0.0037 690112 mysql_fetch_assoc ( ) ..\ajax.php:10

    ( ! ) Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\wamp\www\ilanver\ajax.php on line 11
    Call Stack
    # Time Memory Function Location
    1 0.0006 688232 {main}( ) ..\ajax.php:0
    2 0.0034 689576 boxlar( ) ..\ajax.php:43
    3 0.0040 690160 mysql_num_rows ( ) ..\ajax.php:11
  • 22-12-2012, 13:04:48
    #4
    Burası senin sorduğun yada benim yazdığım kısımlarla alakası olmayan biryer.

    mysql_num_rows() fonksiyonu hata vermiş. Bu fonksiyon aldığı parametre ile, çalıştırılan sorgudan kaç kayıt döndüğünü sana verir. Eğer mysql sorgunda problem varsa, sorgun çalışmaz (syntax error) ve herhangi bir sonuç sayısı da oluşmaz (mysql_num_rows hatası)

    örn:

    $sorgu = mysql_query("SELECT * FROM kategoriler WHERE id = " . $kategori_id);
    $sonuc_sayisi = mysql_num_rows($sorgu);
    eğer ilk satırdaki sorgun çalışmaz ve $sorgu değişkeni geçerli bir SQL sonuç objesi taşımaz ise num_rows hata verecektir. Burada sorgunda hata olduğu ortada. Sorgunu incele. Muhtemelen sorguda yazdığın bir değişken içi boş yada o tarz bir hata nedeniyle sorgun bozuk oluşmuş.

    Tahminim : daha önceki select yapında value olarak sadece ID gönderiyordun. Ve muhtemelen bu ID ler ile sorgular çalıştırıyordun. Şimdi ise VALUE olarak içinde rakam dışı [ ] Araba gibi harflerde bulunan bi değer gönderiyorsun. Sorgun şuna dönüyor olabilir :

    ... WHERE kategori_id = '$combo_cat_id'
    
    yani : 
    
    ... WHERE kategori_id = '[123][Araba]'
    buradaki değişkeni sana anlattığım parçalama metodunu kullanarak aldığın ID değişkeni ile değiştirceksin sanırım


    AweSome adlı üyeden alıntı: mesajı görüntüle
    Yardımlarınız için teşekkürler dediklerinizi hemen deniyorum.

    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 10:49:21 -->-> Daha önceki mesaj 10:44:52 --

    Dediğiniz gibi value değerine kategori_adi nıda verdiğim select seçimlerinde böyöle bir hata aldım.

    Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\wamp\www\ilanver\ajax.php on line 10
    Call Stack
    # Time Memory Function Location
    1 0.0006 688232 {main}( ) ..\ajax.php:0
    2 0.0034 689576 boxlar( ) ..\ajax.php:43
    3 0.0037 690112 mysql_fetch_assoc ( ) ..\ajax.php:10

    ( ! ) Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\wamp\www\ilanver\ajax.php on line 11
    Call Stack
    # Time Memory Function Location
    1 0.0006 688232 {main}( ) ..\ajax.php:0
    2 0.0034 689576 boxlar( ) ..\ajax.php:43
    3 0.0040 690160 mysql_num_rows ( ) ..\ajax.php:11
  • 22-12-2012, 13:12:14
    #5
    Üyeliği durduruldu
    Neyse hocam ben bu işi beceremiycem galiba biraz daha araştırma yapıyım php'de çok iyi değilim daha bilmediğim bir sürü şey var. oyüzden herhangi bi hata aldıgımda donup kalabiliyorum yardımların için teşekkür ederim