• 20-12-2015, 21:43:50
    #10
    Kimlik doğrulama veya yönetimden onay bekliyor.
    akaracay adlı üyeden alıntı: mesajı görüntüle
    RewriteRule ^(.*?)-(.*?).html$ ?islem=$1&kid=$2&urun=$3 [L,QSA]
    derken? 2 bilinmeyene 3 değer atama nasıl oluyor ki, anlayamadım

    üsteki kodlar ile karışmış gözden kaçmış :=)






    kursadd adlı üyeden alıntı: mesajı görüntüle
    Hocam çok teşekkürler Dediklerinizi harfiyen anladım. Peki bunu tema ya nasıl monte edeceğim İlk mesajımdaki sistemle yapıyorum yani include ediyorum. İşte get sayfa dan geliyorsa sayfalar.php i include ediyorum.



    Çok teşekkürler hocam zahmet verdik. Fakat url ler uzun olmasını istemiyorum Şu mesajımda tam olarak anlattığımı sanıyorum https://www.r10.net/1071176379-post5.html


    sanırım bu işimizi görür bu sefer yazdığını tam okudum umarım olur ;

    .htaccess
    RewriteEngine On
    Options +Indexes
    Options +FollowSymlinks
    RewriteCond %{REQUEST_FILENAME} !\.(png|gif|ico|swf|jpe?g|js|css)$ 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^uye-girisi.html$ ?islem=uyegirisi [L,QSA]
    RewriteRule ^(.*?)-(.*).html$ ?islem=$1&kid=$2 [L,QSA]
    php
    <?php 
    echo '<meta charset="UTF-8" />';
    $kid = mysql_real_escape_string($_GET['kid']);
    $degisken = mysql_real_escape_string($_GET['islem']);
    $urun = mysql_real_escape_string($_GET['urun']);
     
     
     
    if($degisken == "kategori"){
    	echo "kategori olarak {$kid} değeri mevcut";
    	
    }elseif($degisken == "sayfa"){
    	echo "sayfa olarak {$kid} değeri mevcut";
    }elseif($degisken == "urun"){
    	echo "urun olarak {$kid} değeri mevcut";
    }elseif($degisken == "uyegirisi"){
    	echo "uye giris formu bölümü";
    }
  • 20-12-2015, 22:51:08
    #11
    Kimlik doğrulama veya yönetimden onay bekliyor.
    numanturle adlı üyeden alıntı: mesajı görüntüle
    üsteki kodlar ile karışmış gözden kaçmış :=)










    sanırım bu işimizi görür bu sefer yazdığını tam okudum umarım olur ;

    .htaccess
    RewriteEngine On
    Options +Indexes
    Options +FollowSymlinks
    RewriteCond %{REQUEST_FILENAME} !\.(png|gif|ico|swf|jpe?g|js|css)$ 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^uye-girisi.html$ ?islem=uyegirisi [L,QSA]
    RewriteRule ^(.*?)-(.*).html$ ?islem=$1&kid=$2 [L,QSA]
    php
    <?php 
    echo '<meta charset="UTF-8" />';
    $kid = mysql_real_escape_string($_GET['kid']);
    $degisken = mysql_real_escape_string($_GET['islem']);
    $urun = mysql_real_escape_string($_GET['urun']);
     
     
     
    if($degisken == "kategori"){
    	echo "kategori olarak {$kid} değeri mevcut";
    }elseif($degisken == "sayfa"){
    	echo "sayfa olarak {$kid} değeri mevcut";
    }elseif($degisken == "urun"){
    	echo "urun olarak {$kid} değeri mevcut";
    }elseif($degisken == "uyegirisi"){
    	echo "uye giris formu bölümü";
    }
    Eyvallah hocam.

    Ama burda yine url ler şu şekilde olmak zorunda domain.com/kategori/kategori-adi.html ben ise url leri aşağıdaki şekilde yapmaya çalışıyorum
    domain.com/kategori.html
    domain.com/urun.html
    domain.com/konu.html
    Tek parametre oda konunun linki oluyor. Zaten veritabanımda her tabloda seo diye bir sutun var bu sutunlarda sef linkli sekilde url ler var. Ben tek parametreli şekilde yapmak istediğimden yani domain.com/kategori-adi.html şeklinde ondan benim tek parametre göndermem lazım dimi.

    Şimdi tek url nin tek parametre gönderdiğini varsayalım

    index.php?islem=kategori-adi veya index.php?islem=urun-adi

    bu urlyi htaccess ile

    domain.com/kategori-adi.html ve domain.com/urun-adi.html
    olarak yazdırdık ne gönderirsek onu yazdırıyor zaten. Buraya kadar bir sıkıntı yok zaten.

    Asıl sıkıntı benim tema sistemine bunu nasıl adapte edeceğim

    Yani gelen parametre kategori-adi veya urun-adi şeklinde bunu get ile alıp kategoriyse kategori temasını include edicem eğer urunse urun dosyasını include edicem. Biraz karışık oldu ama anca bu kadar anlatabiliyorum malesef.
  • 21-12-2015, 20:52:40
    #12
    üstad sizin tema mantığında yapmak için ilk önce switch-case yapısını iptal etmek gerekir, onun yerine örneğin
    abc.com/index.php?islem=kategori&id=kategori_adi
    diye ayarladığınız adres yapısını basitçe
    index.php?icerik=demo-kategori
    şeklinde değiştirmek lazım.

    Sonrasında adresten okunan, get ile alınan icerik parametresinin değerini yeni açtığınız tablodan aratın
    Tablo adınız: adresler
    Yapısı:
    id : int ( 11 )
    icerik_adres : varchar ( 50 )
    icerik_id : int ( 11 )
    icerik_tablosu : varchar ( 50 )
    icerik_turu : varchar ( 50 )

    id: adresler tablosuna eklenen içeriğin benzersiz idsi
    icerik_adres: url kısmında icerik parametresi ile kontrol ettiğin, aynı zamanda sayfada görüntülemek istediğin içeriğin slug etiketi (url biçmindeki adresi)
    icerik_tablosu: görüntülenmek istenen içerik hangi tabloda (haberler, sayfalar vs.)
    icerik_turu: görüntülenmek istenen içerik hangi dosyada çalışacak örnek: haber.php, sayfa.php vs..
    icerik_id: içeriğin kendi tablosundaki idsi, mesela haberler tablosundaki 15 idli içerik için 15 değeri..

    ilk olarak get ile alınan icerik parametresinin değeri veritabanında icerik_adres sütununda bulup o içerik için diğer sütunlardaki verileri değişkenlere atamak lazım. bunları değişkenlere aldıktan sonra index.php sayfazında (ya da switch - case kullandığın sayfa hangisi ise) require_once ile icerik_turu sütunundan gelen dosyayı çağıracaksınız sadece... htaccess yapısında da adres yapısını buna göre sadeleştirmek yeterlidir.
    kodları yazmak istedim ama sql sorgusu yapıyorsun diyerek cloudflare kod yazmamı engelledi
    <?php
    if($_GET['icerik'] == NULL){$icerik_al = "anasayfa";}
    else{$icerik_al = $_GET['icerik'];}
    $sorgula = mysql_query('SELECT * FROM adresler WHERE icerik_adres = $icerik_al');				
    while($oku = mysql_fetch_assoc($sorgula)) {
    	$icerik_turu = $oku['icerik_turu']; // Bununla bu içeriğin hangi türden olduğunu kontrol ettik
    	// $icerik_tablosu = $oku['icerik_tablosu']; // Lazım olursa diye bununla da bu içeriğin hangi tabloda kayıtlı olduğunu kontrol ettik
    	$sabloncek = "tema/".$icerik_turu.".php";
    	require_once($sabloncek); // Bununla da çalıştırılacak dosyayı (örn: haber.php, kategori.php, sayfa.php vs) çağırdık, gerisi çalıştıdrığımız dosyaya kalmış :)
    	}
    ?>
  • 21-12-2015, 21:59:35
    #13
    akaracay adlı üyeden alıntı: mesajı görüntüle
    üstad sizin tema mantığında yapmak için ilk önce switch-case yapısını iptal etmek gerekir, onun yerine örneğin
    abc.com/index.php?islem=kategori&id=kategori_adi
    diye ayarladığınız adres yapısını basitçe
    index.php?icerik=demo-kategori
    şeklinde değiştirmek lazım.

    Sonrasında adresten okunan, get ile alınan icerik parametresinin değerini yeni açtığınız tablodan aratın
    Tablo adınız: adresler
    Yapısı:
    id : int ( 11 )
    icerik_adres : varchar ( 50 )
    icerik_id : int ( 11 )
    icerik_tablosu : varchar ( 50 )
    icerik_turu : varchar ( 50 )

    id: adresler tablosuna eklenen içeriğin benzersiz idsi
    icerik_adres: url kısmında icerik parametresi ile kontrol ettiğin, aynı zamanda sayfada görüntülemek istediğin içeriğin slug etiketi (url biçmindeki adresi)
    icerik_tablosu: görüntülenmek istenen içerik hangi tabloda (haberler, sayfalar vs.)
    icerik_turu: görüntülenmek istenen içerik hangi dosyada çalışacak örnek: haber.php, sayfa.php vs..
    icerik_id: içeriğin kendi tablosundaki idsi, mesela haberler tablosundaki 15 idli içerik için 15 değeri..

    ilk olarak get ile alınan icerik parametresinin değeri veritabanında icerik_adres sütununda bulup o içerik için diğer sütunlardaki verileri değişkenlere atamak lazım. bunları değişkenlere aldıktan sonra index.php sayfazında (ya da switch - case kullandığın sayfa hangisi ise) require_once ile icerik_turu sütunundan gelen dosyayı çağıracaksınız sadece... htaccess yapısında da adres yapısını buna göre sadeleştirmek yeterlidir.
    kodları yazmak istedim ama sql sorgusu yapıyorsun diyerek cloudflare kod yazmamı engelledi

    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 20:52:40 -->-> Daha önceki mesaj 20:42:20 --

    <?php
    if($_GET['icerik'] == NULL){$icerik_al = "anasayfa";}
    else{$icerik_al = $_GET['icerik'];}
    $sorgula = mysql_query('SELECT * FROM adresler WHERE icerik_adres = $icerik_al');				
    while($oku = mysql_fetch_assoc($sorgula)) {
    	$icerik_turu = $sorgula['icerik_turu']; // Bununla bu içeriğin hangi türden olduğunu kontrol ettik
    	// $icerik_turu = $sorgula['icerik_turu']; // Lazım olursa diye bununla da bu içeriğin hangi tabloda kayıtlı olduğunu kontrol ettik
    require_once($icerik_turu); // Bununla da çalıştırılacak dosyayı (örn: haber.php, kategori.php, sayfa.php vs) çağırdık, gerisi çalıştıdrığımız dosyaya kalmış :)
    	}
    ?>
    Bunu yapacağım şimdi hocam mantıklı geldi olabilitesi yüksek Sıkıntı yaşarsam söylerim.
  • 21-12-2015, 22:02:42
    #14
    yardımcı olabilirsem ne mutlu bana
  • 22-12-2015, 00:10:44
    #15
    akaracay adlı üyeden alıntı: mesajı görüntüle
    yardımcı olabilirsem ne mutlu bana
    Peki hocam silme güncelleme işlemlerinde adresler tablosunda id çakışması yaşamamak için ne yapmak lazım. Bütün tablolardaki id yapıları auto_incerement hepsi artarak ilerliyor. Mesala ilk ürün ve ilk kategoride id çakışması olabilir sanırım Buna çözüm önerin varmı acaba.

    --R10.NET; Flood Engellendi -->-> Yeni yazılan 22-12-2015 mesaj 00:10:44 -->-> Daha önceki 21-12-2015 mesaj 23:42:22 --

    Tamam hocam bunuda basit bir kodla çözdüm zaten çok fazla bir içerik olmayacak. Gerçi mükemmel bir çözüm değil ama. Mutlaka çakışırlar farklı bir sutunda benzersiz bir id oluşturmak icap eder herhalde. Oda uzun iş hocam

    30001 id li kategor 30001 urun id ile çakışır Bu kadar ürünü girmeyeceğim ben zaten.

    ALTER TABLE kategoriler AUTO_INCREMENT=10001;
    ALTER TABLE urunler AUTO_INCREMENT=30001;
    ALTER TABLE sayfalar AUTO_INCREMENT=50001;
  • 22-12-2015, 13:20:02
    #16
    üstad ayarlar tablosunda zaten id ve icerik_id olacak, id sadece ayarlar tablosu için benzersiz id, icerik_id ise o içeriğin kendi tablosundaki idsi olacak. içeriği eklerken kendi tablosuna kayıt oluşturduktan sonra sıralı bir sql sorgusu ile mesela son girilen kategorinin idsini kendi tablosundan okutup o idyi adresler tablosuna kategorinin tablo adı, slug, şablonu vs onları adresler tablosuna ekletmek lazım. bu durumda sizin arayüzde verileri gösterirken ilk olarak adresler tablosunu, sonra da bu tablodan alınan verilere göre içeriğin dosyasını çağırıp o dosyada da o içeriğin kendi tablosundaki verilerini yazdırmanız söz konusu
    mesela 30001 idli kategori ile 30001 idli ürün üzerinden örnekleyelim..
    adresler tablosundaki veriler şu şekilde oalcaktır
    kategori için;
    id: 1800, icerik_id: 30001, icerik_turu: kategori, icerik_tablosu: kategoriler, icerik_adres (ya da daha açıklayıcı olarak "slug" da diyebiliriz): cantalar
    ürün için;
    id: 7500, icerik_id: 30001, icerik_turu: urun, icerik_tablosu: urunler, icerik_adres: spor-sirt-cantasi
    burada kategori için benzersiz id 1800 iken ürün için 7500.. gerçi adreslemede id yerine slug (icerik_adres) kullanılacağı için arayüzde benzersiz idnin de pek bir önemi kalmıyor bu noktada dikkat edilmesi gereken ufak ama çok önemli bir husus var ki o da slugların benzersiz olması gerektiği, yani aynı slugda ikinci bir veri olmamalı, mesela canta diye hem ürün hem kategori olursa ikisini birden okumaya çalışır, bunun da iki tür çözümü var, biri içerik eklerken önce adresler tablosu kontrol edilir, aynı slugda bir içerik varsa wordpresste de olduğu gibi sonuna 2 3 vs eklenmeli otomatik olarak, ya da diğer bir çözüm de adresleme için sadece index.php?icerik=cantalar yerine index.php?id=1800&icerik=cantalar şeklinde bir yapı kullanıp bunu da htacces ile /1800-cantalar.html gibi bir yapıya dönüştürmek.