Aylık arşivler: Mayıs 2008

PHP ile E-Mail Geçerlilik Kontrolü

Published / by Uğur Özşahin / Leave a Comment

    Bugün yine kod yazarken PHP nin yeni fonksiyonlarından birini öğrendim. Fonksiyon filter_var fonksiyonu, filter_var() PHP 5.2.0 ve üstü sürümlerde kullanılabilir durumda. Önceleri bu işi regular expression (Düzenli İfadeler) ile pek güzel yapabiliyorduk. Artık düzenli ifadeleri e-mail geçerliliği için kullanmaya son. Bundan sonra filter_var() ile işimizi halledebileceğiz.

    Daha fazla uzatmadan hemen e-mail geçerlilik kontrolü için örnek bir kod yazıyorum.


    İşte fonksiyonun kullanımı böyle. filter_var fonksiyonu hakkında daha fazla bilgiye linke tıklayarak ulaşabilirsiniz. FILTER_VALIDATE_EMAIL referansı yerine örnek olarak FILTER_VALIDATE_URL referansı ile URL geçerliliğini test edebilir yada FILTER_VALIDATE_IP ile de IP geçerliliğini kontrol edebilirsiniz. Kullanabileceğiniz diğer filtreler için PHP Filter Reference sayfasına göz atabilirsiniz.

MySQL Türkçe Karakter İlk Harf Sıralaması

Published / by Uğur Özşahin / Leave a Comment

    PHP ve MySQL e geçiş sürecim ve bu konulardaki eksikliklerim gün geçtikçe kapanıyor. Ancak sancılı bir dönem olduğu en azından benim için gün gibi ortada. Her yazdığım koddan sonra yada yazmak istediklerim için araştırmaya girişmek beni yavaşlatan başlıca sebeplerden. Fakat ilk kompleks projemi bu şekilde hazırlıyor olmamın çok önemli bir nedeni var. Yıllarca WEB konusunda VB Script ve Access veritabanı ile uğraşmış biri olarak, PHP ve nimetlerinden yararlanmanın tek yolunun bu şekilde kodlama yapmaktan geçiyor olması. Çünkü daha önce PHP ile ilgili her ne kadar bir kitap bitirmiş olsamda, düzey bakımından kesinlikle ihtiyacımı karşılayabilecek seviyede değildi. Dedim ya basit PHP kodlamalarımı belki bu kitap sayesinde yaptım, ancak işin içine daha özgün ve karmaşık yapılar girdiğinde, muhtemelen hiç bir kitap ihtiyaçları karşılayacak yeterliliğe sahip olmuyor.

    Başlıkta anlatmak istediğimi kısaca daha anlaşılabilir biçimde açıklayayım. PHP ve MYSQL ile yapmak istediğim şu, öncelikle elimde bir tablom ve listelemem gereken verilerim var. Listeleme koşulum ise her verinin baş harfinin, alfabetik bir düzen içerisinde web sayfasında görüntülenmesi. Örnek vermek gerekirse, ziyaretçi ’A’ harfine göre listeleme yapmak istediğinde, sonuçlar içerisinde yalnızca ’A’ ile başlayan verinin görüntülenecek olması. Aslında yapmak istediğim şey son derece basit ki, zaten istediğimi bir parçada almış olmama rağmen, işin içine Türkçe karakterle başlayan veriler girdiğinde sonuç beklentilerim ile uyuşmuyordu. Yine örnek verecek olursam, ’İ’ harfine göre bir listeleme yapmak istediğimde, liste içerisinde ’I’ ile başlayan verilerde yer alıyordu. Neyse ki sorunun çözümünü yine kendim buldum. Aslında tüm sıkıntı veritabanında yer alan tabloların kendine has özelliklerinden kaynaklanıyormuş. Prensip olarak tablo karakter setlerini ’utf8’ olarak belirlerim. Collation (Karşılaştırma) değerini ise ön tanımlı olan ’utf8_general_ci’ olarak bırakırdım. İşte hata tam olarak bu noktada başlıyor, Collation özelliğini ön tanımlı olarak bırakmak yerine ’utf8_turkish_ci’ olarak ayarlamamın istediğim sonucu sağladığını gördüm. Ancak belirtmeliyim ki, ’utf8_turkish_ci’ ayarı, uluslararası projelerde neler götürür kestiremiyorum. Bu yüzden sanırım, yabancı dilde hazırladığım sitelerde ’utf8_general_ci’ yada ’utf8_unicode_ci’ ayarlarını kullanmaya devam edeceğim.

Önemli Not: Yalnız bu değişikliği eğer fulltext indeks içerikli tablolarda yapmak isterseniz bazı hatalar ile karşılaşabilirsiniz. Bu yüzden öncelikle fulltext indeksleri kaldırmanızı ve Collation (karşılaştırma) ayarlarını yaptıktan sonra fulltext indeksleri tekrar tanımlamanızı öneriyorum.

Smarty Template Engine Süslü Parantez Sıkıntısı

Published / by Uğur Özşahin / Leave a Comment

    Bir template engine dir gidiyor bende bu aralar. Bu template engine ne olaki diye soracak olursanız sizi şuraya alalım. Türçe olarak birşeyler söylecek olursak template engine, web uygulaması geliştiricilerinin, farklı platformlarda birbirinden kod bağımsız ortak iş yürütebilmelerini amaçlayan bir araçtır. Örnek olarak, Smarty Template Engine ’i baz alacak olursak, Smarty bize PHP ile HTML kodlarının birbirinden bağımsız geliştirilebilmesini vaad eder. Ancak işin aslı pekte öyle değildir. Smarty kendi içinde ekstra bir dil gibi hareket eder. Kendine özgü döngü, dizi, vb. kod yapıları vardır. Yani tasarımcıyı neredeyse HTML dışında başka bir dil öğrenmek zorunda bırakır. Fakat çok kompleks bir kodlama yapısı ile karşımıza çıkmadığından ve esnek yapısından olsa gerek en çok tercih edilen template motorlarındandır.

    Smarty hakkında verdiğimiz küçük bilgilerden sonra, yaşadığım aptal sıkıntı ve çözümü hakkında bir şeyler karalayabilirim. Evet sıkıntı gayet basit ve çözümü de bir o kadar kolay. Yaşadığım sıkıntı Smarty i default ayarları ile kullandığımdan süslü parentez  ( {} ) işaretlerini tasarımım içinde bir türlü kullanamamaktan ibaret idi. Sorunun çözümü hakkında bir mail list içerisinde gerekli açıklama ile karşılaşmam sonucu sorun ortadan kalkmış oldu. Şöyle ki eğer tasarımınız içerisinde süslü parantezleri kullanmak istiyorsanız (Yada sizin için gerekli olan diğer yasaklı karakterleri) bu karakterleri {literal} … {/literal} tagları içerisinde yazmalısınız. Bu sayede süslü parantezler artık tasarımınız içerisinde gösterilecek ve herhangi bir hata mesajı ile karşılaşmak zorunda kalmayacaksınız.

    Ek Bilgi: Bu arada {literal} … {/literal} tagları arasına yazılan her türlü veri, kesinlikle Smarty kurallarına takılmıyor. Yani tasarım içerisinde {literal} .. {/literal} tagları arasında özgürce kodlama yapabiliyoruz.  Fakat kişisel olarak buna süslü parantez kullanmak zorunda olduğum alanlar dışında çok fazla ihtiyaç duyacağımı sanmıyorum.

Char ve Varchar veritipleri arasındaki farklar

Published / by Uğur Özşahin / Leave a Comment

    Veritabanı ile uğraşanlar bilirler, veritipleri performans ve veri kapasitesi bakımından önemli bileşenlerdir. Oluşturulan alanlarda öncelikli olarak işimize uygun olacağını düşündüğümüz veritipleri ile çalışmak hedeflerimizin başında gelir. Yakın zamanda  Char ve Varchar veri tipleri arasındaki farklar konusunda yeterli bilgiye sahip olmadığımın farkına vardım ve hem not almak, hemde paylaşmak maksadı ile buraya yazmak istedim.

    Char ve Varchar veritipleri arasındaki farkları bir liste halinde aşağıda bulabilirsiniz.

  • Char veritipi 0 ile 255 karakter arasında veri tutabilirken, Varchar veritipi MySQL v5,03 ten itibaren 0 ile 65,535 karakter arasında veri tutabilmektedir. MySQL’in önceki versiyonlarda ise Char veritipi ile aynı kapasiteye sahiptir.
  • Char veritipi, tanımlandığı kadar kapasitenin tamamını kullanır. Örnek olarak siz 50 karakterlik bir alan tanımlamışsanız, bu alana 20 karakter bile girmiş olsanız, geriye kalan sağdan 30 karakterlik alan boşluk karakteri ile doldurulur. Varchar veritipi ise değişken bir yapıya sahiptir ve tanımlanan karakter katarına kadar olan boyutta değişkenlik gösterebilir. Yine örnek vermemiz gerekirse, 50 karakterlik bir alan için 30 karakter girdiğinizde hafızada sadece 30+1 karakterli bir alan kaplar.
  • Char veritipinin kullanım alanı olarak sabit uzunluklu veri yapıları gösterilebilir. (Örn: telefon numaraları, kredi kartı no vb.) Varchar ise değişken uzunluklu veri yapıları için uygundur. (Örn: isim, mail vb.)
  • Ayrıca bir tabloda varchar veritipinde tek bir alan bile yer alsa, bu aynı tablodaki diğer char veritipi ile belirlenmiş alanlarında Varchar biçiminde çalışmasına neden olur.

    Burada bahsettiklerim dışında başka farklılıkların olduğunu biliyorsanız, yorum kısmında belirtebilirsiniz.

OpenOffice.org Base ile MySQL Veritabanı Yönetimi

Published / by Uğur Özşahin / Leave a Comment

OpenOffice.org, Microsoft Office paketinin alternatifi sayılabilecek açık kaynak ücretsiz bir program paketi. Açıkçası paket içeriği hakkında uzun uzadıya bilgi vermek istemiyorum. Yalnızca paket içerisinde gelen Base programı ile MySQL veritabanlarına nasıl bağlanabileceğiniz konusunda bilgi vereceğim.

Öncelikle OpenOffice.org Base programını çalıştırmadan önce, OpenOffice.org platformumuza MySQL Native Driver eklentisini kurmalıyız. Bunun için kullandığınız işletim sistemine göre verdiğin linkten eklenti dosyasını çekmelisiniz.

MySQL Native Driver eklentisini şu sayfadan indirebilirsiniz. Açtığınız sayfadan, işletim sisteminize uygun olan eklentiyi çekmeniz gerekmekte. Windows kullanıcıları sonu win32.oxt ile biten dosyayı bilgisayarlarına indirmeliler. Linux kullanıcıları muhtemelen hangisini indireceklerini tahmin ediyorlardır.

Sıra geldi indirdiğimiz eklentiyi OpenOffice.org içine kurmaya. Bunun için OpenOffice.org programımızı çalıştırıyoruz.

 

Resimde Görüldüğü üzere Tools Menüsünden Extension Manager ı çalıştırıyoruz.

Gelen sayfada Add butonuna tıklıyoruz.

Karşımıza indirdiğimiz eklentiyi, belirtmemiz gereken pencere geldi. Bu pencerede eklentiyi bilgisayarınızda nereye indirmişseniz oraya giderek eklentiyi seçip Aç butonuna tıklamalısınız.

Sonuç yukarıdaki gibi olmalı. MySQL Native Driver Eklentisi artık OpenOffice.org içine kurulmuş durumda.

Artık OpenOffice.org Base programını çalıştırabilir ve Database Wizard ile yönetmek istediğimiz veritabanına bağlantı oluşturabiliriz.

Programı çalıştırdığımızda karşımıza yukarıdaki gibi bir pencere geliyor. Seçenekleri Aynen pencerede göründüğü şekilde düzenlemeli ve Next butonuna tıklamalısınız.

Bir sonraki aşamada karşımıza çıkan metin kutusuna veritabanına ulaşmamız için gereken, host adını, port numarasını ve veritabanı adını girmeliyiz. Örn: “localhost:3306/veritabani_adi” Bu sayfada da bir sonraki adım için Next butonuna tıklıyoruz.

Bu sayfada ise veritabanınız için gereken kullanıcı adını girmeli ve eğer şifre gerektiriyorsa Password Required işaret kutusunu doldurmalısınız. Dilerseniz direk Finish butonuna tıklayabilir ve 1 adım atlayabilirsiniz. Next butonuna bastığınız taktirde aşağıdaki pencere ile karşılaşacaksınız.

Bu penceredeki ayarlar ile dilerseniz ve işinize yarayacağını düşünüyorsanız oynayabilirsiniz. Ben default haliyle bırakıyorum. Artık Finish butonuna tıklayabiliriz.

Bu sefer veritabanımız için bir dosya adı belirliyor ve sonunda MySQL veritabanımıza ulaşabiliyoruz.

Tüm işlem bu kadar adım adım anlattığım için uzun gibi gözükebilir ancak son derece basit ve hızlı bir çözüm. Ayrıca Base programının bağlanabildiği veritabanları MySQL ile sınırlı değil, Access, Oracle ve daha birçok veritabanı için bu programdan yararlanabilirsiniz. Bu işlem için çok daha profesyonel yazılımlardan, hatta tek veritabanı sunucusu için özelleştirilmiş çözümlerden de hiç kuşkusuz yararlanabilirsiniz, açıkçası bu çözüm bir çok arkadaşa yeterli gelmeyebilir fakat denemeye değer bulanlar muhakkak olacaktır.