Şimdi Ara

Sıfırdan PHP (7. sayfa)

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
186
Cevap
0
Favori
16.286
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: önceki 56789
Sayfaya Git
Git
sonraki
Giriş
Mesaj
  • Selam Hocam!

    Hocam valla yazılarıma geçmeden önce şunu söylemeden geri kalmayacağım her ne kadar mütevazi davransan da çok şeyler bildiğini ben biliyorum ama çok bilmek bile yeterli değil...İnsan az bile bilse bildiğini anlatabilmesi ve karşısındaki kişiye aktarabilmesi çok önemli...Ki konuşma dilinde bu bişekilde yapılır ama yazı dilinde anlatım daha zordur...Ve senin yazıların gerçekten çok anlaşılır ve sağlam...Yani yazılarını okuyan biri tatbik ettiği takdirde yarı yolda kalma gibi bir durumda söz konusu olmuyor... Gerçi ben sana daha önceden sormuştum ama yine de bir düşün derim... Mesela piyasada senin yazmış olduğun bir kitap ya da makale vs olduğunu bilsem hiç vakit kaybetmeden alırım... Çünkü senin vermiş olduğun bilgiler gerçekten hem insanı yormuyor hem de zamanını çalmıyor... Umarım ne demek istediğimi anlamışsındır hocam...


    Neyse şimdi konuya döneyim;

    Yukarıdaki yazını dün okudum ve yapamadıklarımı hemen uygulamaya koyuldum...

    Mesela;

    ----------------ob_start(); kodunu daha önceden de denemiştim hatta sayfanın en üstüne koymuştum üstten bir boşluk bırakmadığımı da hatırlıyorum fakat çalıştıramamıştım... Her ne hikmetse yukarıda yazdığını harfiyen uyguladım ve çalıştı...:)) Peki hocam ob_end_flush();
    kodunu da sayfanın en sonuna mı koymamız gerekiyor...Hani arada html kodları bile olsa...Bunu da tam olarak emin olmak için soruyorum... Yani şöyle

    <?php
    ob_start();
    ?>
    <html><body> html kodları başlıyor

    aralarda <?php echo "php kodları gömülmüş..."; ?>

    </body></html>burada da html kodları son buluyor...Yani sayfanın sonu... Hani ob_start() kodu sayfa çıktısını vermeden önce tüm sayfayı yorumlar ve sonra çıktıyı verir demiştin ya sanırım sayfanın sonuna kadar yorumunu yaptıktan sonra op_end_flush() koduna pas atarak sayfa optimize edilir :))
    <?php ob_end_flush(); ?> //eğer kırmızı renkli yazım doğruysa ve ensonda kullanıyorsak bu kodu en altta da hiç boşluk kalmayacak gibi bir durum söz konusu mu acaba?


    ----------------mysql_free_result(); kodunu select sorgusunda çalıştırdım çalıştı insertte çalıştırdım hata verdi... Demekki ben bu kodu insert sorgusunda kullanmışım hata alınca da diğer sorgularda da hata verir diye kullanma gereği görmemişim...:))



    ----------------Html kodlarının içine php kodlarını gömme durumu;

    Ya hocam valla ben bu işten bişey anlamadım... Ben kendimi çok dikkatli sanırdım fakat şu yukarıda sana çalışmıyor dediklerimin hepsi senin yazılarını uygulayarak çalıştı :)) ... Özellikle de html kodlarının içinde php kodlarını html uzantılı bir sayfada yapmış olacağımı nereden bildin?... Ben html uzantılı bir sayfa yapıp yapmadığımı bilmiyorum ama o zaman çalıştıramamıştım oysa şimdi çalıştı... Bu da senin tahmininin doğruluğunu ortaya koyuyor... Müneccim misin hocam :)


    --------------mysql_pconnect();
    Bu konuyu çok iyi anladım fakat kafama yine de bişey takılıyor...
    Ben artık bağlantıları pconnect olarak kullanırım fakat yine de sormadan geçemicem... bu konu birkaç mesaj önce benim her sayfa da ayrı ayrı veritabanı bağlantısı yaptığımdan açılmıştı... Yani bir sayfada veritabanı ayarları yapılıp...Hangi sayfada veritabanı bağlantısı yapılacaksa require_once() komutuyla sayfaya çağırarak kolaylık sağlamış oluruz ve ayrıca pconnect yapılarak sürekli bağlantı yapılıp hızdan yararlanmış oluruz anlamında bir yazımız vardı... Bu açıklamayı yaptıktan sonra şöyle birşey sormak istiyorum...

    Mesela ben bir site kurdum ve bu sitede sadece tek bir sayfa var..

    Bu sayfada da tek bir sorgu yapılmış ve sayfanın içinde de veritabanı bağlantısı yapılıp select sorgusuyla veriler sayfada gösteriliyor... Hepsi bu...Şimdi sorum şu... Bu veritabanı bağlantısında da mı pconnect kullanmalıyız...?
    Bunun yanıtını aldığımda pconnect konusunda kafamda soru işareti kalmayacak hocam...


    ------------------Hocam eğer yanlış anlamadıysam form kullanırken artık kendini alıştırmalısın name ve id kullanmaya demişsin... Yanlız senin vermiş olduğun örnekte sanırım bir javascript kodu var ve şu anda javascript ile kafamı karıştırmak istemiyorum... Eğer php de yok ama ileride javascriptle karşılaştığında el alışkanlığı olarak hem form tagının içinde hem de input tagının içinde name ve id kullan diyorsan kullanırım da name in değeri bir değişken olarak ortaya çıkıyor value de bu değişkenin değeri... peki "id" yi de bunun içinde kullandığımızda "id" nasıl bir etkide bulunacak...

    Mesela şöyle birşey hazırladığımızı farzedelim...
    <form name="form1" id="haber" action="defter.php" method="get">
    <input type=text name="mesaj" id="yazi">
    <input type=submit value=Gönder>
    </form>


    Bu sayfada özellikle id ve name adlarını farklı kullandım ki yanlış yapıp yapmadığımı tam olarak anlamak için...
    Şimdi bu sayfayı gönderdiğimizde defter.php sayfasında hangi değişkenler ne şekilde etki edecek? Ya da yukarıda yazmış olduğum name ya da id etkisiz mi kalacak?


    Bu konuyu iyice karıştırdığımın farkındayım ama eğer ileride bununla ilgili bir sorunla karşılaşırsam takılmayayım diye irdeliyorum...


    ---------------------Hocam diğer vermiş olduğun bilgileri de çok çok iyi anladım ve bu bilgiler için de çok çok tşk ediyorum... Ve uzun zamandır geçmek istediğim konuya geçmek istiyorum...Aslında çift tabloyla ilgili veri almak ya da veri kaydetmek konusuna geçerken asıl yapmak istediğim kategori ve alt kategorilerdi tabi o zaman sorgusunu bile yapamıyordum...Ama şimdi en azından yukarıda yapmış olduğum gibi şair ve ona ait şiirler tarzında basit bir kategori şeklini uygulayabildim...
    Hocam asıl yapmak istediğim şu... (tabi belki düşündüğüm mantık yanlış olabilir)
    Mesela iki tablomuz var birinci tabloda kademe kademe üst kategoriler mevcut.... diğer tabloda bu kategorilere bağlı bir bilgiler... Örnek vermek gerekirse... Mesela şu anda yazmış olduğumuz formun yapısı gibi... Foruma girdiğimiz zaman karşımızda ana kategoriler var ve altlarında alt kategoriler mevcut... alt kategorilerin altında da onların altındaki alt kategoriler mevcut... en son yazılan mesajlara kadar.....
    Sanırım mesajlar ayrı bir tabloda tutuluyor diğer kategoriler ayrı bir tablo da... Ya da bilmiyorum belki de hepsi ayrı bir tabloda mevcuttur...

    Ben geçenlerde buna benzer bir deneme yapmıştım....
    Tablo1

    ---id-------Kategori_adi-----Ust_kategori

    ---1--------Edebiyat----------------0---------
    ---2-------- --Spor------------------0---------
    ---3-----------Futbol----------------2---------
    ---4-----------Dünya edebiyati----1---------
    ---5-----------Müzik----------------0---------
    ---6-----------Şairler---------------4---------
    ---7-----------Pop------------------5----------

    Tabi bu tablo her geçen gün veri girilmeye müsait olacak ve de uzayıp gidecek....

    Bu kategoriler tablosuna ait her konuya özel ayrı birer tane de tablo hazırlanacak...Mesela kategoriler bölümünde Edebiyat kategorisini ele alalım... Edebiyat>> Dünya edebiyatı >>Şairler şairlere ait şiirler tablosunu ayrı açacağız... Diğer kategorilerde de böyle uygulama yapılacak... Buraya kadar sorun yok... Ben mesela yapmış olduğum denemede şöyle bişey yapmıştım... En üst kategori formu yapıp veriyi eklediğimde tabloda varsayılan üst_kategori değeri yaptığımdan dolayı veri girer girmez En üst kategori oluyor... Daha sonra bu en üst kategoriye alt bir kategori eklemek için bir form yaptım ve bu form içinden select option tagı içinde sorgu yaparak 0 üst kategorili tüm verileri formda select option tagı içine çağırdım ve alt kategoriyi de o şekilde uyguladım... İşte asıl sorun bundan sonra çıktı... Ben üçüncü alt kategoriyi oluşturmak istediğimde nasıl bir sorgu hazırlamam gerekecek... Üst_kategorisi 0 olmayan üst kategoriler diyerekten çağırabiliyorum fakat bu sefer hem bir alt kategori hem de eğer daha önceden kayıt yapılmışsa daha da alt kademeler çıkıyor... Acaba nerede hata yapıyorum... Her kategori için birer tablo yapmayı bile düşündüm ama her farklı bir kategori için tablo yapmak ne kadar sağlıklı olur bilemiyorum... Acaba yukarıda yapmış olduğum Tablo1 örneğinde Üst_kategorilere ayrıca seviye tarzında birşey mi uygulamak gerekiyor...

    Yani sonuç olarak yapmak istediğim baştan kodlar yazılacak sıfırdan giriş yapılarak üst kategorilerden başlayarak dallanıp budaklanacak...

    Önceden bilinen kategoriler vs girilmeyecek yani... Umarım anlatabilmişimdir...Çünkü benim bile kafam karıştı... :))

    Tekrar tekrar tşkler hocam...

    Saygılarımla...




  • Arkadaşım düşüncelerin için teşekkür ederim, ama inan zannettiğin kadar bilgili değilim. Belki senden
    bir adım önde olabilirim o da senden bir müddet önce PHP ye başlamışımdır ondandır.

    Sorularına gelince ob_end_flush illa en sonda kullanılacak diye bir şey yok.output bufferingi sonlandırmak
    istediğin yerde kullanırsın.Output bufferingi temizlemek için ob_end_clean()' da kullanabilirsin.Ayrıca
    istediğin anda içeriği kullanmak için ob_get_contents(); fonksiyonu vardır.En iyisi sen şimdilik bunlarla
    kafanı karıştırma.Senin için şu an lazım olan ob_start() kullanımı.Ancak bu demek değildir ki diğerlerini bilme.
    Hatta sana tavsiyem fırsat buldukça PHP manuali incelemendir.Ne de olsa en büyük ve güvenilir kaynak odur.
    Biliyorum ingilizce ve ne yazık ki benim de ingilizcem yok ancak yine de belli bir seviyeden sonra fonksiyonların
    kullanımını örneklerden anlıyabilirsin

    mysql_pconnect()' e gelince yukarıda da söylediğim gibi bu fonksiyon eğer açık bir bağlantı varsa o bağlantıdan devam
    eder yoksa yeni bağlantı açar.mysql_connect()ise her seferinde yeni bağlantı açar ve iş bitince kapatılır.
    Şimdi senin verdiğin örnekdeki gibi bir durumda göze görünür bir fark olmayabilir, ancak tabii ki mysql_pconnect();
    daha hızlıdır.Şöyle düşün aynı sayfaya aynı anda 10 kişi bağlandı.Her seferinde yeni bağlantı açmak mı daha iyi, yoksa
    açılmış bir bağlantıdan sorgu yapma mı? Yani önemli olan senin kod yazarken her türlü olasılığı düşünmen ve aklına gelen
    en kötü duruma hazırlıklı olman gerektiğidir.

    name ve id konusuna gelince dikkat et yukarıda formname için bu konu daha ziyade Javascriptle ilgilidir dedim.Yoksa form
    elemanlarının name'i PHP içinde önemlidir.Çünkü PHP motoru gönderilen formdaki elemanlara göre otomatik olarak aynı isimli
    değişken oluşturur.Bunu mesela:

    <form name="deneme" action="falan.php" method="post">
    <input type="text" name="isim" id="isim">
    <input type="submit" value="gönder">

    gibi bir form oluşturup falan.php de direk :

    echo $isim;

    dersen isim kutusuna girilen değeri basar.Ancak güvenlik nedeniyle en doğru kullanım
    $isim=$_POST['isim'];

    şeklindedir.Çünkü mesela birisi tutar adres çubuğuna falan.php?isim=saçamasapanbirşey yazıverir.O zaman programın sonucuda
    saçma sapan bir şey olur.Tabii bu tür durumlara karşı kullanıcının girdiği her türlü veriyi temizleyip kullanman gerekir.

    id ise tamamen javascript-DOM ve CSS kullanımı ile ilgilidir.Benim sana şimdiden elini alıştır dememin nedeni ileride illaki
    kullanmak zorunda olacaksın.Çünkü yaptığın programlarda mecburen CSS ve javascript kullanman gerekecek.İd bilgisi javascript ve CSS
    için adı üzerinde id yani kimlik bilgisi gibi bir şeydir.Yukarıda verdiğim örneği id kullanımı ile :

    <script type="text/javascript">

    function onay(){
    var i= document.getElementById('isim').value
    if (i=='' || i==null){
    alert ('Lütfen İsminizi yazınız');
    return false;
    }
    }
    </script>

    şeklinde kullanırız.Dediğim gibi tamamen DHTML ile ilgili

    Kategori ile ilgili soruna gelince,benim sana tavsiyem öncelikle gördüğün örnekleri filan herşeyi bir kenara bırak,kendi kendine düşün,
    bu işi nasıl yapabilirim diye.Evet aklın yolu bellidir.Ancak baştan beri söylediğim ve tamamen inandığım gibi bir işi yapmanın bir çok yolu vardır.
    Şimdi sana ne lazım ana kategori ve alt kategorileri. Bunu en iyi şekilde yapabilmen için veritabanı yapısını en uygun şekilde kurman
    lazım mesela:

     
    ana kategori üst_seviye alt_seviye kategori adı
    -------------- ---------- ------------- -------------
    1 0 0 Sinema
    1 1 0 Türk sineması
    1 2 0 Dünya sineması
    2 0 0 Spor
    2 1 0 Futbol
    2 1 1 Türkiye futbol ligi
    2 1 2 İngiltere futbol ligi
    2 2 0 Basketbol



    Şimdi ne olmuş oldu ana kategori ve alt kategoriler şu şekilde listeleniyor.

     
    Sinema 1 0 0
    Türk sineması 1 1 0
    Dünya sineması 1 2 0
    Spor 2 0 0
    Futbol 2 1 0
    Türkiye futbol ligi 2 1 1
    İngiltere futbol ligi 2 1 2


    Burada diyelim ki türk takımlarını gireceğiz istersek ayrı bir tabloya refereans id olarak
    2 1 1 verir kaydederiz. veya aynı tabloda bir alt kategori alanı ekler oraya yazarız.

    Burada dikkat edersen kod yazımı veya id bağlantısı falan kurmadım.Amacım sadece bu işi
    nasıl yapabiliriz sorusuna cevap aramak.Umarım ne söylemek istediğimi anlamışsındır, önemli olan
    ilk önce yapacağın işi mantığına oturtmak ondan sonra zaten istediğini yaparsın.
    Yani önce ne yapacağını bileceksin ki sonra nasıl yapacağını bulasın.




  • Selam Hocam!
    Öncelikle yanıtların için tşk ederim...
    Kategori haricinde vermiş olduğun bilgiler kafamdaki soru işaretlerini ortadan kaldırdı..

    Kategori konusunda da yaklaşık 2 saattir kategoriler tablosundaki ana kategori üst ve alt kategori ilişkisini anlama çalışıyorum fakat bir türlü başaramadım...Yani sıralamalar ok ama bunları formdan giriş yaptığımızda neyi nereye göre referans göstericez... Evet yukarıda "Burada diyelim ki türk takımlarını gireceğiz istersek ayrı bir tabloya refereans id olarak
    2 1 1 verir kaydederiz. veya aynı tabloda bir alt kategori alanı ekler oraya yazarız. " yazmışsın...Ama sanki bu bilinen numaralara göre sorgu hazırlanacağı gibime geliyor...
    Hem ayrıca bu tabloda primary key yok mu? Yani otomatik artan sayı...

    Mesela vermiş olduğun kodda
     

    ana kategori üst_seviye alt_seviye kategori adı
    -------------- ---------- ------------- -------------
    1 0 0 Sinema
    1 1 0 Türk sineması
    1 2 0 Dünya sineması
    2 0 0 Spor
    2 1 0 Futbol
    2 1 1 Türkiye futbol ligi
    2 1 2 İngiltere futbol ligi
    2 2 0 Basketbol
    3 0 0 Müzik
    3 1 0 Pop
    3 1 1 Yerli
    3 1 2 Yabancı




    Bir üst kategori daha eklememiz gerekiyor diyelim... Yerli ya da yabancı bir kategori oluşturmadan önce müzik adında ana kategori oluşturmamız gerekiyor ve ardından pop ve ardından da yerli ya da yabancı adında kategori ekliyoruz...

    Diyelim ki kategori formunda müzik yazıp kategori ekle butonuna bastığımızda ana kategoriyi 3 üst seviye 0 alt seviye 0 olacağını formda biz mi belirteceğiz...Yani sorguda bunun hazırlanması gerekiyor ama ne şekilde bağlantı kurulması gerekiyor... Bu konuda kafam bayağı bi karışık...

    Yani sonuç olarak yukarıda vermiş olduğun tablo örneği sanki daha önceden hazırlanması gerekiyor gibi geldi bana... Hocam yanlış düşünyor olabilirim ama bir türlü formdan kategori girildiğinde sorguda referans ilişkisini tam olarak kavrayamadım. ki bir de otomatik artan sayı bile göremedim... Acaba bu konuda öğrenmem gereken bir konu mu var?

    Tşkler...



    < Bu mesaj bu kişi tarafından değiştirildi maratbilgin -- 2 Ağustos 2005, 14:28:37 >




  • Arkadaşım kusura bakma bu ara gerçekten çok meşgulüm fırsat bulup yazamıyorum.Şimdi kafan karışmasın bak yukarıda ne dedim:

    quote:

    Burada dikkat edersen kod yazımı veya id bağlantısı falan kurmadım.Amacım sadece bu işi
    nasıl yapabiliriz sorusuna cevap aramak.Umarım ne söylemek istediğimi anlamışsındır, önemli olan
    ilk önce yapacağın işi mantığına oturtmak ondan sonra zaten istediğini yaparsın.
    Yani önce ne yapacağını bileceksin ki sonra nasıl yapacağını bulasın


    Yani benim yukarıda yazdığım direk veritabanı yapısı değil ne mantıkta olması gerektiğiydi, o nedenle primary key veya auto increment alan tanımlaması gibi şeyler yok içinde.Tabii belki bu benim mantığıma göre ama önemli olan temeli oturtmak. Senin yapman gereken işte aradaki bağlantıyı ne şekilde kurabileceğini bulmak. Eğer kafan karışdıysa üstteki yapıyı değiştirebilirsin ve mesela baş tarafa bir sütun
    eklersin ana kategori ise ana değilse alt yazarsın gibi, ancak gerek yok.

    Şimdi yukarıdaki yapıyı incelersen ust_seviye bölümündeki 0'ların sayısı ana kategori sayısını verir.Sql sorgunu buna göre yapıp yani ust_seviye 0 olanlar dedin mi anakategorilerin listelenir.Çıkan sonuçtan seçim yapıldığı zaman yeni bir sorgu yaparsın seçimin ana kategori nosuna göre ust_seviye den 1 olanlar seçimin alt kategorilerini verir. Bu şekilde içi içe sorgu yaparsın.

    Daha sonra biraz daha ilerleyince ki bu ilerleme sözüne sadece PHP değil MySql de dahil, bir link vermiştim hatırlarsan daha gelişmiş bir biçimde ordakine benzer having vb. komutlar kullanırsın.

    Umarım bu sefer ne demek istediğimi anlatabilmişimdir.Sen uğraş bakalım ki eminim zaten uğraşıyorsun, rahatlıkla üstesinden gelirsin.Yine de hala takıldığın yer varsa birlikte çözüm bulmaya çalışırız.




  • Selam Hocam!

    quote:

    Arkadaşım kusura bakma bu ara gerçekten çok meşgulüm fırsat bulup yazamıyorum


    Estağfirullah Hocam!
    Herzaman söylediğim gibi müsait olduğun olduğun zaman ve cevap vermeye uygun görürsen... Yanıt verirsin... Bunların dışında vermiş olduğun yanıtta suçluluk duygusuna kapılırım... Zaten haddinden fazla soru sorup uzun uzun yanıtlar vermene neden oluyorum...Bir de sorduğum soruya hemen yanıt vermeni bekleme lüksüne sahip değilim...Bunun adına yüzsüzlük adı verilir...

    Zaten yazdığım yazılara geç yanıt verdiğini de ben şu ana kadar hiç görmedim... Ki versen bile problem değil... Senin yazacağın şeyler ister geç isterse erken olsun benim için çok önemli... Yani sormuş olduğum soruya çözüm bulduktan sonra senden yanıt gelse bile senin yazdıkların ve bakış açın gerçekten önemli...


    Hocam Bu yazdıklarında bana şifreli bişeyler anlatıyor olabilirsin... Ya da bana kendi kendime çaba gösterip bişeyler yaptığımda bu konuyu daha iyi kavrayacağımı anlatmaya çalışıyor olabilirsin...Veya bu konuyla alakalı yapmayı düşündüğüm şeyle sahip olduğum mevcut bilgi arasında fark olduğunu vurguluyor olabilirsin... Tam olarak bilmiyorum...

    Mesela en son yazdığın mesajda bana having gibi komutlarla yapabilirsin demişsin... İnanır mısın netten o kadar döküman e kitap vs topladım ki... Komutlar arasında having diye bir komut bulamadım... Ve elimdeki dökümanlarda olmayıp da senden öğrendiğim o kadar komut var ki...

    Eğer ben bu kategori konusunda gerçekten öğrenmem gereken şeyler varsa... Bunu öğrenebileceğim sağlam bir kaynak tavsiyesinde bulunabilir misin? Biliyorum bana php manueli tavsiye ediceksin... Elimde manuelin türkçesi de var ama gerçekten konular kısa kısa anlatılmış...


    Yukarıda
    quote:

    Yani benim yukarıda yazdığım direk veritabanı yapısı değil ne mantıkta olması gerektiğiydi,

    belirtmişsin...

    Mantık güzel ama eğer bu veritabanı yapısı değilse... Bu benim tarafımdan farklı şekilde anlaşılıyor o zaman....
    Anlama şekillerim şu oluyor...
    1) Veri tabanına elimizle bu alanları oluşturup verileri giriyoruz... Yani hem alan hem de verileri biz en baştan veri tabanına giriyoruz... Daha sonra buna bağlı tablolarla birlikte verileri sayfada gösteriyoruz...

    2)Oradaki ana kategori ve alt kategori ve onun altındaki alt kategorilerin hepsini ayrı ayrı tablolarda oluşturacağız... Yani yukarıdaki yazmış olduğun şema ayrı ayrı tabloların bir arada olduğunu gösteren sadece şema...


    Yani hocam eğer yukarıdaki şema veritabanı yapısını göstermiyor ve sadece mantığını gösteriyorsa... Benim bu şekillerde anlamama neden oluyor...


    Ne yalan söyleyeyim şu anda bu konuda kafam çok karıştı... Kendi kendime acaba bilmediğim konular varda onları arayıp bulup öğrenmem mi lazım... Yoksa bildiğim konular yeterli ama mantık yürütüp kendimce bişeyler mi yapmam lazım... VE kendimce binbir çeşit sorular üretip duruyorum...


    Son olarak hocam bişey söylemek istiyorum... Ben bu konuyu tam olarak yapabilmem için Veritabanı yapısını oluşturmaktan ziyade veritabanı yapısı oluşturulduktan sonra verileri girebilmek için tablonun içindeki alanların birbirleriyle olan ilişkilerini kurmak...

    Neyse hocam biraz daha yazarsam daha da ortalığı karıştıracağımı sanıyorum...

    Tşk ler...




  • Arkadaşım hiç kafanı karıştırma, yani yeni bir şey bilmene gerek yok şu anda bildiklerinle yapabilirsin.Bu şekilde düşünürsen yani kendini yetersiz görürsen düşüncelerin de ona göre şekillenir.Zaten benim bu konu hakkında baştan beri söylemek istediğim temel olarak buydu.Yani ben şu anda bildiklerimle bunu nasıl yaparım sorusuna cevap araman. O nedenle dedim sana gördüğün örnekleri bir kenara bırak ve nasıl yaparım sorusunu sor diye.

    Yukarıda yazmış olduğum örnek işin mantığı dedim yani birbiri ile arasında olması gereken ilişki.Sen istersen her birini ayrı tabloda yaparsın, istersen iki ayrı tablo kullanırsın.Sana kalmış. Burada senin için lazım olan kayıtları istediğin ktitere göre listelemek, yeni kayıt girmek, kayıt sayısını bilmek.bunların hepsinin nasıl yapıldığını zaten biliyorsun.Geriye sadece ilişkiyi kuracak mantık kalıyor.

    O nedenle hiç kafanı karıştırma boş yere, hatta bir iki saat kadar başka konuyla meşgul ol ki kafan dağılsın.
    Daha sonra hiç bir yerde böyle bir şey görmediğini varsay ve benim şu şekilde bir programa ihtiyacım var
    bunu nasıl yaparım diye düşün.

    Merak etme üstesinden gelirsin.Bu arada ben de ilk fırsatta geniş bir açıklama yapacağım, tabii o zamana kadar halletmezsen

    Şimdilik kolay gelsin arkadaşım.




  • Hocam gerçekten çok üzerinde durdum bu konunun... Hatta ilk önce böyle bir tablolama üzerinde bişeyler yapmaya çalışmıştım fakat bir yerde takılınca en azından iki tabloyla çalışmanın doğruluğunu senden teyid etme adına şair, şiir örneklemesini yaptım... Ve gereken bilgileri aldıktan sonra yine bu sorunuma çözüm bulmaya koyuldum...

    Çalışmalarım esnasında bazen kafamı dinlendirmek için ara veriyorum...Daha sonra kalemi elime alıp kağıt üzerinde nasıl yapabilirim diyerekten mantık yürütüyorum... En mantıklısı hangisi ise onu uygulamaya koyuyorum.. Fakat bu konuda her defasında yazıyorum olmuyor yeniden yazıyorum yine olmuyor vs... Nerede bi eksiklik yapıyorum ya da mantık yürütemiyorum bilemiyorum ama gerçekten kafa yoruyorum... Ama bu son mesajında vermiş olduğun bilgiler doğrultusunda mevcut bilgimle yapabileceğimi söylediğine göre bir yerlerde eksiklik yapıyor olmalıyım... Ben yine kağıt üzerinde mantık yürütmeye devam edeyim en iyisi...

    Bilgilerin için teşekkürler hocam...




  • Arkadaşım kendine güven yapamayacağın bir şey değil merak etme sadece üzerinde kafa yoracaksın o kadar.Çok kafan karıştıysa basit bir mantık yürütmesi yapalım, diyelim ki tek tabloda tutacaksın

    bir tablo yaparız, id alanı otomatik artan, ust_id alanı varsayılan 0 ve kategori adı alanı:

     
    kategori tablosu
    ============

    id ust_id kategori_adi
    ----- -------- -------------
    1 0 Sinema
    2 0 Spor
    3 0 Edebiyat


    Her kayıt girdiğimizde varsayılan olarak ana kategori olur.Alt kategori gireceğimiz zaman dikkat edeceğimiz tek şey girdiğimiz kategorinin ust_id alanı olarak üst kategorisini girmek yani:

     
    id ust_id kategori_adi
    ----- -------- -------------
    1 0 Sinema
    2 0 Spor
    3 0 Edebiyat
    4 1 Türk Sineması
    5 1 Dünya Sineması
    6 2 Futbol
    7 2 Basketbol
    8 6 Türkiye Ligi
    9 6 İngiltere Ligi
    10 3 Türk Edebiyatı
    11 3 Dünya Edebiyatı


    Bak şimdi id alanı otomatik artıyor, Futbol girerken ust_id olarak Spor anakategorisinin id'i olan 2 giriyoruz basketbolda aynı şekilde, Türkiye ligini girerken ust_id olarak futbolun id'i olan 6 giriyoruz.Gördün mü istediğimiz kadar alt kayıt girebiliriz.Dikkat edeceğimiz tek şey o kayıtın bir üst kategorisini doğru girmek.Listeleme yaparken ana kategori için ust_id=0 olanları seçeriz.Daha sonra çıkan sonuçlara göre listeleme yapmak için hangi sonuç seçildi diyelim ki Sinema, sinemanın id nosuna göre bu sefer sorgumuz :

    $sorgu='select * from kategori where ust_id='$id;

    yani ust_id alanından sinemanın id nosu olan 1'e eşit kayıtlar bu durumda iki sonuç listelenir:

    Türk Sineması
    Dünya Sineması

    Eğer yeni kayıt gireceksek ne olacak, sadece sorgumuzu seçilen alanın id nosuna göre yapacağız,yani :

    $sorgu="insert into kategori set
    ust_id='$id',
    kategori_adi=$kategori_adi";

    gibi tabii burada $id değerini ve $kategori_adi bilgisini bir önceki sorguda listelediğimiz sonuca göre formdan girilen bilgiden alıyoruz

    Gördüğün gibi yapmamız gereken tek şey ust_id alanını doğru girmek ve doğru sorgu kullanmak.Umarım hala kafanda bir karışıklık kalmaz.

    Dediğim gibi uğraşırsan üstesinden gelirsin.yinede takılıyorsan buraya yaz olmazsa ilk fırsatta beraberce bir örnek yaparız




  • Selam Hocam!

    Öncelikle yanıtların için tşk ederim...!


    Nereden nasıl başlasam bilmiyorum!
    Yukarıda yazmış olduğun veritabanı yapısını ben daha önceden çok uygulamıştım ve hep bir yerlerde tıkanıp kaldım... Bu yazından sonra da gerek dün ve gerekse bugün kodları yaz sil yaz sil. işin içinden çıkamadım... Sanırım benim istediğim şekilde bir yapı yok...

    Yani veritabanı yapısına girecek alt ve üst kategoriler daha önceden belirlenecek yani şöyle diyelim en üst kategori ve onun altında iki tane daha alt kategori olacak ve bunu önceden tasarlayıp ona göre bu kategorilere girilecek veriler için ayrı ayrı formlar daha önceden oluşturulacak... Eğer yeni bir 3. alt kategori oluşturulmak istenirse hem bir adet daha form sayfası oluşturulacak...

    Bu yazdıklarımdan farklı anlaşılmalar olur diye bir de şema ile gösteriyorum...


    -----no-----ust_no----kategori_adi
    -----1-------0----------Spor------
    -----2-------0----------Sinema----
    -----3-------1----------Türk Futbolu
    -----4-------1----------Dünya Futbolu
    -----5-------3----------1.Lig
    -----6-------3----------2.Lig



    Şimdi bu yapıya göre önce ana kategorileri kaydedebileceğim bir form hazırlıyorum ve kaydettiğim kategori veritabanında ana kategori ve ust_no 0 olarak kaydediliyor... Daha sonra bunun altında bir kategori oluşturmak için başka bir form sayfası oluşturuyorum bu form içine ana kategori veri listesini çağıran bir sorgu oluşturuyorum... Ve bu formda da bir alt kategori oluşturuyorum ve veritabanına kaydediyorum... En son oluşturduğumuz kategorinin altında bir kategori daha oluşturmak istiyorum ve bunun için de ayrı bir form oluşturuyorum..Ve bu form içine de o kategorinin veri listini çağırıyorum...Ve yeni bir alt kategori daha oluşturuyorum...
    Bu açıklamadan sonra Üsteki şemada yazılanlar gibi ... Oradaki verileri girebilmek için üç tane ayrı ayrı form oluşturdum Ve o şemada bir tane daha alt kategori daha oluşturmak istersem bir tane daha form sayfası oluşturmak zorunda kalıyorum mesela
    Spor ana kategorisini oluşturmak için bir form
    Türk Futbolu alt kategorisini oluşturmak için ayrı bir form
    1.Lig alt kategorisini oluşturmak için ayrı bir form oluşturuyorum

    yani ;
    Spor
    Türk Futbolu
    1.Lig


    Bu dallanmada 3 tane ayrı ayrı form oluşturmak zorunda kalıyorum... Ve mesela 1.lig kategorisi altına takımlar diye bir alt kategori daha girmek istersem bir form daha oluşturmak zorundayım...

    Bu şekilde sanki sağlıksız gibi geliyor bana.... Yani kategoriler altında dallandırılmış alt kategori sayısı arttıkça her alt kategori için bir form hazırlamak durumunda kalıyoruz bu da sürekliliğin tıkanmasına neden oluyor...


    Daha öncek yazılarımda da böyle bir yapıda bir yerde tıkandığımı belirtiyordum... Ve şu anda da aynı sorunla karşı karşıyayım... Yani yaptığım şeyde süreklilik yok...

    Bu konuda mantığım işlemiyor... Sanki bu konuda bilmediğim çok şey olduğunu tahmin ediyorum... Ya da kodlardan çok fazla şey bekliyorum...


    Bu arada hocam yazmış olduğun sorgulardan bir tanesinde...

    quote:

    $sorgu="insert into kategori set
    ust_id='$id',
    kategori_adi=$kategori_adi";


    böyle yazmışsın... Bu farklı bir insert sorgusu mu yoksa

    Normal insert sorgusunun farklı bir yazılış şekli mi?
    Normalde insert sorgusunu bu şekilde yazıyorduk;
    $sorgu="insert into kategori (ust_id,kategori_adi) Values($id,$kategori_adi)";



    Sonuç olarak böyle bir dallandırılmış kategori oluşturmak için çok kafa yordum ve bilgi eksikliğim olduğuna inanıyorum... Ve şu anda ne yapmam gerektiğini bile bilmiyorum...Yani fikir mantık vs yürütemiyorum...

    Bu arada yazmış olduğum kodları buraya yazma gereği duymuyorum çünkü gerçekten gereksiz yere yer kaplayacağı ve kafa karıştıracağını düşünüyorum... İzlediğim yolun doğru olduğunu da düşünmüyorum...

    Hocam şimdi özgüven konusunu vurgulamaya çalışacaksın ama gerçekten bunun özgüvenle alakası yok... Bu eksiklikle alakalı bişey...

    Benim bu sorunu halledebilmem için okumam gereken döküman kitap vs...var mı acaba?

    Tşk ler...




  • Sevgili Arkadaşım öncelikle

    quote:

    böyle yazmışsın... Bu farklı bir insert sorgusu mu yoksa

    Normal insert sorgusunun farklı bir yazılış şekli mi?
    Normalde insert sorgusunu bu şekilde yazıyorduk;
    $sorgu="insert into kategori (ust_id,kategori_adi) Values($id,$kategori_adi)";


    eğer bu konunun en başlarındaki ziyaretçi defteri örneği ile ilgili mesajları kontrol edersen daha önce de 'insert into set....' şeklinde kullandığımızı görürsün.

    Diğer soruna gelince evet yine özgüvenden ve düşünme şeklinden bahsedeceğim.Çünkü şu anda sadece düşünme şeklin yanlış mantığını irdelemekten başka bir şeye gerek yok.Sınırsız alt kategori yapmak için senin şu anda düşündüğün yolla sınırsız form yapmak gerekir.Oysa şöyle düşünsen:

    önce ust_id=0 olanları yani ana kategorileri listeletiriz.Ve her seçeneğin yanına bir alt kategori listele butonu bir de alt kategori ekle butonu koyarız.Listele butonuna basılırsa ust_id değeri o seçeneğin id değeri olan kayıtları listeleriz.Ekle butonuna basılırsa veritabanımıza ust_id değeri o seçeneğin id nosu olacak yeni bir kayıt ekleriz.Tabii listelemeden önce veritabanından sonuç dönüyor mu diye bakarız.

    Şimdi aynen yukarıdaki tabloyu kullanan bir örnek yazdım , kusura bakma aceleye geldi belki çok basit ve karışık olacak ancak kendine güvenini kaybetmemen için böyle acele ettim.Şu an için ben yanlış göremedim ama dediğim gibi daha şimdi yazdım ve illaki bi yerde yanlışlık çıkabilir :)

    Umarım kafanın karışıklığı geçer, şimdi örneği yazıyım:

    Tablo yapısı : kategori
    ======================

    CREATE TABLE kategori ( 
    id int(10) NOT NULL auto_increment,
    ust_id int(10) NOT NULL default '0',
    kategori_adi varchar(100) NOT NULL default '',
    PRIMARY KEY (id)
    ) TYPE=MyISAM




    index.php
    =========================

     
    <?php
    //önce veritabanı ayarlarımızın olduğu sayfayı çağırıyoruz
    require_once("veritabani.php");

    ?>
    <html>
    <head>
    <title>KATEGORİLER</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-9">
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1254">
    </head>

    <body>
    <form name="form1" id="form1" action="kat_ekle.php" method="post">
    <?php
    $sorgu='select * from kategori where ust_id="0"';
    $sorgula=mysql_query($sorgu) or trigger_error(mysql_error(),E_USER_ERROR);
    echo 'ANA KATEGORİ : <select name="kategori" style="width:120px;">';
    while($sonuc=mysql_fetch_array($sorgula)){
    echo '<option value="'.$sonuc[id].'">'.$sonuc[kategori_adi].'</option>';
    }
    mysql_free_result($sorgula);
    ?>
    </select>
    <input type="submit" name="listele" value="LİSTELE"><input type="submit" name="ana_ekle" value="ANA KATEGORİ EKLE"><input type="submit" name="alt_ekle" value="ALT KATEGORİ EKLE">
    </form>
    </body>
    </html>


    Gördüğün gibi burada sadece Ana kategorileri listeliyoruz Asıl işi yapan kat_ekle.php dosyamız.

    kat_ekle.php
    ====================

     
    <?php

    require_once("veritabani.php");

    if (isset($_POST['ana_ekle'])){
    echo'<html>
    <head>
    <title>Kategori Ekle</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-9">
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1254">
    </head>

    <body>
    <form name="form1" id="form1" action="'.$PHP_SELF.'" method="post">
    <input type="text" name="kategori_adi"><br><br>
    <input type="submit" name="ana_k_ekle" value="EKLE">
    </form>
    </body>
    </html>';
    $_POST='';
    }
    if (isset($_POST['ana_k_ekle'])){
    $kategori_adi=$_POST[kategori_adi];
    $sorgu="insert into kategori set
    kategori_adi=\"$kategori_adi\" ";
    mysql_unbuffered_query($sorgu) or trigger_error(mysql_error(),E_USER_ERROR);
    echo 'KATEGORİNİZ EKLENMİŞTİR<br><br>
    <a data-test="test" rel="nofollow" style="word-wrap: break-word; text-decoration: underline;" target="_blank" onclick="return dhExternalLinkRedirect(this)" href="/ExternalLinkRedirect?module=pgdcode&messageId=3652547&url=index.php" data-href="index.php">ANA SAYFA</a>';
    $_POST='';
    }

    if (isset($_POST['listele'])){
    $id=$_POST[kategori];
    echo'<form name="form1" id="form1" action="'.$PHP_SELF.'" method="post">';

    $sorgu='select * from kategori where ust_id='.$id;
    $sorgula=mysql_query($sorgu) or trigger_error(mysql_error(),E_USER_ERROR);
    echo 'ALT KATEGORİ : <select name="kategori" style="width:120px;">';
    while($sonuc=mysql_fetch_array($sorgula)){
    echo '<option value="'.$sonuc[id].'">'.$sonuc[kategori_adi].'</option>';
    }
    mysql_free_result($sorgula);
    echo'
    </select>
    <input type="submit" name="listele" value="LİSTELE"><input type="submit" name="alt_ekle" value="ALT KATEGORİ EKLE">
    </form>
    </body>
    </html>';
    $_POST='';
    unset($id);
    }
    if (isset($_POST['alt_ekle'])){
    $id=$_POST[kategori];
    echo'<html>
    <head>
    <title>Kategori Ekle</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-9">
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1254">
    </head>

    <body>
    <form name="form1" id="form1" action="'.$PHP_SELF.'" method="post">
    <input type="text" name="kategori_adi"><br><br>
    <input type="hidden" name="kategori_id" value="'.$id.'">
    <input type="submit" name="alt_kategori_ekle" value="EKLE">
    </form>
    </body>
    </html>';
    $_POST='';
    unset($id);
    }
    if (isset($_POST['alt_kategori_ekle'])){
    $kategori_adi=$_POST[kategori_adi];
    $id=$_POST[kategori_id];
    $sorgu="insert into kategori set
    kategori_adi=\"$kategori_adi\",
    ust_id=\"$id\" ";
    mysql_unbuffered_query($sorgu) or trigger_error(mysql_error(),E_USER_ERROR);
    echo 'KATEGORİNİZ EKLENMİŞTİR<br><br>
    <a data-test="test" rel="nofollow" style="word-wrap: break-word; text-decoration: underline;" target="_blank" onclick="return dhExternalLinkRedirect(this)" href="/ExternalLinkRedirect?module=pgdcode&messageId=3652547&url=index.php" data-href="index.php">ANA SAYFA</a>';
    $_POST='';
    unset($id);
    }
    ?>


    Şimdi bu kodları kopyalayıp dene, bak nasıl rahatlıkla istediğimiz kadar kategori ve alt kategori listeliyoruz.Gördüğün gibi sadece sayfayı kendi kendine POST ettirdim sadece bunun yerine belki sen basit olsun diye bir kaç sayfa yapardın o kadar.

    Söyle bakalım burada senin bilmediğin ya da yapamıyacağın bir şey var mı?
    Arkadaşım her zaman söylediğim gibi her şeyden önce kendine güvenmelisin, ha elbette bir zaman gelir yapacağın şey için bilgin yetersizdir,o zaman gerekli bilgiyi edinirsin.Ancak bu o andaki donanımınla her yolu deneyip de tamamen bilginin yetersiz olduğuna eminsen geçerlidir. Yoksa kimse herşeyi bilemez.




  • Selam Hocam!

    Öncelikle yanıt ve yardımların için tşk ederim...

    Kodları aldım denedim ve gerçekten de sınır yok... Ama böyle bir şeyi iki sayfaya sığdırman ve de sağlaman gerçekten etkileyici... Ben bu bilgi ve tecrübeyle(tecrübesizlik) kırk yıl düşünsem yapamazdım... Bu yapmış olduğun kodlar üzerinde artık bir kaç gün yoğunlaşırım... Çünkü gerçekten bilmediğim bişeyler var içinde...
    quote:

    Söyle bakalım burada senin bilmediğin ya da yapamıyacağın bir şey var mı?


    Hocam gerçekten bunu yapamazdım neden diyeceksin...Sen burada mesela 4 ya da 5 sayfa da yapılacak şeyi tek sayfada halletmişsin...Benim daha sayfayı kendine post ettirme gibi bir tecrübem yok daha doğrusu post ettiriyorum fakat bir yerlerde bir takım aksamalar oluyor bunu yapabilmek için nerelerde ne gibi noktalara dikkat etmem gerektiğini çok iyi bilmem gerekiyor ki böyle bir mantığı yürütmeye adım atabileyim... Hem ayrıca yazmış olduğun kodlar içinde bilmediğim ya da bir kaç yerde neden kullanıldığı konusunda bilgim yok sadece tahmin yürütebiliyorum... Bu yazdığın kodu analiz ederek 4 ,5 defa silip yeniden yazdıktan sonra şimdiden gözüme takılan kodlarla birlikte bunların anlamlarını sorarım...
    Yanlız ben bu sayfayı kendine post ettirmekle ilgili iki sorum olacak bu sorunlar senin kodunda da mevcut ama sen başta da söyledin ufak tefek yanlışlıklar olabilir diye...Gerçi bu benim daha önceden soracağım sorulardı...Çünkü kendine post ettirirken hep bu sorunla karşılaşıyordum...

    Sorum şu olacak.... Mesela sayfada form var bu formdan gönderilen veriler aynı sayfada İnsert sorgusuyla veritabanına kaydediliyor... Bunu yapmasına yapıyorum fakat verileri girip gönder tuşuna bastıktan sonra yine aynı sayfa geleceği için yani yine form sayfası karşımızda duruyor yeniden veri girersek bu verileri de kaydedip yine form sayfası karşımızda duruyor fakat o sayfada dururken yenile tuşuna kaç defa basarsam o kadar en son girilen veri aynı şekliyle veritabanına kaydediliyor... Yenile tuşuna bastığımızda verinin girmemesi için ekstradan yapabileceğimiz bişey var mı yani kod vs gibi...
    Gerçi senin son mesajlarında bana öğrettiğin insert delete update gibi sorgularda mysql_unbuffered_query kullanırsan tamponda gereksiz yere bilgi depolanmaz dediğini hatırladığım için bunun ilacının bu olabileceğini düşünüp sorguda onu da kullanmama rağmen bu kodun bununla ilgili olmadığını anladım...

    Bir de sayfayı kendine post ettirirken yukarıda da senin yaptığın gibi birden fazla sayfada yapılacak kodları tek sayfada topladığımızda bir noktadaki ufak sorunu herhangi bir başka kodla telafi etmeye kalkıştığımızda bu sefer diğer kodları etkilediği için bu sefer başka yerlerde sorun çıkarıyor...
    Mesela senin yazmış olduğun kodda da şöyle bişey var diyelim ki ana kategori ve alt kategoriler var bu kod içinde ve ben sayfada bir ana kategori seçiyorum ve bunların alt kategorilerini listele butonuna tıkladığımda alt kategorileri varsa çıkıyor ve onun içinden bir tane seçiyorum yine listele diyorum eğer seçtiğim kategorinin alt kategorisi yoksa listele butonuna tıkladığımda karşıma boş bir input text alanı çıkıyor ve o sayfadayken alt kategori oluştur diyorum veriyi girdiğimde bu alt kategori olması gerekirken en üst kategori oluyor çünkü verinin üst_id nosunu varsayılan 0 olarak alacağı için böyle bir sorunu if yapısı vb bir kodla üstesinden gelmeye çalışırım ama bu sayfa kendine post etmemiş olsaydı çünkü orada yapacağım en ufak bir değişiklik bütün sistemi etkiliyor... Bunu söylemem deki sebep şu; bu konudaki denemelerimde sayfayı kendine post ederken ve kategori oluşturmalarında böyle bir sorunla karşılaştım ve aşamadım...

    Yani hem yenileme tuşu olayı hem de bu altkategori oluşturduğumuz yerde de üst kategori oluşturma sorununu ben daha önce yaşadığım için soruyorum... Onun dışında birşey sormuyorum çünkü yazmış olduğun kodlar üzerinde yoğunlaşıp iyi analiz etmem gerekiyor...

    Vallahi hocam!
    Bu kadar mütevazi olma lütfen!
    Benim gibi senin tarzında anlatımlara ihtiyacı olan çok insan var...Bu bilgi birikimlerini bir kitapta toplamayı bugün olmasa bile gelecekte mutlaka ihmal etmemelisin...
    Hocam sana ait bir kitap yok ama bana tavsiye edebileceğin bir kitap vardır sanırım! Bu topicteki ilk mesajda Özgür Çaycı'ya ait kitap tavsiyesinde bulundular ama o kitap biraz eski olduğu için hem piyasada bulamadım hem de yeni baskısı yeni yeni konularla birlikte hazırlık içerisindeymiş...Yani onu bekliyorum ...Onun haricinde bana bir tavsiyen var mıdır?
    Mesela Kayra Otaner in "php ve mysql ile web programcılığı kitabının bana bir faydası olabilir mi? Kitapçılara bakıyorum da gerçekten php konusunda kaynak kitap sıkıntısı var gibi... Bilgisayar kitapçılarında edindiğim bilgiler bu doğrultuda...

    Neyse hocam fazla uzattım sanırım ben en iyisi yazmış olduğun kodlar üzerinde yoğunlaşayım...

    Bana göstermiş olduğun sabrından dolayı sana çok tşk ediyorum(gerçekten çok soruyorum)...
    Allah sen ve senin gibi insanlardan razı olsun...




  • Arkadaşım öcelikle Allahü Teala senden de razı olsun, düşüncelerin için tekrar teşekkür ederim, ancak inan ki yukarıda söylediğim geçerli.Yani tevazu falan değil en fazla bir adım sadece.

    Kitap tavsiyesine gelince belki seni hayal kırıklığına uğratacağım ancak,PHP ile ilgili herhangi bir yayınevinin kitabını alıpda okumadım.Bu işe ilk önce Hakkı ÖCAL hocanın her yerde bulabileceğin kitabı ile başladım :)

    Daha sonra internette anlayabileceğim düzeyde ne kadar kaynak bulabildiysem okudum.Kalan bölüm ise kod yazımı ve deneme yanılma.Birde bence en önemlisi devamlı sana tavsiye ettiğim "istediğim şeyi nasıl yapabilirim" sorusu.

    Sorularına gelince dediğim gibi acelece yazmış olduğumdan detayları kontrol etmedim ancak sana şunu söyleyebilirim ki sorularının cevabıda sende gizli. Sadece nasıl yapacağını sor.Bir çok yöntem bulabilirsin.Mesela boş select alanı için en temel çözüm kayıt varsa <select>bölümünü yaz yoksa 'bu bölümde kayıt yok eklemek için.......' gibi bir şey yaz.

    Diğer sorunda aynı şekilde cevabını bulabilirsin.Biraz daha açmam gerekirse mysql_unbuffered_query veritabanından boş yere sonuç döndermez.Buradaki olay ise tamamen Browserin cachesinde bulunan post verilerinin tekrar gönderilmesinden ibaret.Bu durumda iki seçenek var ya javascript ile istemci taraflı bir şey yapacaksın, ya da php ile sunucu taraflı halledeceksin.Bu da nasıl olabilir ya her kaydı girerken kayıtın girildiği zamanı kontrol edersin ve belli bir vakit geçmemişse kabul etmezsin.

    Peki bunu nasıl yapabilirsin ya kayıt girildikten sonra tekrar sayfayı ekrana bastırırken zamanı <input type ="hidden"> ile forma yazdırır ve gelen formdan kontrol edersin.Ya fwrite ile bir dosyaya yazar ordan kontrol edersin.Ya da en temizi veritabanına girerken zamanı da girer ona göre kontrol edersin bunlar ilk aklıma gelenler,gördüğün gibi düşündükçe bir çok yöntem bulunabilir.İşte önemli kendi mantığını kullanman. Yani illa birileri şu şekilde yapmış diye senin de o şekilde yapman gerekmez. eğer yine de takılırsan burada elimden geldiğince yardımcı olmaya çalışırım.




  • Merhabalar Hocam!

    Öncelikle yanıtların için tşk ederim...

    Kitap konusundaki yazıların gerçekten ilginç ,yani böyle bir bilgi birikimini sadece internetten edinmen bence büyük bir başarı, Ki mevcut bilginin de öyle bir adım ötede olduğunu da düşünmüyorum...Bence normalin bile çok çok üstünde ... Ki senin bana yukarıda iş güç arasında yazmış olduğun kodları ben iki gündür değil aynısını yazmak...Nasıl bir mantıkla yapıldığını bile kavramakta zorlandım hatta yapamadım... Bu da senin ne denli kaç adım ötede olduğunu gösteriyor :)

    Ben yine de bir kaç kitap almalıyım...

    Evet hocam! Yukarıda da belirttiğim gibi vermiş olduğun kodların içinden çıkamadım...Çıkamamanın en büyük nedeni de sayfanın kendine post edildiğindeki if yapılarının bir birlerine göre konumları ve işleyişleri... Ama sonuçta sayfanın kendine post edilmesi kafamı karıştırıyor...

    Ve yukarıda söylemiş olduğun yöntemleri de bu yapıda bir türlü yerine oturtamadım...Yani gerek select i kontorl altına almak ve gerekse ikinci bir mesajı zamana göre ayarlamak.... Bunların ikisini de sayfayı kendine post etmede başaramadım....

    Tabi daha önce mesajı zamana göre kontrol altına almayı hiç yapmadığım için normal bir sayfada denedim ve uzun uğraşlardan sonra bunu başarabildim(Bu vesileyle bu yöntemi öğrenmiş oldum)...Yani normal bir sayfada bir mesaj atıldıktan sonra diyelim 2 dk dan önce ikinci bir mesaj yazıldığında uyarı mesajı çıkacak ve 2 dk geçtikten sonra ikinci bir mesaj yazılabilecek...

    Ama bunu yukarıdaki kodlarda bir türlü başaramadım...Özellikle kat_ekle.php sayfasında 5 tane if yapısı olduğundan dolayı ve her biri $_POST dan gelecek veriye göre hareket ettiği için yapacağım kontorlleri nereye koyduysam orada farklı sonuçlar aldım ve sonuca ulaşamadım...

    Yani sonuç olarak gerek zaman unsurunu ve gerekse bos select yapısını kontrol altına alamadım bu yapıda...

    Ben bu konunun benim için şu an itibarıyla ağır olduğunu düşünüyorum... Bu ve buna benzer uygulamaları zamanla hem bilgi birikimimi artırıp hem de tecrübe edinerek yapabileceğimi sanıyorum...

    Yanlız yine de bu kodlar içinde şurada şu neden kullanıldı diye bir kaç şey sormak istiyorum...

    -----if yapılarının sonunda
    $_POST='';

    unset($id);


    Kullanılmış... Bunlar değişkenlerin değerlerini sıfırlama amaçlı olarak mı kullanıldı? Bir de sorgulardan sonra trigger_error(mysql_error(),E_USER_ERROR); kullanılmış... Sanırım bu hata mesajı(Tam emin değilim) Bunu sadece sorgularda mı kullanıyoruz...Mesela veritabanı bağlantısında ya da başka bir yerde de kullanabiliyor mu? Eğer hata mesajı ise bizim kullandığımız die("sorgu gerçekleştirilemedi"); gibi kullandığımız hata mesajından ne farkı vardır...?

    Neyse hocam ben bu konu üzerinde daha fazla durmak istemiyorum. Çünkü bilmediğim diğer bilgileri öğrendikten sonra ancak bakış açımı genişletebileceğimi sanıyorum...

    Hocam bu konudan sonra Üyelik sistemi konusuna girmeyi düşünüyorum...Öncelikle hangi konudan başlamam gerekir... yani session cookie vs gibi...? Bana bu konuda bir tavsiyede bulunabilir misin? Önceliğim ne olmalıdır...?

    Tekrar tekrar teşekkürler hocam!




  • Arkadaşım önce sorularını cevaplayım:
    $_POST='';
    ile posttan gelen ve PHP tarafından otomatik oluşturulan $_POST dizisinin içini boşaltıyoruz.Her ihtimale karşı
    karışıklık olmasın diye basit bir önlem yani.Mesela aynen böyle GET ile işlem yapılmasını istemediğin sayfaların başında da
    $_GET='';

    kullanabilirsin.Yalnız eski sürümlerde $_HTTP_GET_VARS'dır.Şimdi kafanı karıştırmak istemem ama bütün sayfaların başında veritabani.php veya ayarlar.php gibi
    bir dosyan varsa onun içine :

    if ($phpver < '4.1.0') {
    $_GET = $HTTP_GET_VARS;
    $_POST = $HTTP_POST_VARS;
    $_SERVER = $HTTP_SERVER_VARS;
    }

    eklersen eski sürümlerde de sorunsuz çalışır.Yani sadece bu değil bütün işlemlerde rahatlıkla
    $_POST['deger'];

    gibi kullanabilirsin.

    unset($id);

    ise POST'tan gelen değere göre oluşturduğumuz $id değişkenini yoketmek için kullanıldı, bu da yukarıdaki gibi bir önlem sadece hem de işimiz bittiğinden hafızayı işgal etmez.Zaten yazdığın bütün programlarda değişkenle işin bittiyse unset(); ile yoketmelisin.Çünkü PHP bu işi tamamen kod yazana bırakmıştır.

    trigger_error(mysql_error(),E_USER_ERROR);

    ise aynen tahmin ettiğin gibi bunun farkı eğer hata olursa die("Hata var"); yazarsak sadece ekrana Hata var yazar.Oysa yukarıdaki ifade bize mysql hatasının ne olduğunu ve kaçıncı satırda olduğunu verir.Ve görüldüğü gibi mysql ile ilgili bütün işlemlerde kullanabilirsin.Mesela yukarıdaki örnekde bulunan:

    $sorgu='select * from kategori where ust_id="0"';
    $sorgula=mysql_query($sorgu) or trigger_error(mysql_error(),E_USER_ERROR);

    bölümünü önce:

    $sorgu='select * from kategori where ust_id="0"';
    $sorgula=mysql_query($sorgu) or die("Hata var");

    yapıp sorguyu yanlış yaz mesela 'select ** from 'gibi ve çalıştır.Ekrana sadece hata var yazar.Birde diğer türlü çalıştır.

    Evet şimdi sorularına yanıt verdiğime göre asıl söylemek istediğime geçebilirim.Arkadaşım istediğini şu anda da yapabilirsin.Buna ben inanıyorum ancak seninde inanman lazım.Dediğim gibi sadece mantığını kullan. Yukarıda sayfayı devamlı kendine POSt ettiriyoruz ancak bunun başka bir sayfadan POST ettirmekten bir farkı yok ki.Orada dikkat edeceğin tek şey POST'tan gelen bilgiyi kullanma biçimimiz.Gelen bilgiyi neye göre ayırıyoruz farketmişsindir.

    Her Submit butonuna ayrı bir isim veriyoruz ve if yapımızı buna göre kuruyoruz, yani

    //eğer "alt_ekle" tuşundan geliyorsa
    if (isset($_POST['alt_ekle'])){

    yapılacak işlemler
    ....
    ....

    işlemden sonra ekrana yazdırılacaklar
    ........
    .........
    .........

    }

    //eğer "alt_kategori__ekle" tuşundan geliyorsa
    if (isset($_POST['alt_kategori_ekle'])){

    yapılacak işlemler
    ....
    ....

    işlemden sonra ekrana yazdırılacaklar
    ........
    .........
    .........

    }

    Yani oradaki her if yapısını ayrı bir sayfaymış gibi düşün.


    Ya da Bunun yerine istersen formların actionunu

    <form name="form1" id="form1" action="'.$PHP_SELF.'?islem=ekle">

    <form name="form1" id="form1" action="'.$PHP_SELF.'?islem=listele">

    gibi yapıp GET ile işlemin ne olduğunu alır ona göre işlem yaparsın.


    Diğer sorunun yani zaman problemi içinde kullandığın yöntemi ya her if yapısının başında kontrol edeceksin yani:

    if (isset($_POST['alt_ekle'])){

    if (zaman kontrolü olumsuzsa){
    Hata mesajını yaz
    exit();
    }

    }

    Veya asıl yapman gereken bütün hepsinden önce:

    //Eğer POST değişkeni varsa
    if (isset($_POST)){

    zaman kontrolünü yap olumsuzsa
    Hata mesajını yaz
    exit();
    }

    Gördüğün gibi önce kod yazmak değil neyi nasıl yapacağına karar vermek lazım.Yani programın çalışma planını çizip ona göre kod yazacaksın.

    Üyelik sistemi için bence sessiona ağırlık vermelisin.Çünkü session her zaman cokoie'den güvenlidir.Ancak ben senin bu konuya devam etmeni ve yarıda bırakmamanı isterdim.Ama illaki bana ağır geliyor diyorsan birşey diyemem artık.Tabii ki kendini kendin daha iyi bilirsin.




  • Hocam öncelikle yanıtın için tşk ediyorum...
    Ve en sondan başlıyorum...Hocam gerçekten bu konu beni oldukça zorladı...Ama bunun anlamı bana ağır geldi ve bunu yarım bırakıp başka bir konuya geçeyim değil...(Bi işe başlayıp yarı bırakmak kişiliğimde yoktur zaten)... Bunu söylememdeki en temel sebeplerden biri şu ...Mesela bir konuya geçiyorum ve üzerinde çeşitli çalışmalar ve uygulamalar yapıyorum ve buraya gelip sana soruyor, fikrine ve bilgine başvuruyorum... Allah razı olsun sen de hiç üşenmeden uzun uzun yanıtlar veriyorsun...Ama aynı konuda yine bişeyler sorduğum zaman sanki hiçbir çalışma yapmadan, emek sarfetmeden, beyin yormadan buraya gelip sana sorup hazıra konuyorum gibi bir durum ortaya çıktığı hissine kapıldığımdan dolayı seni bu konuda daha fazla sıkmama adına başka konuya geçmeyi düşünmüştüm...Hem bu arada o konuyla alakalı eksiklerimi tamamlar hem de zaman kazanıp bakış açımı geliştiririm diye düşünmüştüm... Yoksa aynı konu üzerinde gerekiyorsa 1 ay bile dururum ve irdelerim ...Yani ayran gönüllü ve tezcanlı değilim... Konuları her zaman için irdeleyerek ve sindirerek gitmeyi tercih ediyorum .
    Ve buradan hareketle senin için de bir sakıncası yoksa (zaten yazında da yarım bırakmamı istemediğini belirtmişsin)bu konu üzerinde anlayana kadar durmak istiyorum... Bu konuda çok güzel ve akıcı bir mantık yapısı var belki bunu anlamak ve uygulamak zor olacak ama anladıktan sonra da çok şeyler alacağımı da biliyorum...

    Şimdi hocam yazdıklarının arasında nasıl düşünmem ve nasıl yapmam konusundaki söylediklerini uygulamak için yine bu konuda yoğunlaşacağım fakat bu yazdıklarının arasında bir şey kafama takıldı...

    quote:


    unset($id);

    ise POST'tan gelen değere göre oluşturduğumuz $id değişkenini yoketmek için kullanıldı, bu da yukarıdaki gibi bir önlem sadece hem de işimiz bittiğinden hafızayı işgal etmez.Zaten yazdığın bütün programlarda değişkenle işin bittiyse unset(); ile yoketmelisin


    Hocam bu kodu ilk defa burada kullandık...Daha önce yazdığımız kodlar içinde defalarca değişkenler kullandık ama hiçbirinde bu kodu kullanmadık. Acaba bu yukarıdaki yapıya sahip kod sayfalarında mı kullanılıyor yoksa daha önce yazmış olduğumuz kodlar içindeki değişkenlerde de kullanılıyordu fakat benim kafam karışmasın diye o zaman kullanmadık mı? Eğer bu ikinci söylediğim ise bir sayfada diyelim ki 5 tane değişken kullandık bu beştane değişkene unset() mi uygulayacağız...


    Hata mesajları konusunundaki açıklamalarını anladım ve uygulayarak da tatbik edicem ...


    $_GET ve $_POST konusundaki eski ve yeni versiyon hakkındaki yazıların da kafamdaki soru işaretlerinden bir tanesini daha alıp götürdü... Yaklaşık 1 aydır soracağım soracağım derken bir türlü diğer sorulardan fırsat bulamamıştım sormaya...Eksik olma ona da yanıt verdin...:)

    Ya hocam bu eski kod ve yeni kodlar kitap konusunda bile beni endişelendiriyor... Valla burada sen olmasaydın bu tür bilgileri nereden edinebilirdim ki? Tavsiye edilen kitaplar bile eskide kalmış çoğu dökümanlar hem eski hem de birbirinden alıntı... Biliyorum Manuel diyeceksin :) ama oradaki konularda yüzeysel anlatılmış...


    Neyse hocam ben şimdi yukarıda yazdıklarından aldıklarımla konu üzerinde çalışayım...

    Yardımların için çok teşekkür ediyorum...




  • Arkadaşım bu konuyu yarım bırakmadığına sevindim.Umarım yarım bırakmak derken yanlış anlamamışsındır. Sadece şu andaki bilgi birikiminle yapabileceğine inandığım için vazgeçmeni istemediğimi anlatmaya çalıştım. Yoksa kesinlikle ayran gönüllü ve tezcanlı hatta bir deyimde ben ekleyim maymun iştahlı :) olduğunu düşünmedim.Ayrıca daha önce de söylediğim gibi ben senin araştırmadan gelip soru sormadığına inanıyorum.O nedenle mümkün mertebe yardımcı olmaya çalışıyorum.

    Unset ile ilgili soruna gelince evet ikinci şık yani o anda kafanı karıştırmamak içindi , tıpkı mysql_unbuffered_query(); vb. gibi.

    Şimdi burada dikkat etmen gereken bir sayfadan başka bir sayfaya geçtiğinde ,eğer POST veya GET'e veya sessiona atmadıysan önceki sayfadaki değişkenler yeni sayfaya taşınmazlar.O sayfanın işi bittiğinde PHP motoru tarafından yokedilir zaten.

    Ancak bizim unset kullanmamız gereken yer şu şekildedir:

    Mesela :

    $a=15;
    $b=157;
    $c=($a*$b);

    gibi bir işlem yaptık ve program daha devam ediyor ancak bizim işimiz sadece $c değişkeni ile $a ve $b ile işimiz kalmadı.Bu durumda hemen:

    unset($a,$b);

    diyerek $a ve $b değişkenlerini ve haliyle hafızada işgal ettikleri yeri siliyoruz.Şimdi burada yanlış anlaşılma olmasın yani biz direk

    $c=15*157;

    yazarız boşu boşuna niye iki değişken daha kullandık diye.$a ve $b değişkenini başka bir işlemin sonucundan veya veritabanı sorgusundan gelen sonuçlara göre hesapladığımızı düşün.Yani illa sayı işlemi değil herhangi bir metin tuttuğunu düşün.Mesela veritabanı işlemlerinde veritabanından gelen sonuçları

    $sonuc=mysql_fetch_array($sorgula);

    gibi $sonuc değişkenine atıyoruz. Diyelim ki biz bu işlemi daha 10. satırda yaptık ve 15. satırda işimiz bitti .Programımız ise 200 satırdan oluşuyor.Bu ne demektir 15. satırdan 200. satıra kadar $sonuc değişkeninin içerdiği değer boş yere hafızada yer işgel edecektir.

    umarım anlatabilimişimdir.Neyse arkadaşım sana çalışmalarında başarılar dilerim, takıldığın bir yer olursa her zaman ki gibi bilgimin yettiği ölçüde yardımcı olmaya çalışırım.




  • php ile bi dosyaya yazi yazdirmam gerekiyor.ama nasil alt satira gecilecegini bilmiyorum.
    herkese ait bilgileri farkli satira yazdirmak istiyorum ama yapamiyorum.yanina yazmaya devam ediyor.bi alt satira gecirmek icin ne yapmam lazim?
  • arkadaşım alt satıra geçmek istediğin yerde "\r\n" ekliyeceksin mesela:

    echo "Bu yazımız diyelim. \r\n";

    veya
    $yazi='Bu yazımız diyelim';

    echo $yazi . "\r\n";
  • Selam Hocam!

    En sonunda yukarıda vermiş olduğun kategorilendirme örneğinin mantığını defalarca uygulayarak kavramış bulunmaktayım... Kilit noktası if yapıları ve Posttan gelen değişkenler arasındaki ilişkiler... Gerçekten mükemmel mantık... eline ve zekana sağlık hocam...Bu mantıkla gerçekten tek bir sayfada istenilen sayıda sayfalar oluşturulabilir...

    Tabi bunu yaptıktan sonra select leri kontrol altına alma olayını da çözdüm acaba doğru mu yaptım bilmiyorum?

    Onu şöyle uyguladım... Sorguda select bölümüne çağrılan verilerdeki satırsayısını if yapısında uygulayarak eğer satır sayısı 0 ise Henüz bir kayıt bulunamadı gibi bir yazı çıkartırarak bu sorunu çözdüm... (Yöntemim doğru mu?)


    Zaman soruna gelince....Ben bunu burada zaman koymak yerine sorgu yapıldıktan sonra index sayfasına yönlendirerek bu sorunu hallettim... Yani bu işlemi kendimiz gerçekleştireceğimiz için zaman koyduğumuzda bizi bekleteceğinden dolayı yönledirmeyi tercih ettim... Ziyaretçi taraflı olmuş olsaydı evet kullanırdım... Ama mantığını kavramak benim için yeterli...


    Bunları yazdıktan sonra şimdi bu verileri "sayfada gösterme" konusuna geçmek istiyorum... Yani kategorilendirilmiş verileri sayfada gösterme...

    Ben bu konuda bişeyler yaptım fakat yine de bir yerde bana cazip gelmedi.... Şöyleki;

    Veritabanı yapımız :
     
    id ust_id kategori_adi
    ----- -------- -------------
    1 0 Sinema
    2 0 Spor
    3 0 Edebiyat
    4 1 Türk Sineması
    5 1 Dünya Sineması
    6 2 Futbol
    7 2 Basketbol
    8 6 Türkiye Ligi
    9 6 İngiltere Ligi
    10 3 Türk Edebiyatı
    11 3 Dünya Edebiyatı




    şimdi ben bu kategorileri göstermek için bir sayfa hazırlıyorum... Buraya ilk olarak sorguda üst_id si 0 olanları çağırıyorum... ve link içine yerleştiriyorum... Bu sayfaya girildiğinde ana kategoriler gözüküyor...

    Yani şöyle;


    Sinema
    Spor
    Edebiyat

    diylelim Spor linkine tıklıyorum

    Futbol
    Basketbol

    diye iki tane daha linki kategori çıkıyor....

    Burada da Futbol linkine tıkladığımda da;

    Türkiye Ligi
    İngiltere Ligi

    diye iki tane daha linkli sayfa çıkıyor... Buraya kadar herşey normal ve bunları yapabiliyorum... Fakat bu en son sayfanın linkli olmaması gerekiyor çünkü bunların henüz alt kategorisi oluşturulmamış...
    Bu konuda bayağı bi kafa yordum fakat bir çözüm bulamadım...

    Hem ayrıca şu kafama takıldı....Mesela Biz türkiye ligi sayfasına girdiğimizde... Sayfanın başında

    Spor>Futbol>Türkiye Ligi

    yazmak için farklı bir fonksiyon mu kullanmak gerekir? Ben önceki yazılarında Ceviz netteki kategori konulu yazıyı da kontrol ettim fakat veritabanı yapısı farklı olduğu için bunu uygulayamadım...

    Bu konuda nasıl bir yol izlemeliyim... Üzerinde durmam gereken ve benim bilmediğim bir konu mu var acaba?



    Bunun dışında unset konusunda da bir kaç şey söylemek istiyorum...

    Mesela sayfada şöyle bişey var?

    <?php
    $ad=$_POST[ad];
    $soyad=$_POST[soyad];
    $mesaj=$_POST[mesaj];

    $sql="INSERT INTO tablo(ad,soyad,mesaj) VALUES("$ad","soyad","mesaj");
    mysql_unbuffered_query($sql);

    //Diyelimki burada işimiz bitti...

    unset($ad,$soyad,mesaj); // ad soyad ve mesaj değişkenlerini bu sayfada başka bir yerde kullanmıyoruz...

    buralarda sayfadaki diğer kodlar mevcut(tabi eğer varsa)...

    ?>


    Yukarıda yapmış olduğum unset uygulaması doğru mu?... Bir de diyelim ki değişkenler sayfanın 10. satırında sorguda kullanıldı fakat unset kodunu sayfanın 200. satırında kullandık... Bu herhangi bir olumsuzluk yaratır mı?
    Mesela ben sayfayı bitirdim diyelim ve sayfanın en sonuna unset kodunu kullanarak bütün işi biten değişkenleri içine yazsam sorun olur mu?

    Şimdilik yazılarımı burada noktalıyorum...

    Teşekkürler Hocam...




  • hani
    $dosya=fopen("isim.uzanti", 'r+')
    şeklinde dosya açıyoruz ya.Ben bu dosyaya fwrite ile(sanırım fwrite idi) yazı yazdırırken alt satıra geçmekten bahsetmiştim ama sanırım senin echo ile verdiğin örnekte olduğu gibi dosyaya yazdirirken de çalışır \r\n.Bu arada merak ettim acaba niye iki tane anahtar var. sadece \n niye yetmiyo.ben onu denemiştim ama olmadı.
    Bir şey daha sorcam.Dosyayı açtıktan sonra mesela içindeki bir kısmı silmek istiyorum. mesela 185-370 arası karakterleri silmek istiyorum.Bunu nasıl yapcağımı biliyormusunuz acaba? teşekkürler
  • 
Sayfa: önceki 56789
Sayfaya Git
Git
sonraki
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.