RSS
 

Posts Tagged ‘php5’

1.0 PHP ile Nesne Yönelimli Programlamaya Giriş

23 Sep

Merhaba,

Bu makalede PHP ile Object-oriented Programming(Nesne Yönelimli Programlama) giriş yapacağız. Makale giriş seviyesi fakat NYP(Nesne Yönelimli Programlama) ileri seviye bir konu olduğundan, PHP ile yeni web uygulamaları geliştirmeye başlayan kişilere tavsiye etmiyorum. Öncelikle PHP’de bir seviye uzmanlaşmakta fayda var. Yoksa bu makaleler zor ve öğrenmesi güç gelecektir.

Bilindiği üzere Class(Sınıf)’lar metodların birleşmesinden oluşur. PHP ile hazır gelen ve kendi oluşturabileceğimiz metodlar vardır. Bunlardan ilk iki tanesi __construct ve __destruct metodlarıdır.

__Construct Metodu; Object(Nesne) ilk yüklediği anda çalıştırılacak kodların bulunduğu bölümdür.  Daha önce ASP.NET ile web programlama yapmış arkadaşlar bunu Page_Load() methoduna benzetebilirler. PHP 4’te bu Class’ın adı ile aynı bir method oluşturarak mümkündü fakat PHP 5 ve sonrasında bunun yerine __construct() methodu getirildi.

void __construct ([ mixed $args [, $... ]] )

__Destruct Metodu; Bu metod ise nesne ile işimiz bittiğinde otomatik çağırılan metottur. İstersek manuel de çağırabiliriz.

void __destruct ( void )

Şimdi bu metodları bir örnek üzerinde inceleyelim.

Gördüğünüz gibi ilk önce __construct() metodu çalıştı ardından sayfa içerisindeki kodlar sonuna kadar çalıştırıldı ve en son olarak __destruct() metodu çağırıldı. Construction’da class içerisinde bolca kullanacağımız parametreler verilebilir. Destruction’da ise açık veri tabanı bağlantıları, session yok etme, hafızayı temizleme, arabelleği boşaltma v.b. gibi işlemler yapılabilir. Bunları ilerleyen makalelerde bolca kullanacağız. Bir class’ı new komutu ile oluşturacaksanız public olarak __construct metodunu kullanmalısınız. Fakat PHP’de __construct() ve __destruct() metodları olmadanda bir class oluşturmanız mümkündür.

__AutoLoad() metodu,  daha önce projelerimizde kullandığımız require_once() ve include_once() metodlarına benzemektedir. Fakat bunu class içerisinde otomatik yaparak bizi, acaba şu class’ı veya interface’i include(dahil etmek) ettim mi? Sorusundan kurtarır.  Bu metodu daha verimli kullanmak için class’larımızı ve interface(Arayüz)’lerimizi hiyerarşik yapıdaki bir klasörde tutmamızda fayda var. Anlatmak istediğimi bir örnek üzerinde inceleyerek pekiştirelim.

Klasör yapımız aşağıdaki şekilde olsun;

+ Proje

++ library

+++ testClass.php

+++ denemeClass.php

index.php

Metodumuzu aşağıdaki şekilde yazarsak Class’larımızı otomatik yükletebiliriz.

__autoload("test");

?>

Bu Class’ımız içerisinden çağırmak için kullanabileceğimiz bir yöntem. Fakat uygulamamız içerisinde, daha önceden hiç bir nesne oluşturmadan __autoload() adında bir fonksiyon yazarakta yapabiliriz. Gördüğünüz üzere yukarıdaki __autoload() metodunu çağırmak için new komutu ile önceden test() adında bir nesne oluşturuyoruz. Bunun yerine aşağıdaki şekilde bir fonksiyon ile de çözebiliriz.

Yukarıdaki fonksiyonu direkt olarak uygulamamızın içerisinde istediğimiz bir yerde, yeni bir nesne oluşturmadan __autoload(string <param>); şeklinde kullanabiliriz.

Not: __autoload() bloğu içerisinde oluşan hatalar catch bloğu ile yakalanamaz!

Erişim Hakları; Nesne içerisindeki bir değişkenin veya metodun nerelerden erişilebileceğini belirlememizde bize yardımcı olan komutlardır. Public, Private, Protected olarak 3 türü mevcuttur.

Public; Bu şekilde tanımlarsak heryerden erişilebilir olduğunu bildiririz. Eğer bir metodun başına hiç bir şey belirtmeden direkt tanımlarsak PHP bunu varsayılan olarak public(paylaşılan) olarak kabul eder. PHP 4’te public yerine kullandığımız var anahtar’ı geriye uyumluluk adına desteklenmektedir fakat PHP’nin 5.1.3 sürümünden önceki bir sürüm üzerinde uygulama geliştiriyorsanız bu E_STRICT uyarısına sebeb olur.

Private; Sadece tanımlanan Class(Sınıf) içerisinden erişilebilir.

Protected; Bu tür tanımlanan metod veya değişkenler sadece ilgili Class içerisinden veya türetilen Class içerisinden erişilebilir. Public gibi dışarıdan erişimi mümkün değildir.

Zend Studio gibi gelişmiş bir PHP IDE’si kullanıyorsanız zaten yeni bir nesne oluşturduğunuzda size Private ve Protected olarak tanımlanmış metod ve değişkenleri göstermeyecektir. Şimdi bunları bir örnek ile inceleyelim.

Zend Studio 7

Gördüğünüz gibi Zend Sutdio’da nesnemizi oluşturduğumuzda bize sadece public metod ve değişkenleri göstermektedir. Aksi taktirde uygulamamız Fatal Error(Ölümcül Hata) ile sonlanır.  Burada _getInfo() ismi ile tanımladığımız bilgi veren metodumuz biraz kafanızı karıştırabilir. Hani private ve protected metodlara dışarıdan erişilemezdi? gibi bir soru ortaya çıkabilir. Biz nesnemizdeki _getInfo() metodunu public olarak oluşturduk ve çağırdık. _getInfo() metoduda class içerisinde olduğundan yine class içerisindeki private,protected ve public değişkenlere erişme hakkı var. Yani biz metodu call(çağırmak) ediyoruz. O metod kendisi erişebildiği değişkenlerin değerlerini bize gösteriyor.

Protected erişim türünü daha iyi inceleyebilmek için, şimdi childClass() isminde yeni bir class oluşturarak bunu parentClass()’mızdan türetelim.

$degisken3 isimli değişkenin değerini burada override(ezmek) ederek değiştiriyoruz. Böylece artık $değişken3 türeyen class’ımızda atadığımız değere göre işlenecektir. Bu nedenle $foo2 nesnemizin _getInfo() metodunu çağırdığımızda ”Ben hem class içerisinden hemde türetilen class’lardan erişilebilirim.” değeri yerine “Değerini değiştirdik.”  yazısını göreceğiz. Hepimizin bildiği gibi başındaki br tag(etiket)’i HTML’e özel bir tag olduğundan tarayıcımız bunu yorumlayarak göstermemektedir. Bu nedenle çıktıda gözükmemektedir.

İyi Çalışmalar.

 
No Comments

Posted in PHP

 

SQL Server Driver For PHP Connection Error

10 Jul

SQL Server Driver FOR PHP 5

Merhaba,

Bildiğiniz üzere Microsoft PHP için bir SQL Server Driver’ı çıkarttı. Bu extension’ı PHP’nin üzerine kurduğunuzda SQL Server 05 ve 08 ile sorunsuz ve hızlı bir şekilde işlemler yapabiliyorsunuz.  e-mail’me gelen soru yağmurları arasından seçtiğim bir sorunun cevabını buradan vermek istiyorum. Çünkü SQL Driver henüz yeni bir extension ve Türkçe kaynak hiç yok. Orjinal dökümantasyonu ise pek iç açıcı değil. :)

Hata: (SQL Server 08 üzerinde çalışıyorsanız.)

Array ( [0] => Array ( [0] => IMSSP [SQLSTATE] => IMSSP [1] => -1 [/code]

=> -1 [2] => Invalid option xÁò was passed to sqlsrv_connect. [message] => Invalid option xÁò was passed to sqlsrv_connect. ) )

Çözüm:

SQL Connection string'inizi daha doğrusu array'nizi hazırlarken eğer string türünden hariç bir şifreniz varsa ve string'e convert etmemişseniz bu hatayı olabilirsiniz. Bunun için connection string'inizdeki ilgili alanı ya string'e convert edin yada çift tırnak ( " ) içine alarak otomatik string olarak gösteriniz.

Örnekler;

- Hatalı Örnek:

$connectionStr= array( "Database"=>"fooDb","UID"=>"sa2","PWD"=>15461068071951080841);

- Doğru Örnek:

$connectionStr = array( "Database"=>"fooDb","UID"=>"sa2","PWD"=>(string)15461068071951080841);

veya (Aşağıdaki tavsiyem aynı zamanda. )

$connectionStr = array( "Database"=>"fooDb","UID"=>"sa2","PWD"=>"15461068071951080841");

Böyle basit bir işlemden dolayı sinir katsayınızı arttırabilir. :) Henüz yeni ve ilk versiyonları bunlar. Umarım 2. versiyonunda bunların hepsini halletmiş olurlar.

iyi çalışmalar.

 
No Comments

Posted in MsSQL, PHP

 

Oxijen Framework

17 Jan

Merhaba,

 PHP ile web uygulamaları geliştirirken hep .NET Framework gibi bir geliştirme çatısı kullanmak istemişimdir. :) Ama malesef şimdilik bu mümkün değil. Piyasada ciddi anlamda framework diyebileceğimiz de 2/3 taneden fazla sağlam PHP framework yok. Bunlarında hiç biri Türkçe değil ve/veya Türkçe dökümantasyon içermemektedir.

 Henüz yeni yazmaya başladığım Oxijen Framework adındaki bu yeni geliştirme çatışında sizlere sunmak istediklerim.

İlk Aşamada;

  • SDL (Secure Data Layer) – Security

  Bu özelliği sayesinde client’tan alınan tüm data’lar bir güvenlik katmanından geçerek temizleniyor ve sizin tarafınıza int ise int, string ise kötü karakterler temizlenmiş string. Double ise kontrol edilmiş Double gibi bir çok güvenlik etkeni size sunmaktadır. Tek yapmanız gereken size gelen dataları Security bölümünde SDL Class’ının  altındaki function’lardan geçirtmektedir. Gerisi Oxijen sizin yerinize yapmaktadır.

  • DAL (Data Access Layer) – Database

  Bu bölüm ise Database bölümündeki DBProvider Class’ı dır. Bu Class’ın özelliği ise size MySQL,MsSQL,PostgreSQL,Oracle ve daha sonraki sürümlerde çoğaltacağım bir çok veri tabanına tek bir ayar ile erişmenizi. Farklı bir veri tabanı sunucusuna geçtiğinizde uygulamanızda tek yapmanız gereken Provider Name bölümünü değiştirmektir. Bu Class size Provider bağımsız uygulama geliştirmenizde yardımcı olacaktır.

  • CQE (Controlled Query Execute) – Database

  Bu Class ise size sorgularınızı güvenli bir şekilde veri tabanına eriştirmenizden, Transaction yönetimine kadar yapmaktadır. Sizin tek yapmanız gereken sorgunuzu CQE’e göndermek. Gerisini yine Qxijen hallediyor. :)

  • RIAJAX (Rich Internet Applications With AJAX) – RIA

  Burada da browser tabanlı event’lerinizi handle etmenizde yardımcı olacak AJAX sınıfları ve bazı JQuery özelliklerini sunacağım. Böylece oluşturmuş olduğunuz formlarınızda server-side controller’dan hariç client-side controller yaparak bant genişliği ve sunucu yoğunluğunu azaltmış olacağız.

  • XWS (XML Web Services) – Web Services

  Genelde hep problem yaşanan ve hassas olan web servisleri tarafında sizin en büyük yardımcınız olacak XWS Class’ına da buradan erişebileceksiniz. Bu Class ise sizlerin daha kolay web servisi oluşturmanızı ve web servislerinden data alarak, isterseniz veri tabanınıza istersenizde her hangi bir XML formatındaki dosyaya yazmanızı sağlayacaktır. Böylece, dil bağımsız her uygulama ile kendi web uygulamanızı iletişime geçirebileceksiniz.

Yukarıda ilk beta 1 versiyonunda olacak bazı özellikleri kısa, kısa aktarmaya çalıştım fakat dökümantasyonundan çok daha geniş bilgi edinebilirsiniz. Yukarıdakilerden hariç bir çok özelliği daha olacaktır.

Geliştirici Lisans: Oxijen Framework tüm geliştiriciler tarafından ticari projeler hariç istediği şekilde kullanılabilir,geliştirilebilir ve dağıtılabilir. GPL lisans türü ile lisanslanmıştır. Kullanan her kişi bu şartı kabul etmiş sayılmaktadır. GNU Public License.

Kurumsal Lisans: GPL ile lisanslanmış bir uygulamayı kendi ticari uygulamanıza entegre etmeniz durumunda, geliştirmiş olduğunuz yazılımın kaynak kodlarını GNU Public License kapsamındaki maddeler bağlamında tüm kullanıcılara açmanız gerekmekdir.

 Oxijen Framework’ü yüklemek ve ayrıntılı bilgi edinmek için kısa süre içerisinde güncellenecek olan www.oxijen.org adresini ziyaret edebilirsiniz.

Saygılarımla,

Hakan DAMAR

 
 

PHP 5 – Oracle Database Connection

11 Nov

Merhaba,

 Oracle Database’ne PHP ile bağlantı sağlamak için gereken kodları aşağıda paylaşıyorum.

<?php

#Developer: Hakan DAMAR

  $Baglanti = oci_connect('Hakan', '2hkn8', 'OracleDB');

 

/* oci_connect(); fonksiyonu

 * resource oci_connect ( string $username , string $password [, string $db [, string $charset [, int $session_mode ]]] )

 * Biz minimum bağlantı için gerekli olan 3 parametreyi verdik.

 * MySQL'deki gibi oci_pconnect(); 'te kullanabilirdik. Bağlatı türü MySQL ile aynı işleve sahiptir.

 */

  if (!$Baglanti) {

    $Hata = oci_error();

    print htmlentities($Hata['message']);

    exit;

  }

 

  $Sorgu = 'SELECT * FROM view_Firmalar';

/* oci_parse(); fonksiyonu

* resource oci_parse ( resource $connection , string $query )

* Sorguyu hazırlar fakat geçerlilik kontrolü yapmaz. 

* Olan SQL sorgusu geçerlili ise diğer funct. geçirir.

*/

  $Hazirla = oci_parse($Baglanti, $Sorgu);

  if (!$Hazirla) {

    $Hata = oci_error($Baglanti);

<span> </span># String'i dekode ediyoruz. htmlentities ile tabiki :) 

    print htmlentities($Hata['message']);

    exit;

  }

/* oci_execute(); Fonksiyonu

* bool oci_execute ( resource $statement [, int $mode ] )

* Geriye IF..ELSE kontrolü gibi bool döner. Ya True(1) yada False(0) döner.

* Hazirlanmış sorguları çalıştırır.

* OCI_DEFAULT parametresini geçtiğimizde SQL'deki transaction'ı commit ediyor.

* Eğer bağlantı kesilirse ROLLBACK ile işlem bütünlüğü sağlıyor.

*/

  $Calistir = oci_execute($Hazirla, OCI_DEFAULT);

  if (!$Calistir) {

    $Hata = oci_error($Hazirla);

    echo htmlentities($Hata['message']);

    exit;

  }

/*

* array oci_fetch_array ( resource $statement [, int $mode ] )

* While ile dönerek DataGrid oluşturuyoruz. oci_fetch_array aynı mysql_fetch_array gibi

* Dataları bir dizi şeklinde almamızı sağlıyoruz.

* 2. parametrede OCI_RETURN_NULLS diyerel. DB'deki boş alanlar için boş elementler oluşturuyoruz.

*/

  print '&lt;table border="1"&gt;';

  while ($DataRow = oci_fetch_array($Hazirla, OCI_RETURN_NULLS)) {

    print '&lt;tr&gt;';

       foreach ($DataRow as $items) {

         print '&lt;td&gt;'.($items?htmlentities($items):'&amp;nbsp;').'&lt;/td&gt;';

       }

       print '&lt;/tr&gt;';

  }

  print '&lt;/table&gt;';

/*

* oci_close ile database bağlantımızı kapatıyoruz.

* mysql_close() fonksiyonundan bir farkı yok aynı çalışma mantığına sahipler.

*/

  oci_close($Baglanti);

?>

Konuyla ilgili her türlü sorunuz için bana ulaşabilirsiniz.

İyi Çalışmalar,

Hakan DAMAR

 
4 Comments

Posted in PHP

 

PHP İle İlk Programımız

16 Oct

Merhaba Sevgili Okurlar,

Daha önce bahsettiğim PHP 5’in ileri seviyesine kadar olan yazı dizimi sonunda yazmaya başlayabildim. Daha önce benim gibi Microsoft platformunda programlama yapmış kişiler için ara, ara Microsoft platformu ile karşılaştırmalar yapacağım. Hemen ilk dersimize başlayalım.

<?php

$Adiniz = 15;

$Yasiniz = “Hakan”;

?>

PHP dilinde her dilde olduğu gibi değişkenler mevcuttur. Değişken nedir? Sorusunu soracak olursak. Değişkenler bellekte atadığımız değerleri tutmakla görevlidirler. Yani bunu kavramak adına şöyle açıklayabiliriz. Değişkenleri bir kap olarak düşünün. Elinizde bir kap var ve bunun içine ne koyacağınıza kim karar verebilir? Tabii ki siz, şimdi biz elimize bir “$Adiniz” isminde kap aldık birde “$Yasiniz” isminde bir kap aldık. Bunların içine de değerleri şöyle yerleştirdik.

$Adiniz Kabına 15 değerini koyduk.

$Yasiniz Kabınada Hakan değerini koyduk.

Burada bir çelişki olduğunu sezebilirsiniz. Bunu bilerek yaptım. Yani verdiğimiz değişkenin adının şimdilik pek bir önemi yoktur. Asıl olan içindeki değerdir. Çünkü değişkenler daha öncede belirttiğim gibi içindeki değerleri bellekte tutar ve bizim verdiğimiz değişken adları ile erişmemizi sağlarlar. Ama ileride değişken isimlendirmesinin standartlarına ve önemine de değineceğim.

Dikkat ettiyseniz değişkenlerin önünde dolar “$” işareti olduğunu görmüşsünüzdür. PHP dilinde bir değişken tanımlarken başına “$” dolar işaretini klavyemizden Alt Gr + 4 tuşuna basarak koymamız gerekmektedir. Bunu yaparak PHP derleyicisine bunun bir değişken olduğunu bildirmiş oluyoruz. PHP derleyicisinin ne olduğunu bilmiyorsanız. Kısaca açıklayayım. Dinamik programlama dilleri, statik diller gibi tarayıcı tarafında çalışmazlar. Dinamik diller sunucu tarafında çalışır ve yorumlanırlar ardından yorumlama sonucu oluşan HTML kodunu istemciye gösterirler. Grafiksel olarak anlatacak olursak aşağıdaki grafiği inceleyebilirsiniz.

Yukarıdaki grafiği açıklayalım.

İlk olarak istemci yani bizler. Internet Explorer,Firefox,Safari,Chrome gibi web tarayıcıları ile sürekli internet sayfalarında dolaşmaktayız. Web tarayıcımızı açıp bir internet sayfasının adresini yazdığımızda arka planda olan olaylara şöyle bir bakalım.

  1. Tarayıcıya http://hakandamar.com yazdık ve ENTER tuşuna bastık.

  1. 2. Tarayıcı adı çözümledi ve geçerli bir adres ise alan adının NS kayıtlarına baktı.
  1. 3. NS kayıtlarındaki IP adresine bağlantı yani Web Sunucusuna bağlandı.
  1. 4. Web sunusundan ilgili alan adına ait web sayfasını istedi.
  1. 5. Eğer dinamik bir programlama dili ile geliştirilmiş ise web sunucusu bu dil’in derleyicisi ile iletişime geçip kodları yorumlattı ve HTML çıktısını tarayıcıya gönderdi.

  1. 6.Daha sonra web tarayıcımızda ilgili sayfa görüntülendi.
  1. 7. Statik bir dil ile yazılmışsa web sunucusu direk sayfayı tarayıcıya gönderdi. Sayfa tarayıcı taraflı programlama kodları içeriyorsa tarayıcıdayken okundu ve istemciye gösterildi.

Yukarda ki tanımlardan yapancı gelebilecek NS kavramı vardır. Bunu da hemen kısaca açıklayayım. NS(Name Server) ad sunucusu anlamına gelmektedir. Alan adlarının, sunucular ile iletişime geçmesi için gerekli olan köprü görevini üstelenen sunucudur. Asıl ismi DNS(Domain Name Server) Alan Adı Sunucusu anlamına gelmektedir. İleride DNS ile ilgili ayrıntılı bir makale yayınlayacağım. Ayrıntılı bilgiye yine web sayfamdan ulaşabilirsiniz.

Şimdi PHP’nin de dinamik bir programlama dili olduğunu öğrendik ve dinamik programlama dillerinin nasıl çalıştığını da kavramış olduk.

Tekrar kodlarımıza dönecek olursak. Kodlarımızı bir tag(etiket) arasına yazdık. Bu etiketler <? Ve ?> etiketleridir. Bu tür syntax(yazım kuralı)’lar her programlama dilinde vardır. Bu sayfa sunucuda yorumlandığında <? İle ?> etiketleri arasında kalan kodların dinamik bir programlama kodu olduğunu sunucuya anlatıyor ve bu kodların sunucu tarafında yorumlanıp çıktısı olan HTML sonucunun ise istemciye gönderilmesi gerektiğini anlatıyor.Böylece sunucu salt HTML kodları ile PHP kodlarını sayfa içerisinde ayırt edebiliyor.

Son olarak sayfamızı nasıl kaydedeceğimiz hakkında bilgi vermek istiyorum. Sayfalarımızı Notepad++ isimli program ile geliştirebiliriz fakat uzantılarını notepad ile yazsak bile mutlaka “DosyaAdi.php” şeklinde yapmamız gerekiyor. Uzantının önemini açıklamak gerekirse; Web sunucusuna hangi programlama dilinin hangi derleyici ile çalışacağını sunucu ayarlarını yaparken söylenir. Örneğin; PHP dili için Windows sunucularına Extension Map bölümünden *.php olan yani tüm “PHP” uzantılı dosyaların php-cgi.exe veya ISAPI_PHP.dll gibi dosyalarından birini kuruluma göre vererek derlenmesini sağlarız. Biz bu kısım ile pek ilgilenmeyiz çünkü bu konular biz yazılımcıların değil Sistem uzmanlarının işleridir. Biz programımızı yazar sunucumuza yükleriz. Gerisi sistemcinin problemidir. :)

Neyse tekrar konumuza yoğunlaşacak olursak, bir değişkenin “$DegiskenAdi “şeklinde tanımlanacağını öğrendik. Bir değişkene değer vermek istersekte “$DegiskenAdi = Değeri” şeklinde, eşittir operatörünü kullanarak yapıyoruz. İleride Operatörler konusunu işleyeceğimizden şimdilik operatör nedir? Hangisi ne işe yarar? gibi sorulara takılmayın. Hepsini anlatacağım.

Not: Bir değişken oluşturduğumuzda ille değerini vermek zorunda değiliz. İleride de değişkene değer ataması yapabiliriz. Fakat boş bir kap ile yemek yapabilir miyiz? Değersiz değişken tanımlamakta mantıksız olacağında. Her değişkene bir değer atamalıyız. Bunu ilk oluşturduğumuz zaman yapmayı alışkanlık haline getirirsek çok iyi olur. Çünkü ileride iki, üç bin değil, yüz, yüzeli bin satırlık web uygulamaları yazabiliriz. Böyle bir uygulamada değersiz değişkenlerin bulunması programın hata vermesine sebep olabilir. Hazır değişkenlerin özelliklerinden bahsediyorken, Değişken tanımlama standartlarını da anlatayım.

Değişken Tanımlama Standartları;

  • ·İçine koyacağınız değer ile ilişkili olmalıdır. Örneğin; Ev Telefonu için; “$EvTel” veya “$evTel” şeklinde olabilir.
  • · Tanımlamada iki tür standart vardır. Biri baş harfleri büyük yazarak değişken adı oluşturma diğeri ise ilk değerin baş harfini küçük diğerininkini ise büyük yazmaktır. Yukarıda verdiğim örnekte olduğu gibidir.
  • · Aynı tür işlemde kullanacağınız değişkenleri bir arada ve ritmik olarak tanımlayabilirsiniz. Kendi kullandığım yönteme göre örnek verecek olursam. Örneğin; 3 cep telefonu değerini tutmak istiyorsak. “$CepTel1”; , “$CepTel2”, “$CepTel3” şeklinde yapabiliriz.
  • · Hazır bir değişken isminde rakam kullanmışken bunu da belirteyim. Değişkenler ASLA her hangi bir sayı ile başlayamazlar. Yani şu tanımlama geçersiz ve yanlıştır. Örn: “$2CepTel”
  • · Özel ifadeler içeren tanımlamalarda başına ilgili işlemin baş harfi büyük şekilde koyulur. Çok ileride göreceğiniz INTERFACE kavramında bir function(fonksiyon) tanımladığınızda bunu şu şekilde isimlendirmemiz gerekiyor. Örn: “IMyInterface” gibi. Buradaki “I” INTERFACE’den gelmektedir.

Şimdilik aklıma gelen önemli özellikler bunlardır. İnternet üzerinden araştırarak geniş bir bilgi edinebilirsiniz. Bende ilgili konulara geldikçe size SYNTAX hakkında bilgilerde vereceğim.

Bu ilk dersimiz olduğundan bir takım kavramları da açıkladığımızdan biraz uzun sürdü fakat konular ilerledikçe derslerdeki yazılar daha öz ve kodlar daha çoklaşacaktır.

Son olarak bu örneğin canlı halini görmek isterseniz: http://php.sql.tc/Basic/Degiskenler.phpx adresinden bakabilirsiniz.

Her ders sonunda yazdığımız programların kaynak kodlarına vereceğim bağlantılardan erişebilir ve çalışır halini görebilirsiniz. PHP’nin Basic kısmını bitirip Advanced PHP’ye geçtiğimizde ise tüm yaptığımız çalışmaları indirebileceğiniz bir link olarak size sunacağım.

Basic PHP = Basit giriş seviyesinde php eğitiminin verildiği bölüm demektir.

Advanced PHP = İleri seviye PHP programlama eğitiminin verildiği bölüm demektir.

Enterprise PHP = Bu eğitim ücretli olarak verilmektedir. Kurumsal uygulama geliştirmek için verilen özel eğitimdir. Design Pattern’lar ve ileri seviye kurumsal uygulama geliştirme anlatılmaktadır.

Saygılar,

Hakan DAMAR

 
No Comments

Posted in PHP

 

MySQL Server’daki Tabloları Listeleme

12 Oct

Merhaba Sevgili Okurlar,

 PHP ile kendi veri tabanımızdan farklı olarak tüm veri tabanlarınada erişmek isteyebiliriz. Bu bir exist check işlemi veya Server Management Application içinde istiyor olabiliriz.

Bunu PHP 5 ile nasıl yapılabileceğine dair bir örneği aşağıda sunuyorum.

Dosya Adı: MySQL.Object.php


<?php

#Developer = Hakan DAMAR

# Copyright Nets2 Informatic

/* My Blog:  http://tr.e-uzman.org/TukenmezDefter */

 

#MySQL Server Bağlantısı için gerekli değişkenler.

class MySQLServer {

private $_Server; 

private $UserName;

private $UserPass; 

private $DBName; 

protected $OtherPort; 

/* Test Kodu

protected  $ErrorSQL; 

protected  $ErrorDB;

*/

public function __construct() {

#Değişkenlerin Değerlerini Verdik.

// Bunları yukarıdaki değişkenlere eşitleyip Construct'a dışarıdanda setletebilirdik.

$this->_Server = "localhost";

$this->UserName = "root";

$this->UserPass = "2008hakan2008";

$this->DBName = "e_Uzman_Log";

$this->OtherPort = "3307"; //Default Port: 3306

/* Test Kodu

$this->ErrorSQL = "MySQL Server Bağlantısı Sağlanamıyor!";

$this->ErrorDB = "MySQL Server Bağlanıldı. Fakat, Veri Tabanına Ulaşılamadı!";

*/

}

 

public function myDB()

{

 try {

#MySQL Server Bağlantısı ve Veri Tabanı Seçimi.

$DBConn = mysql_connect($this->_Server,$this->UserName,$this->UserPass);

if (!$DBConn)

throw new Exception("MySQL Server Bağlantı Hatası! Lütfen, Sistem Yöneticiniz İle İletişime Geçiniz.");

}

catch (Exception $Hata) { die($Hata->getMessage()); }

 

#Bağlantı Sağlandıktan Sonra Log İçin Veri Tabanı Seçimi

try {

$SelectDB = mysql_select_db($this->DBName,$DBConn);

if (!$SelectDB)

throw new Exception("Veri Tabanı Sunucusunda İstenilen Veri Tabanı Bulunamadı!");

}

catch (Exception $Hata2) { die($Hata2->getMessage()); }

 

#MySQL Server'daki Tüm DB'leri Çekiyoruz.

$SQLQuery = mysql_list_dbs($DBConn);

 

#While ile dönerek tüm database'leri ekrana yazdırıyoruz. 

#Siz bunu isterseniz bir combobox'un içinede bastırabilirsiniz.

while ($goster = mysql_fetch_object($SQLQuery)) {

print "<font color='darkgreen'><b>Veri Tabanı Adı:</font></b> <u>". $goster->Database ."</u><br>";

}

#Veri Tabanı Bağlantısı Kesiliyor.

mysql_close($DBConn);

}

}

/* Ben işlemleri bu kadar tuttum fakat siz isterseniz yukarıda oluşturduğumuz "e_Uzman_Log" veri tabanına bir de

işlem başarıyla tamamlandığını gösteren bir log yazdırabilirsiniz. 

Kendi business'nıza göre farklı işlemlerde ekleyebilirsiniz.

*/

 

?>

 

2. Dosya Adı: WebForm.php

 

<?php

#Developer = Hakan DAMAR

# Copyright Nets2 Informatic

/* My Blog:  http://tr.e-uzman.org/TukenmezDefter */

 

#Diğer Sayfayı Ekledik

require("MySQL.Object.php");

 

#Yeni Bir Nesne Oluşturduk.

$Baglan = new MySQLServer();

 

#Objenin bir fonksiyonunu çağırdık.

$Baglan->myDB();

 

?>

 

WebForm.php’ye bir form yaparak bilgileri POST’latabilirsiniz. Eğer böyle bir panel sonucu list alacaksanız. __construct ‘ta bilgilerin karşılığını girmeyin kendi değişken adlarına eşitleyin. Bilgileri parametre olarak yazın ve WebForm’da yapacağınız form’dan aldığınız bilgileri buradan Nesneye setletiniz. Bir dahaki sefere o versiyonunuda yapacağım. 

Birde MySQL’e log yazdırmadım çok basit olduğundan ama bir sonraki versiyonda onuda orta seviye arkadaşlar için kodlayacağım. 

İyi Çalışmalar,

Hakan DAMAR

 
No Comments

Posted in PHP

 

PHP 5 Dosya İşlemleri

21 Aug

Merhaba Sevgili Okurlar,

PHP derslerinde anlatacağımdan şimdi burada ayrıntıya girmiyorum. PHP 5 ile dosya işlemlerini öğrenmek isteyen PHP bilenler için bir örnek yaptım. Aşağıdan inceleyebilirsiniz.


 	 	echo  "Kaptan, Tanımlanamayan Bir Cisim Yaklaşıyor.<br>";
 	 }
 	 $Okunabilir = is_readable($dosya);
// Dosyanın okunabilir olup olmadığı -
//Dosyayı salt okunur yaparak kontrol edebilirsiniz.
 	 $Yazilabilir = is_writable($dosya);
 // Yazılabilir olup-olmadığı.
 	 if ( $Okunabilir == true && $Yazilabilir == true ) {
// bool sonuç döndürdüğünden kontrolünü yapıyorum.
 	 	print "Bu Dosya Hem OKUNABİLİR Hemde YAZILABİLİRDİR!<br>";
// hem yazılabilir hemde okunabiliyorsa
 	 }
 	 elseif ( $Yazilabilir == true ) { // yazılabilir kontrolü
 	 	echo "Bu Dosya Sadece YAZILABİLİRDİR!<br>";
 	 }
 	 elseif ( $Okunabilir == true ) { // okunabilirlik kontrolü
 	 	echo "Bu Dosya Sadece OKUNABİLİRDİR!<br>";
 	 }
 	 else { // Bir cisim yaklaşıyor olayı :D
 	 	echo "Sonuç Bilinmiyor!<br>";
 	 }
 	 $HDDb = diskfreespace(@"D:")/1024;
// GB düzeyinde bilgi edinmek için bölüyoruz. Boş Disk alanı.
 	 $HDDd = disk_total_space(@"D:")/1024; // Dolu disk alanı
 	 print "Dolu HDD Alanı: " .$HDDd."<br>";
 	 echo "Boş HDD Alanı: " .$HDDb."<br>";
 	 echo "Dosya Konumu: ". $PHP_SELF;
 	 exit();
 	 // Son Kombinasyon.
 }
 else {
 	echo "Dosya Bulunamadı!<br>";
// Dosya bulunmazsa zaten yukarıdaki işlemlere girmeden else'e düşüyor.
 	// ileride artık ELSE'leri falan pek kullanmıycaz hata yönetimi için.
 	// Onun yerine try - catch ve throw kullanacağız.
 }
 ?>
 
No Comments

Posted in PHP

 

PHP Giriş

17 Aug

Merhaba Sevgili Okurlar,

PHP uzun zamandır kolaylığı ve esnekliği ile popüler olan fakat ticari yazılım ve lisanslama konularında da halen bir çare arayan bir dil olarak aramızda bulunmaktadır. Son yaptığı hamle ile daha üstün bir dil olan ASP.NET’i örnek almış olacak ki PHP 5 de Java’nın OOP yapısını bünyesine dahil etmiş. Artık PHP 5 ile C# veya Java’daki gibi try’lar catch’ler, public,private,protected class’lar v.s.’ler nesnel veri tabanı bağlantılarına kadar geniş bir yelpaze elimize verildi. Üzerine Zend firması bir de Zend Framework’ü çıkarttı. Artık PHP’yi de bilgi haznenize katmanızın zamanı geldi demek ki.

Aslında PHP 5 temeli ardından şu çok zor dediğimiz projeler üzerinden örnekler ile anlatmak içimden geliyor ama aramıza yeni katılmak isteyen arkadaşları da böyle bırakamayız. Bu yüzden ileride eğitiminde vermeyi planladığım dersleri alt seviyeden ileri seviyeye kadar yazacağım. Derslerin bir bölümünden sonra T-SQL’e oradan MySQL’e ve JavaScript’e değineceğiz ardından kısa bir Ajax öğrenip yola devam edeceğiz.

Son olarak belirtmek isterim Visual C#.NET dersleri ve ASP.NET derslerini de hazırladığımdan PHP derslerine ardı, ardına hızlı bir şekilde ulaşamayabilirsiniz. Fakat zaman buldukça devamını yazacağım. Bir de bazı arkadaşlar reklam yapmak istiyor diye algılayabilir fakat bulunduğunuz forumlara da bu bölümün link’ini verirseniz sevinirim. Böylece daha çok kişiye bu bilgiler ulaşabilir. Eğer para kazanma kaygısı içinde olduğumu düşünen arkadaşlar var ise siteyi şöyle bir gezip reklam olup olmadığına bir baksınlar ve sonra tekrar düşünsünler.

İyi Çalışmalar Diliyorum.

- Hakan DAMAR

 
No Comments

Posted in PHP

 

Mono Multi Page Hazırlama

14 Aug

Merhaba Sevgili Okurlar,

Bana eski blogumdan beri yöneltilen defalarca cevaplamama rağmen halen sorulan bir soruyu burada yanıtlayarak artık noktayı koymak istiyorum.

Nedir bu Mono Multi Page olayı? Madem mono nasıl multi :) İnternette çoğunuz rastlıyorsunuz sadece ortada bir index.php var. Ama  index.php/?sayfa=resimler gibi bir link ile ayrı sayfaları gösteriyor.

Bu basit bir $_GET[""]‘e parametre setleme ve Switch döngüsü ile yapılıyor.

<?php

ob_start();

$sayfa = $GET["sayfa"];
switch($sayfa) {
case "AnaSayfa":
// Yapılacak işlemler
include("AnaSayfa.php");
//veya header("Location:AnaSayfa.php");
break;
case "Resimler":
// yapılacak işlemler
require("Galeri.php");
break;
default :
header("Location:Hata.php");
break;
}

?>

Şimdi yukarıda şunları yaptık adımları ile;

  • URL’den gelecek sayfa adında bir değeri $sayfa değişkeninde tuttuk.
  • Switch ile bu değişkene verilebilecek değerleri ve verildiğinde yapılan işlemleri yazdık.
  • Daha sonra break; ile döngünden çıktık.
  • En alta bir değer vermedik. Çünkü o hiç bir koşul sağlanmazsa çalışacak kod blogudur. if..Else döngüsündeki else’e karşılık gelmektedir.
  • En başa ob_start(); kodunu kodların daha stabil çalışmasını sağlamak adına koyduk. Gereksiz kodları ayıklayarak daha hızlı çalışmasına ve header(); fonksiyonun içeride kullanıldığında hata vermemesini sağlıyor.
  • Kullanımı ise şöyle oluyor. Hakan.php diye kaydettiğimizi varsayarsak. Hakan.php?sayfa=Resimler dediğimizde Galeri.php sayfasına erişeceğiz.

Umarım artık anlaşılmıştır MMP olayı.

Başarılar Diliyorum.

Hakan DAMAR

 
No Comments

Posted in PHP