Fonksiyon Hazırlamak

PHP içerisinde birçok fonksiyon barındırır. Bu fonksiyonların bir kısmı kendiliğinden gelir, bir kısmı ise php.ini dosyasından belirteceğiniz modüllerle kullanılabilir hale gelir. Örneğin strtolower() fonksiyonu her php dosyasının çalıştırabileceği bir fonksiyon iken imagecreatefromjpeg() fonksiyonu yalnız php_gd2.dll kütüphanesinin dahili ile çalıştırılabilir.

Ayrıca php kodlaması yapan kişi yani programcı da kendine özgü fonksiyonlar yazabilir. Bunun için php dosyamızın içerisinde fonksiyon kodlarına yer verebileceğimiz gibi include() ya da require() ile fonksiyonların bulunduğu bir dosyadan da veri çekebiliriz.

Burada fonksiyon adından sonra gelen parantezle belirttiğimiz değişkenler olmasa da olur. Fakat her durumda parantez açılır ve kapanır YeniFonksiyon() şeklinde. Eğer bir değişken için varsayılan bir değer belirtmek istersek bunu == operatörü ile yaparız:

Yukarıdaki kodda görüldüğü üzere fonksiyonda ilk değişkeni kullanmak zorunludur, fakat ikinci değişken olan $neresi kullanılmasa da olur. Bu durumda ‘Merkez’ adını alacaktır. Bu değişkenler her durumda fonksiyon içinde kullanılacaktır. Değişkenlerin aralarına virgül (,) koymayı unutmamak gerek.

Fonksiyon içerisindeki her değişken, genel değişkenlerden bağımsız hareket etmektedir. Yani eğer fonksiyon dışındaki php belgemizde $degisken kullanıldıysa ve değer içeriyorsa, fonksiyon içinde bu değişken işlev görmez ve undefined (tanımsız) olarak görülür. Bunu engelleyip genel değişkeni fonksiyona dahil etmek için global komutunu kullanırız.

Her fonksiyon return (veri); şeklinde geri döner. Buradan dönen veri mantıksal (true, false), alfasayısal, sayısal ya da dize değer taşıyabilir.

Şimdi öğrendiklerimizi uygulayacağımız bir php fonksiyonu yazalım. Örneğin yazacağımız fonksiyon bir cümlede geçen her kelimenin baş harfini büyütsün ve bize versin.

Bu örnekte fonksiyonun görevi öncelikle tüm boşluk ( ) işaretlerine bakarak yeni bir dize oluşturmak ve böylece kelimeleri ayırmak. Daha sonraki işlem kelimelerin ilk harfini ayrı ayrı büyütmek ve son olarak işlenmiş halini göndermek.

Bir sonraki konuda görüşmek dileklerimizle…

AJAX Kullanarak Veri Almak

Bu makalemizde HTML, PHP, AJAX ve MySQL ortak çalışması sonucu anlık yanıt veren bir sayfa tasarlamayı öğrenelim. Bunun için verdiğimiz harf ya da kelime ile başlayan veritabanında kayıtlı isimleri bize listeleyen bir öneri kutusu yapmaya ne dersiniz? Böylelikle Ajax’ı yakından inceleme fırsatı bulacağız.

Öncelikle verilerimizi alacağımız bir veritabanı ve çeşitli kayıtlar oluşturuyoruz:

CREATE TABLE `ajax_veri` (
`id` int(5) unsigned NOT NULL auto_increment,
`isim` varchar(45) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

INSERT INTO `ajax_veri` VALUES("1", "Ali");
INSERT INTO `ajax_veri` VALUES("2", "Veli");
INSERT INTO `ajax_veri` VALUES("3", "Cavit");
INSERT INTO `ajax_veri` VALUES("4", "Cavidan");
INSERT INTO `ajax_veri` VALUES("5", "Alara");

ajax_veri adını taşıyan bu tabloya ilk etapta 5 isim yükledik. Şimdi verilerimizi almamıza yarayacak bir PHP dosyası yazmalıyız. Bunu yaparken verilerin GET metoduyla alınmasını sağlamalıyız. Bu dosyamızın ismini ornek.php yapalım. İçerisinde ise ornek.php?kelime=A şeklinde eklendiğinde o harfle ilgili verileri bize listelemesini sağlayalım:

 0 ) {
   $kelime = strtolower( str_replace( "'", "\'", $_GET['kelime'] ) );
   mysql_connect('localhost', 'user', 'pass');
   mysql_select_db('ajax_veri');
   $sorgu = mysql_query( "SELECT * FROM ajax_veri WHERE isim LIKE '" . $kelime . "%';" );
   if ( !$sorgu || mysql_num_rows( $sorgu ) == 0 )
      echo '---';
   else
   {
      while( $kayit = mysql_fetch_array( $sorgu ) )
      echo $kayit['isim'] . ',';
   }
   mysql_close();
}
else
   echo '---';
?>

Buradaki veritabanı bağlantı için gerekli host, kullanıcı ve şifreyi değiştirmeyi unutmayın. Kullandığımız strlen() en az 1 karakter için sorgu yapılmasını sağlamak için. strtolower() ise gelen veriyi tamamen küçük harfe çevirip sorgulamamızı sağlar. str_replace ile üst ayraçlara güvenlik önlemi olarak taksim ekledik. Diğer kısımlar daha önceki yazımda MySQL bağlantısı kısmında anlatılanlardan farklı değil.

PHP dosyamızı yarattıktan sonra sıra HTML dosyamızı ve JavaScript’imizi oluşturmaya geliyor.


Ajax Ornek




Oneriler:

Bu şekil hazırladığımız HTML belgemizde txt1 ismini taşıyan kutucuğumuzda herhangi bir karakter yazıldığında ipucuGoster() fonksiyonunun çalışmasını sağlarız. Üst tarafta ornek.js ye link verdik. Böylelikle son işlem olarak javascript dosyamızı hazırlamaya geldik. “ornek.js” olarak adlandıracağımız bu dosyaya şunlar yazılmalı: 1. Bölüm XMLHTTP objemizi seçmek.

function GetXmlHttpObject()
{
   var xmlHttp=null;
   try { xmlHttp=new XMLHttpRequest(); }
   catch (e) {
      try { xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); }
      catch (e) { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); }
   }
   return xmlHttp;
}

Bu fonksiyon bize tarayıcının uyumluluğunu denetleme şansı verir. Dönen değer null ise Ajax desteği yok demektir. 2. Kısım ise İşlevselliği sağlayacaktır:

var xmlHttp
function ipucuGoster( str )
{
   if ( str.length == 0 )
   {
      document.getElementById("ipucu").innerHTML="";
      return;
   }
   xmlHttp = GetXmlHttpObject();
   if ( xmlHttp == null )
   {
      alert ("Tarayiciniz AJAX destekli degil!");
      return;
   }

   var url="ornek.php";
   url = url + "?kelime=" + str;
   url = url + "&sid=" + Math.random();

   xmlHttp.onreadystatechange=stateChanged;
   xmlHttp.open("GET", url, true);
   xmlHttp.send( null );
}
function stateChanged()
{
   if ( xmlHttp.readyState == 4 )
      document.getElementById("ipucu").innerHTML=xmlHttp.responseText;
}

Burada “xmlHttp” bir değişken olup 1. kısımdaki fonksiyonun bize verdiği cevaptır. Cevap olumluysa belirtilen url açılarak (belirtilen kriterlerle) veri alınır ve “id” özelliği “ipucu” olan yere yazılır. Bu işlem her kelime eklendiğinde yazılır. “readyState == 4” bize işlem tamamlandıktan sonra yapılacakları bildirir. Dikkatinizi çektiyse ornek.php’nin sonuna bir SID= eklemesi yaptık. Bunun nedeni bize hep aynı bilgiyi göndermemesini sağlamak yani sürekli güncel olarak veriyi almak. Bunu header() de dosyanın sürekli eski tarihli olmasını sağlayarak da yapabiliriz.

Farklı örnekleri yine yorumlamak dileklerimizle…

str_replace() Kullanımı

Bu komut PHP dilinde, bir değişken ya da yazılan bir metindeki istediğimiz değişiklikleri yapmamızı sağlar. Nasıl kullanıldığı hakkında bir fikir vermesi açısından değişkenleri ile birlikte bu php komutunu tanıyalım.

$degisken = str_replace( 'degisecek', 'yerine konulacak', 'metin' );

Buradaki değişken, metnin tüm değişiklikler yapılmış halini içerecektir. Metin bir değişkenden oluşabilir. Daha iyi anlamak için aşağıdaki örneği inceleyin:

$degisken = 'Bu site html dili ile yazıldı.'
$degismis = str_replace( 'html dili', '<b>html dili</b>', $degisken );

Böylece metindeki “html dili” yazan yeri kalın olarak gösterdik. Değişecek ve yerine konulacak bölümlerinde dize değeri kullanabilirsiniz. Bunu şu şekilde örnekleyelim:

$metin = 'Bu site html ile yazıldı, php ve asp ile yazılmadı.';
$bul = array('html', 'php', 'asp');
$degistir = array('html dili', 'php dili', 'asp dili');
$degistirilmis = str_replace( $bul, $degistir, $metin );

‘degistirilmis’ adlı değişkeni ekrana yazdırdığımızda metnin “Bu site html dili ile yazıldı, php dili ve asp dili ile yazılmadı.” olarak değiştirildiğini göreceğiz. Unutmadan söyleyelim burada yapılan değişiklikler büyük-küçük harf fark etmektedir. Buna strtolower() ya da strtoupper() ile engel olabilirsiniz..

MySQL Bağlantısı Yapmak

Bu yazımızda MySQL veritabanına ASP ve PHP’de nasıl bağlantı sağlanacağımızı ve veri çekebileceğimizi öğreneceğiz. Öncelikle ASP ile başlayalım. ASP’de bir MySQL bağlantısı için ADODB objesinden yararlanırız.

Set Baglanti = Server.CreateObject("ADODB.Connection")
Baglanti.Open "Driver={MySQL ODBC 3.51 Driver};Server=sunucu_adres;Database=db_adi;Port=3306;Uid=kullanici;Password=sifre;"

Set Kayitlar = Baglanti.Execute( "SELECT * FROM tablo_adi ORDER BY id DESC LIMIT 0, 10;" )
Do While Not Kayitlar.Eof
Response.Write Kayitlar("alinacak_veri") + "<br>"
Kayitlar.MoveNext
Loop

Baglanti.Close

Yukarıda geçen “Baglanti” ve “Kayitlar” birer değişken olup. Biri bize bağlantımız hakkında bilgi verir, diğeri ise Baglanti.Execute() ile istediğimiz kayıtları barındırır. Bağlantıyı Baglanti.Close() ile kapatmayı unutmayın. Yukarıda yer alan Kayitlar.EOF bir mantıksal değer olup ancak kayıt listelemeleri bittikten sonra true (doğru) karşılığını verir. Kayitlar.MoveNext ise bir sonraki kaydı istemek için kullanacağımız koddur. Yukarıda bağlantıyı sağlarken kullanılan sunucu_adresi, db_adi, kullanıcı, şifre bilgilerini doğru yazmazsanız bağlantı sağlanamaz. Bunlar MySQL’e bağlantı için gereklidir.

Peki PHP’de MySQL’e nasıl bağlanırız? Yukarıda yazdığımız ASP kodunu birebir PHP’ye dönüştürecek olursak aşağıdaki gibi bir kodlamaya gideriz.

mysql_connect('sunucu_adresi','kullanici','sifre');
mysql_select_db('db_adi');

$sorgu = mysql_query( "SELECT * FROM tablo_adi ORDER BY id DESC LIMIT 0, 10;" );
while( $kayitlar = mysql_fetch_array( $sorgu ) )
echo $kayitlar['alinacak_veri'] . '<br>';

mysql_close();

Yukarıda göreceğimiz gibi bağlantımızı mysql_connect() ile sağlıyoruz. Parantez içine sırasıyla sunucu adresi, kullanıcı adı ve şifresi yazılır. mysql_select_db() ile hangi veritabanını kullanacağımızı seçtikten sonra bağlantıyı sağlamış oluruz. Eğer birden fazla veritabanı ile işlem yapacaksanız mysql_select_db’den sonra bir de bağlantı için atayacağınız bir değişken kullanmalısınız.

Sorgu cümlemizi mysql_query() komutuyla yazdıktan sonra kayıtları mysql_fetch_array ya da mysql_fetch_assoc ile alırız. Sıralama için kolaylık olması açısından while() döngüsü kullandık. Burada başka bir değişken olarak kayıtların depolanacağı arraylist (dize) yi belirttik ($kayitlar) ve finalde mysql_close() ile veritabanı bağlantısını kapattık.

(NOT: Bir PHP belgesi mutlaka “<?” ile başlar ve “?>” ile biterken, ASP belgesi “<%” ile başlar ve”%>” ile biter. Kodlar ile ilgili alıştırma yaparken bunu dikkate almayı unutmayın.

PHP’de Tarih ve Saat

Bir php dosyasında tarih ve saat bilgisini time() komutu ile alırız. Bu kod normalde bize 1970 yılından bu yana kaç saniye geçmiş bu bilgiyi verir. Örneğin 1227994453 bu komutla alabileceğimiz bir bilgi. Bunu anlamlı hale getirmemize yarayan kod ise date( ‘ayarlar’, zaman ); komutu. Ayarlar bölümünde geçen d günü, m ayı, Y yılı, G saati, i dakikayı ve s saniyeyi gösterir. Şimdi time komutunun yardımıyla tarihi yazdıralım:

echo date( 'd/m/Y G:i:s', time() );

Bu komutu çalıştırdığımızda 29/11/2008 23:37:11 gibi bir veriyi ekrana yazdırdığını görüyoruz. Ayarlar bölümünde değişiklik yaparak istediğimiz şekilde görünmesini sağlayabiliriz. Hatta sadece G:i kullanarak saati ya da d-m-Y kullanarak tarihi görüntüleyebiliriz.

Peki Türkçe olarak 29 Kasım 2008 Cumartesi nasıl yazdırabiliriz? Bunun için bir dize oluşturup veriyi almamız gereklidir. Bir örnekle gösterecek olursak.

$gunler = array('Pazar','Pazartesi','Salı','Çarşamba','Perşembe','Cuma','Cumartesi');
echo 'Bugün günlerden ' . $gunler[ date('w',time()) ];

Çalıştırdığımızda Bugün günlerden Cumartesi yazdığını görürüz. Burada kullandığımız w ayarlaması bize 0-6 arasında bir sayı verir. 0 = Pazar, 6 = Cumartesi şeklindedir. Gelen veriyi dizemizde kullanarak Türkçeye çevirdik.

Bazen sunucunun yerel saatine bağlı olarak time() komutu bulunduğunuz yere göre farklı saat verebilir. Buna engel olmak için php.ini dosyasını php’den değiştirmemiz yeterlidir. Örneğin Amerika lokasyonlu bir sunucudaysanız Türkiye saatine göre time() yi görebilmek için aşağıdaki kullanılmalı:

ini_set( 'date.timezone', 'Europe/Istanbul' );

Böylece tüm zaman ayarlarımız kendi saatimize göre ayarlanmış olacaktır.