• 15-09-2008, 04:08:39
    #1
    Kategorileme benim en sevdiğim PHP konusudur. Niye bu kadar sevdiğimi bilmiyorum ama en çok kategori/ürün şeklindeki sayfaları yazarken haz alıyorum. Herneyse sizlere bu sistemin nasıl işlediğini anlatayım, sonrası size kalmış.

    Öncelikle 2 adet tabloya ihtiyacımız var. Bir tanesinde ürünlerimizi tutacağız, diğerinde ise kategorilerimizi. İsimleri de urunler ve kategoriler oslun. kategoriler tablomuzun kat_id ve baslik isimli 2 adet alanı mevcut. urunler tablomuzun ise urunid, kat_id, baslik ve aciklama olarak 4 adet alanı var. Ben ne olur ne olmaz diye size bu tabloların MySQL dökümünü de vereyim, bir sorunla karşılaşmazsınız.
    CREATE TABLE `kategoriler` ( `kat_id` int(11) NOT NULL auto_increment, `baslik` varchar(255) NOT NULL, PRIMARY KEY (`kat_id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; 
    
    CREATE TABLE `urunler` ( `urunid` int(11) NOT NULL auto_increment, `kat_id` int(255) NOT NULL, `baslik` varchar(255) NOT NULL, `aciklama` longtext NOT NULL, PRIMARY KEY (`urunid`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
    Şimdi işin MySQL kısmını hallettiğimizi düşünerek PHP kısmına geçiyorum.

    Öncelikle veritabanı bağlantımızı yaptığımızı varsayalım. Böyle bir varsayımda bulunuyorum, çünkü eğer bu dersi okuyorsanız, veritabanı bağlantı işlemlerini yapmayı çoktan halletmiş olmalısınız.

    Öncelikle kategori.php isimli bir dosyamız olsun. İçeriğini oluşturmayı öncelikle kendiniz denemelisiniz. Ama uğraşmanıza rağmen oluşturmakta zorluk çekerseniz, şimdi anlatacağım kısmı incelemenizde fayda var.

    Öncelikle kategori.php sayfamızda kategorilerimizi listelememiz gerekiyor. Bunun için gerekli MySQL sorgumuz aşağıdadır;
    $sorgu = "SELECT * FROM `kategoriler`";
    Eğer son eklenen kategorinin üstte çıkmasını istiyorsanız;
    $sorgu = "SELECT * FROM `kategoriler` ORDER BY `urunid` DESC";
    İlk eklenen kategorinin üstte çıkmasını istiyorsanız;

    $sorgu = "SELECT * FROM `kategoriler` ORDER BY `urunid` ASC";
    Şu anda sadece $sorgu değişkenine, veritabanından kategorilerimizi çekmemize yarayacak olan SQL sorgusunu atamış olduk. Bunu bir de PHP'ye okutmamız gerekecek. Bunun içinse mysql_query(); değişkenimizi kullanacağız;
    mysql_query($sorgu);
    Bu sorgumuzu bir değişkene atayacağız ki biraz sonraki değişkenimizin içerisinde kullanabilelim. Hemen $sonuc değişkenimize atıyoruz bu fonksiyonu;
    $sonuc = mysql_query($sorgu);
    Şimdi PHP ile sorguyu gerçekleştirdiğimize göre, bu verileri sayfaya dökmenin zamanı geldi. Veritabanından birden fazla veriyi çekip listeleyeceğimiz zaman while() döngüsünü kullanmamız gerekiyor. İçerisinde ise MySQL verilerini çekmemize yarayan mysql_fetch_array() ya da mysql_fetch_assoc() fonksiyonunu kullanacağız. Bunların arasında ne fark var bilmiyorum. Ama ikisi de işimi görüyor. Farkını biliyorsanız yorum olarak eklerseniz sevinirim, ben de öğrenmiş olurum. Gelelim while() ile kategorilerimizi listelemeye. Kodlarımız şöyle olacak;
    while ( $goster = mysql_fetch_array ( $sonuc ) ) {
    
    echo "<li><a href='kategori.php?kat_id=".$goster[kat_id]."'>".$goster[baslik]."</a></li>";
    
    }
    Bu kodlarımızın sonucu, aşağıdaki gibi bir liste çıkaracak bize. ( Veritabanında kayıtlı kategoriler ve ürünler olduğunu varsayıyorum. )



    Şimdi kategorilerimizi listeledik. Linklerini de kategori.php?kat_id=x şeklinde verdik. Şimdi kategoriye tıkladığımızda o kategoriye ait ürünlerin listelenmesi yapılacak. Şu kodlar bize ?kat_id=x şeklinde linklerde veri listelemesi yapmaya yarar;

    if ( isset ( $_GET['kat_id'] ) ) { // Eğer dosya üzerinde ?kat_id=x gibi bir değer varsa, bu fonksiyonları uygular.
    
    $kat_id = $_GET['kat_id']; // link üzerinden gelen kat_id değişkenini $kat_id değişkenine atıyor.
    
    $urunsorgu = "SELECT * FROM `urun` WHERE `kat_id` = '".$kat_id."'";
    
    $urunsonuc = mysql_query($urunsorgu);
    
    while ( $urungoster = mysql_fetch_array( $urunsonuc ) ) {
    
    echo "<li><a href='urun.php?urunid=".$urungoster[urunid]."'>".$urungoster[baslik]."</a></li>";
    
    }
    
    }
    Şu anda bu kodları yazıp çalıştırdığınızda görmek istemeyeceğiniz bir görüntü oluşacak.



    Tamam, Forum Siteleri kategorisine tıkladığımızda o kategoriye ait konular listelendi ama, biz bu sayfaya geldikten sonra kategorilerimizi artık ürün listemizde görmek istemiyoruz. Ama onlar görünmekte ısrar ediyorlar. Merak etmeyin, ben onları ikna etmenin yolunu biliyorum. Hatırlarsanız, kategori listelerken yazdıklarımızı herhangi bir koşula bağlamamıştık. Ama onların ürün listesinde görünmemesini sağlamak için bir koşula bağlamamız gerekiyor. Şimdi o kodlara dönelim ve onları bir koşula bağlayalım.
    if ( empty ( $_GET[kat_id]) ) { // kat_id değişkeni boş ise bu kodları çalıştır.
    $sorgu = "SELECT * FROM `kategoriler`";
    $sonuc = mysql_query($sorgu);
    while ( $goster = mysql_fetch_array ( $sonuc ) ) {
    echo "<li><a href='kategori.php?kat_id=".$goster[kat_id]."'>".$goster[baslik]."</a></li>";
    }
    }
    İşte şimdi oldu. Kategori listelememizi sağlayan kodlarımız artık bir koşulla çalışıyorlar. Eğer link üzerinde bir kat_id değeri yoksa kategoriler listelenecek. Bir kat_id değeri varsa, o kategori numarasına ait ürünler listelenecek. İşte size bir öngörüntü;


    Şimdi kategorilerin içerisindeki ürünleri listeleme olayını bırakıp, ürün içeriğini gösterme olayına gelelim. urun.php isimli bir dosyamız olsun. Yine veritabanı bağlantılarınızı yapın ve biz kodlarımıza geçelim. Linke tıkladığımızda urun.php?urunid=x gibi bir sayfaya gelecek. Burada urun.php sayfası direk olarak çalıştığında bir ürün görünmeyeceğinden dolayı bunu bir koşul ile ekrana yazdırmak lazım. Öyle boş beyaz sayfanın çıkması hiç hoş olmaz. urun.php sayfamıza başlıyoruz bu koşul ile;
    if ( empty ( $_GET[urunid] ) ) {
    
    echo "Bir ürün ismine tıklayarak bu sayfaya gelmelisiniz.<br>
    Tek başına bu sayfa kullanılamaz.";
    
    }
    Çıktısı ise şöyle olacaktır muhtemelen


    Şimdi bu kısmı tamamladıysak, ürünün içeriğini gösterme kısmına geçmenin vakti geldi demektir. Öncelikle urun.php?urunid=x adresinden x numaralı id numarasını alarak işlem yapmamız gerekecek. Ben başlıyorum yazmaya. Kategori listelemede dediğim gibi önce kendiniz bi yapmaya çalışın, olmazsa buradaki anlatıma gözatarsınız.
    if ( isset ( $_GET[urunid] ) ) {
    
    $urunid = $_GET[urunid];
    
    $sorgu = "SELECT * FROM `urunler` WHERE `urunid` = '".$urunid."'";
    $sonuc = mysql_query($sorgu);
    $goster = mysql_fetch_array($sonuc);
    
    echo "<h1>".$goster[baslik]."</h1>";
    echo "<p>".$goster[aciklama]."</p>";
    
    }
    Bu kodlar, ürüne göre verilerinizi çekecek olan kodlar. Çalıştığına inandırma gereği hissettiğimden sizlere tekrar bir öngörüntü ekliyorum.


    İşte arkadaşlar, bu anlatım sayesinde kendiniz de biraz geliştirererk çok fonksiyonel ürün katologları gibi sistemler yazıp kullanabilirsiniz. Orjinal dosyaların linki de aşağıdadır. İsteyenler indirip, bir program aracılığı ile de inceleyebilir.

    Hepinize kolay gelsin.

    Orjinal Dosyalar: Download



    Anlatım: Samet Mütevellioğlu
  • 15-09-2008, 04:09:39
    #2
    Paylaşımınız İçin Teşekkürler +
  • 15-09-2008, 20:18:59
    #3
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Alıntı
    Bu kodlarımızın sonucu, aşağıdaki gibi bir liste çıkaracak bize. ( Veritabanında kayıtlı kategoriler ve ürünler olduğunu varsayıyorum. )
    peki bir form daha yapsak kategori ekleme ve oraya yazı ekleme için? yardımcı olabilir misiniz?
  • 16-09-2008, 00:01:18
    #4
    kategoriler tablosuna aciklama isminde yeni bir sütun eklersin, kat_id, baslik, aciklama şeklinde 3 sütun olur. Eklerken de ona göre veri eklersin. aciklama için yeni bir form yaratırsın. Veri tipini LONGTEXT yapmayı unutma.

    Kolay gelsin.
  • 16-09-2008, 00:13:49
    #5
    teşekkürLer
  • 16-09-2008, 14:16:25
    #6
    Üyeliği durduruldu
    güzel hazırlanmış
  • 16-09-2008, 17:27:25
    #7
    Beğendiğiniz mesajlara yapmanız gerekeni biliyorsunuz arkadaşlar,
  • 29-09-2008, 18:12:07
    #8
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Yaptım Ama Şöyle Bir Hata Alıyorum.


    Alıntı
    Notice: Use of undefined constant id - assumed 'id' in C:\Program Files\EasyPHP 2.0b1\www\makale\kategori.php on line 9

    Notice: Use of undefined constant baslik - assumed 'baslik' in C:\Program Files\EasyPHP 2.0b1\www\makale\kategori.php on line 9
    # Genel

    Notice: Use of undefined constant id - assumed 'id' in C:\Program Files\EasyPHP 2.0b1\www\makale\kategori.php on line 9

    Notice: Use of undefined constant baslik - assumed 'baslik' in C:\Program Files\EasyPHP 2.0b1\www\makale\kategori.php on line 9
    # Internet

    Notice: Use of undefined constant id - assumed 'id' in C:\Program Files\EasyPHP 2.0b1\www\makale\kategori.php on line 9

    Notice: Use of undefined constant baslik - assumed 'baslik' in C:\Program Files\EasyPHP 2.0b1\www\makale\kategori.php on line 9
    # Haber

    Notice: Use of undefined constant id - assumed 'id' in C:\Program Files\EasyPHP 2.0b1\www\makale\kategori.php on line 9

    Notice: Use of undefined constant baslik - assumed 'baslik' in C:\Program Files\EasyPHP 2.0b1\www\makale\kategori.php on line 9
    # Yasam
  • 29-09-2008, 18:25:10
    #9
    9. satırda hata varmış