Form Đşlemleri PHP-1 1

Ebat: px
Şu sayfadan göstermeyi başlat:

Download "Form Đşlemleri PHP-1 1"

Transkript

1 Form Đşlemleri PHP yi dinamik sayfa hazırlama işlemlerinin bütünü olarak düşünürsek, formlar için de bu bütünün kalbi diyebiliriz. Dinamik içeriğe sahip bir site hazırlamanın ilk adımı, kullanıcı katılımını sağlamaktır. Bu bir üyelik formu olabilir, sipariş formu olabilir, veya bir ziyaretçi defterine kayıt formu olabilir. Her durumda, PHP ile bu bilgileri alıp, işleyip, istediğimiz hale getirebilmek için, önce bu bilgileri formlar aracılığı ile kullanıcıdan almamız, sonra da bu bilgileri PHP ye göndermemiz gerekir. Kullanıcımızdan adını ve soyadını öğrenip, ona özel bir merhaba mesajı yazdıracağımız bir örnekle başlayalım: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>form Alıştırması</title> <meta http-equiv="content-type" content="text/html; charset=iso "> <meta http-equiv="content-type" content="text/html; charset=windows-1254"> </head> <body> <? if ($islem == 1):?> Merhaba <b><? echo ucfirst($ad). " ". ucfirst($soyad)?></b>,<br> Sizinle tanıştığıma çok memnun oldum. </body> </html> <? exit;?> <? endif;?> <form action="form.php" method="post"> <input type="hidden" name="islem" value="1"> Siteme hoşgeldiniz, sizi tanıyabilir miyim? <table> <td>adınız:</td> <td><input type="text" name="ad"></td> <td>soyadınız:</td> <td><input type="text" name="soyad"></td> <td> </td> PHP-1 1

2 <td><input type="submit" value="tanışalım"></td> </table> </form> </body> </html> Bu dosyayı form.php adıyla kaydedin. If komutunun kullanım şekline dikkat edin. PHP nin, özellikle Perl den ayrıldığı en önemli nokta bu, PHP kodlarıyla HTML kodlarını kolayca birbirlerinden ayırabilirsiniz. Bu kullanım biçimi en çok grup çalışmalarında faydalı olacaktır, siz sadece PHP kodu ile ilgilenirken, arkadaşınız da sadece HTML kodunu hazırlayabilir, böylece çok daha hızlı çalışabilirsiniz. Đkinci komut ucfirst();, $ad ve $soyad değişkenlerinin ekrana yazılırken ilk harflerinin büyük yazılmasını sağlıyor. Programın çalışma şeklini özetleyelim. Önce hazırladığınız programı tarayıcınızda adresini yazarak çalıştırın. PHP kodu atlanacak ve karşınıza kullanıcının adını ve soyadını soran form gelecektir. PHP kodunun atlanmasının nedeni, henüz form çalıştırılmadığı için, $islem değişkeninin var olmamasıdır. $islem değişkeninin yaratılmasını, forma eklediğimiz bir hidden yani gizli alan aracılığıyla sağlıyoruz. Böylece kullanıcı form bilgilerini gönderirken, farkında olmadan bize $islem değişkenini de gönderecektir. Kullanıcı Tanışalım butonuna bastığında, form bilgileri, $islem değişkeni ile birlikte kullanıcının tarayıcısından bizim sunucumuza gönderilecek ve PHP tarafından otomatik olarak değişken haline getirilecektir. Biz de bu bilgileri kullanarak kullanıcının ekranına merhaba mesajını yazdırıyoruz. Dikkat etmeniz gereken başka bir nokta, exit() komutunu kullanmanız gerektiğidir, eğer bu komutu eklemezsek, kullanıcıya merhaba mesajı gönderildikten sonra, ilk ekrandaki form bu mesajın altında tekrar gösterilir. Formda Dizi-Değişken (Array) Kullanımı Kimi zaman kullanıcının aynı alanda birden fazla seçim yapmasını sağlamak isteyebiliriz. Örneğin, bir form aracılığı ile kullanıcımızın hangi meyveleri sevdiğini öğrenmek istiyoruz. Ziyaretçimiz tek bir meyve seçecek olsaydı, yukarıdaki örneğimiz bu iş için yeterli olurdu, ama onu daha yakından tanıyabilmemiz için kesinlikle yeterli olmazdı! Bir örnek vererek sorunumuzu daha iyi tanımlayalım: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>form Alıştırması - 2</title> <meta http-equiv="content-type" content="text/html; charset=iso "> <meta http-equiv="content-type" content="text/html; charset=windows-1254"> </head> <body> <p>sevdiğiniz meyveler: <? PHP-1 2

3 if (isset($islem)) /* $islem değişkeni varsa form bilgileri işlenir değişken yoksa sadece form gösterilir */ /* Dizi-değişkendeki eleman sayısını bulalım */ $eleman_sayisi = count($meyve); /* Elemanları listeleyecek döngüyü kuralım */ for ($idx = 0; $idx < $eleman_sayisi; ++$idx) echo "<b> $meyve[$idx] </b>\n"; /* Formun geri kalanının gösterilmemesi için exit komutunu kullaniyoruz */ exit;?> <p>lütfen aşağıdaki listeden sevdiğiniz meyveleri seçin.<br> Bir'den fazla seçim yapmak için seçiminizi kontrol tuşuna basılı tutarak yapın.</p> <form action="form2.php" method="post"> <input type="hidden" name="islem" value="1"> <table> <td valign="top">meyveler: </td> <td> <select name="meyve[]" size="5" multiple> <option value="elma" SELECTED>Elma</option> <option value="çilek">çilek</option> <option value="muz">muz</option> <option value="portakal">portakal</option> <option value="erik">erik</option> </select> </td> <td> </td> <td><input type="submit" value="seçtim Bile"></td> </table> PHP-1 3

4 </form> </body> </html> Bu örneği form2.php olarak kaydedebilirsiniz. Formdaki bilgileri bir dizi-değişkene aktarmak için, select kutusunun name özelliğinin sonuna [] ekliyoruz, böylece form gönderildiğinde o alanın dizi-değişken olarak tanınmasını sağlıyoruz. Formumuz gönderildiğinde PHP otomatik olarak dizi-değişkeni oluşturuyor. Dizideğişkenlerin kullanımı ile ilgili örnekleri ilerki örneklerde bulabilirsiniz, burada dizideğişkenimizi döngü içine soktuk ve içindeki bütün elemanları listeledik. Formları Ziyaretçi Defteri programımızda da sıkça kullanacağız. PHP ve HTML in Birbirlerinden Ayrılması PHP nin en önemli özelliklerinden birisinin HTML in içine gömülebilmesi olduğunu daha önce belirtmiştik. Bu sayede PHP yi sadece ihtiyacımız olduğu yerde kullanıyor, geri kalan bölümleri HTML olarak tamamlayabiliyoruz. Peki siz bu ayrımdan alabileceğiniz bütün verimi alabiliyor musunuz? PHP ile HTML i ayırmaktaki en büyük amacımız, kodlamayı daha hızlı yapabilmek, ve kodlamamız sona erdiğinde elde ettiğimiz kodun daha anlaşılır kılabilmektir. Bu konuyu örneklerle açalım: Đlk örnekte, veritabanından aldığımız bilgileri ekrana yazdıracağız. Bu örnekleri anlatırken kitapçıkta anlatıldığı şekilde veritabanımızı yarattığınızı varsayıyorum. Eğer yaratmadıysanız, Veritabanı nın Yaratılması bölümündeki bilgilerden faydalanabilirsiniz. Veritabanı basit bir telefon fihristinin içerdiği bilgileri içeriyor, yapı olarak da aşağıdaki alanlara sahip: id -> INT (Primary Key, Unique, Index) isim -> VARCHAR (50) telefon -> VARCHAR (15) eposta -> VARCHAR (100) Amacımız veritabanındaki bilgileri ekrana yazdırmak olduğu için veri girişi üzerinde durmayacağız, veritabanındaki mevcut kayıtları kullanacağız. Aşağıdaki örnekte, önce veritabanına bağlanılıyor, veriler alınıyor, ve ekrana tablo halinde yazdırılıyor: <!- htmlayir.php dosyası --> <?php /* Veritabanına bağlantı kuruluyor */ $baglanti = mysql_connect("localhost"); /* SQL kodu hazırlanıyor */ $strsql = "SELECT * FROM htmlayir"; /* Sorgulama yapılıyor */ $sonuc = mysql_db_query("kitapcik",$strsql,$baglanti); /* MySQL veritabanı sorgulandı ve sonuç hafızaya alındı?> Elde ettiğimiz bu bilgileri daha sonra tablomuzun içinde gerekli olan yerlere yerleştireceğiz */ PHP-1 4

5 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>php-html Ayırma Alıştırması</title> <meta http-equiv="content-type" content="text/html; charset=iso "> <meta http-equiv="content-type" content="text/html; charset=windows-1254"> </head> <body> <p>listenizdeki isimler:</p> <table> <td>đsim</td> <td>telefon</td> <td>e-posta</td> <?php /* Verilerimizi yazdırmaya başlamadan önce tablomuzun ilk satırını?> başlık olacak biçimde yarattık. Bu satırdan sonra bir döngü oluşturarak elimizdeki bütün verileri ekrana yazdırmış olacağız. while komutunun kullanımına dikkat edin, : işareti ile sonlandırıp PHPnin döngü içinde olduğunu unutmamasını sağlıyoruz. */ <? while ($satir = mysql_fetch_array($sonuc)):?> <td><? echo $satir[isim]?></td> <td><? echo $satir[telefon]?></td> <td><? echo $satir[eposta]?></td> <? endwhile?> </table> </body> </html> Echo komutu ile, PHP ile HTML kodunu yaratmış olursunuz. HTML e ait hiçbir etiketi PHP kodu içersinde kullanmak zorunda değilsiniz, PHP komutlarını ve değişkenlerini kullanacağınız zamanlar dışında her zaman HTML kullanabilirsiniz, ve kullanın da. Yukarıdaki örneği daha iyi anlamak için, tarayıcınızın yardımıyla kaynak kodlarına bakın. Bütün gördüğünüz HTML kodundan ibaret olacaktır. Demek ki, PHP ile HTML kodunu yazdırmakla, direk HTML kodunu kullanmak arasında hiçbir fark yok, o zaman neden HTML PHP-1 5

6 kodlarımızı echo ların, print lerin arasına sıkıştırarak kafamızı karıştıralım? PHP de ustalaşmaya başladıkça, PHP nin en büyük özelliklerinden biri olan Nesne-Yönelimli Programlama (Object-Oriented Programming) ile tanışacaksınız. Programlarınızı PHP ile HTML i ayırmaya özen göstererek hazırlarsanız, ileride OOP ye alışmanız da kolaylaşmış olur. Yukarıdaki örnek sadece while komutunu içeriyor, fakat : ile döngülerin bölünmesi sadece while komutuna özgü değil, diğer döngüler için de örnekler verelim: <?php /* Đçinde dolaşabileceğimiz bir dizi-değişken (array) yaratalım */ $ulkeler = array ("Türkiye","Fransa","Đngiltere","ABD"); /* Bu dizi-değişkenin içinde değişik döngülerle dolaşalım */?> <h3>for döngüsü ile ülkeler listesi<hr></h3> <table> <? for ($idx = 0;$idx < count($ulkeler);$idx++):?> <td><? echo $ulkeler[$idx]?></td> <? endfor?> </table> <h3>while döngüsü ile ülkeler listesi<hr></h3> <table> <? $idx = 0?> <? while ($idx < count($ulkeler)):?> <td><? echo $ulkeler[$idx]?></td> <? $idx++?> <? endwhile?> </table> <h3>rasgele bir ülke seçip If ile yazdıralım<hr></h3> <? /* Programı her çalıştırdığınızda farklı bir ülke seçilecek! */?> <? $sayi = time() % 4?> Rasgele Ülke: <? If ($sayi == "0"):?> Türkiye! <? Elseif ($sayi == "1"):?> Fransa! <? Elseif ($sayi == "2"):?> PHP-1 6

7 Đngiltere! <? Else:?> ABD! <? endif?> PHP nin içine HTML kodu yazarken bir kez daha düşünün, PHP ile HTML i birbirlerinden ayırarak her zaman daha hızlı, daha anlaşılır ve daha kolay güncellenebilir programlar yaratabilirsiniz! PHP de Program Denetimi Geçen ayki kitapçığımızda, PHP ile program denetiminden bahsetmiştik. Bu ayki bölümümüzde, bütün programların iskeletlerini oluşturan bu komutları daha detaylı ele alacak ve örnekler vererek açıklayacağız. If If, karar verme tümceleri içinde en sık kullanılanıdır. Adından da anlaşılacağı gibi bir durum olguyu karşılaştırma yapmak ve bunun sonucunda yapılacak işleme karar verilmesi için kullanılır. Kullanım düzeni şu şekildedir : if ( ifade ) komut Bu belirtimde eğer ifademiz gerçeklenirse, sonuç olarak "doğru" ( true ) döneceği için komut işlenir ama ifademiz gerçeklenmezse altındaki komut atlanır ve işlenmez. Örnek : if ( $a>$b ) print " a sayısı b sayısından büyüktür "; Yukarıdaki örnekte eğer, a sayısı b sayısından büyükse print fonksiyonunun yanındaki yazı ekrana çıktı olarak gönderilir. Çıktı olarak da ekranda "a sayısı b sayısından büyüktür " ifadesi görülür ( mesela a=5 ve b=3 ise ), değilse print komutu göz ardı edilir, ekrana hiç bir şey yazılmaz ve alttaki işlem bloğuna geçilir. Genelde bir if bloğunun içerisinde bu kadar basit işlemler olduğu gibi kısmen daha karmaşık işlemler de yapılabilir. Örnek vermek gerekirse: if ( $a > $b ) print " a sayısı b sayısından büyüktür "; $b = $a ; Bu kod parçacığında yukari örnekten farklı olarak son satırda b değişkeninin değerinin a değişkeninin değerine eşitlenmesi söz konusudur. Genelde karar verme cümleciklerinde tek bir durum gerçeklenmez aksine başka alternatif bir durum gerçeklenirse, programın ya da yazılan kod parçasının başka bir komut işlemesi istenir. PHP-1 7

8 Bu tür durumlarda if-else karar verme mekanizması tercih edilir. If tümcesinin içindeki ifade eğer yanlış( false ) değerini döndürürse program parçacığı bunun altındaki komutu işlemek yerine derhal else tümcesinin altındaki komutu işler. Kısaca bu fonksiyon, " eğer bu doğruysa şunu yap, değilse bunu yap " şeklinde özetlenebilir. if ( $a > $b ) print " a sayısı b sayısından büyüktür "; else print " a sayısı b sayısından büyük değildir "; Else tümcesi sadece, if tümcesinin ifade kısmı yanlış( false ) değeri döndürdüğü zaman işlenir. Yukarıdaki örnekte eğer a sayısı b sayısından büyük değilse if tümcesinin ifadesi yanlış değerini döndürecek ve else tümcesinin komutu işlenerek ekrana " a sayısı b sayısından büyük değildir " basılacaktır. Switch Switch tümcesi bir seri if tümcesinin yerini tutmak için kullanılır. Değişkenin tüm değerleri için durumlar kontrol edilir ve durum altındaki komutlar işlenir. Kullanımı şu şekildedir : switch ( değişken ) durum1 komut ; durum2 komut; durum3 komut; Değişkenin birinci durumu kontrol edilir ve doğru ise bu komut bloğu işlenir, dikkat edilmesi gereken, eğer her durumdan sonra işlenen komutların sonuna herhangi bir durdurucu tümce ya da atlayıcı tümce kullanılmazsa program bütün komutları işler.örnek olarak : switch ( $i ) case 0: print "i değişkeninin değeri 0 dır "; break; case 1: print "i değişkeninin değeri 1 dir "; break; case 2: print "i değişkeninin değeri 2 dir "; break; default: print "i değişkeninin değeri bilinmiyor"; Yukarıda i değişkeninin değeri 0, 1 ya da 2 ise ekrana değişkenin değerini belirten cümlelelerden biri basılır ve program bloğu sonlandırılır. Eğer değişken değeri, 3 ise ya da belirtilen değerlerden hiçbiri değil ise komutların hepsi göz ardı edilir ve varsayılan olan koşul (default) işlenir. PHP-1 8

9 For For döngüsü temelde while döngüsüne çok benzemesine rağmen içinde birden fazla ifade barındırır ve bu ifadelerin herbiri altındaki komutların işlenmesini bağlar. Kullanımı şu şekildedir : for ( ifade1 ; ifade2 ; ifade3 ) komut Örnek : for ( $i = 1 ; $i <= 10 ; $i++ ) print $i; Yukarıdaki örnekte ilk önce i değişkeni 1 e eşitlenir ve daha sonra 10 dan küçüklüğü test edilir eğer küçükse altındaki komut işlenir ve ekrana i değişkeninin değeri basılır ( ki ekrana ilk önce 1 basılır ). Ardından, tümcenin içindeki üçüncü ifade işlenir, i değişkeninin değeri 1 arttırılır ve program tekrar ikinci ifadeyi kontrol eder. Döngü ikinci ifade yanlış( false ) değeri dönene kadar sürer. Böylece ekrana 1 den 11 e kadar olan sayılar basılmış olur. While Bu tümce genelde tekrarlı bir ifadenin belli bir noktaya kadar işlenmesi ve o noktaya gelindiği anda döngüden çıkılması amacı ile kullanılır. Kullanımı şu şekildedir : while ( ifade ) komut; While tümcesinin ifadesi doğru olduğu müddetce komut işlenir yanlış olduğu zaman program bir alt program bloğuna geçer.örnek : $i = 1; while ( $i <= 10 ) print $i; $i++; Yukarıdaki program parçasında ilk önce i değişkeni 1 e eşitlenmiştir. Daha sonra i değişkeni while tümcesinin ifade kısmında 10 dan küçük olup olmadığı konusunda sorgulanmış ve eğer küçükse (ki bu durumda öyle) ekrana i değişkeninin değeri basılmış ve ( ki bu durumda 1 basılmıştır ) i değişkeninin değeri 1 arttırılmıştır. Bu aşamadan sonra program döngünün en başına dönerek ifade kısmını tekrar kontrol eder ve komut kısmını işler. i değişkeni 11 olana kadar ekrana i değişkeninin değerlerini basar, değişken 11 olduğu anda while tümcesinin ifade kısmı yanlış( false ) döndüreceği için döngüden çıkılır ( ekrana 11 basılmaz ). PHP ve Include kullanımı Include ve require fonksiyonları belirtilen dosyadan kod okumaya ve onu çalıştırmaya yarar. Özellikle kod tekrarını önlemek ve kısmen güvenlik amaçlı kullanılır. PHP' nin yeni versiyonu olan PHP4' te require fonksiyonunun bütün işlevleri include fonksiyonuna yüklendiği için artık bu fonksiyonun kullanılmasının bir esprisi kalmamıştır. Include fonksiyonu aynı kod parçasını bir kaç kere kullanmamız gerektiği bir PHP-1 9

10 durumda kullanılması mantıklı bir fonksiyondur. Örnek vermek gerekirse, bir MySQL veritabanına bağlantı gerektiren bir program düşünelim. Bu program MySQL tablolarından veri okuyacak, yazacak ve değiştirecektir. Her bir bağlantı için temelde gerekli olan kod parçacığı aşağıdaki gibidir. veritabani_baglanti.php dosyası mysql_connect("localhost","kullanici_adi","kullanici_sifresi"); $query = "select * from kullanicilar"; $result = mysql_db_query("localhost",$query); Dikkat edildi ise veritabanına bağlantı için her seferinde kullanıcı adı ve şifrenin ilk satırda verilmesi gereklidir. Bu, güvenlik açısından bir sorun teşkil ettiği gibi kodun tekrar kullanımı ve değiştirilmesi açısından hiç de etkin bir kullanım şekli değildir. Düşünelim ki bu program için kullanılan veritabanının kullanıcı adı ve şifresi değişti. Program içersinde her bağlantı için yeni teker teker yeni şifre ve kullanıcı adını girmek hiç de pratik bir yaklaşım değildir. Aynı uygulamayı bir başka şekilde ele alalım. Đki prensip arasındaki temel fark, veritabanı bağlantısı için gerekli kullanıcı adı ve şifre gibi bilgileri bir başka dosyada tutmak ve bu bilgilere ihtiyaç duyan bağlantıda ise ilgili değişkenleri kullanmak şeklindedir. veritabani_bilgileri.php dosyasi <? $kullanici_adi = "dbuser"; $kullanici_sifresi = "12345"; $sunucu_adi = "localhost";?> veritabani_baglanti.php dosyasi include ("veritabani_bilgileri.php"); mysql_connect("$sunucu_adi","$kullanici_adi","$kullanici_sifresi"); $query = "select * from kullanicilar"; $result = mysql_db_query("$sunucu_adi",$query); Koddan da rahatlıkla anlaşılabileceği gibi include ile koda dahil edilmiş olan betik sanki "include" yapısının kullanıldığı yere kopyalanmış ve yapıştırılmış gibi bir şekilde düşünülebilir. Bir başka örnekle fonksiyonu pekiştirelim. Kullanıcı adlarının ve kişisel bilgilerinin yer aldığı bir yapı düşünelim. Her kullanıcının kişisel bilgileri disk üzerinde kendi kullanıcı adı ile belirlenen bir dosya içerisinde tutuluyor. Yani, umut adlı kullanıcının bilgileri disk üzerinde "umut.txt" adlı bir metin dosyadan okunarak belirleniyor. Bu tür bir uygulama için yapılması en mantıklı yapı şu şekildedir. // $kullanici_adi HTML form' dan girdi olarak alındı varsayıyoruz. // başındaki ve sonundaki boşluk karakterlerini siliyoruz. $kullanici_adi = trim($kullanici_adi); if ($kullanici_adi == "") echo "Hatalı girdi, tekrar deneyiniz"; else include ("$kullanici_adi". ".txt"); PHP' nin mümkün oldukça modüler bir yapıda kullanılması gereklidir. Sınıf (class) kullanımları ve include fonksiyonları ile zenginleştirilmiş bir yazılım çok daha profesyonel PHP-1 10

11 sonuçlar ortaya çıkaracaktır. PHP Fonksiyonları ve Global Değişkenler PHP de değişkenler sadece kendi blokları içerisinde geçerli olup C dilinde olduğu gibi global tanımlanmış bir değişken bütün fonksiyonlar tarafından global değeri alınarak kullanılmaz, global değişkenler atandıkları değerleri ile program blokları içinde kullanılacakları zaman program bloğuna kullanılacak değişkenlerin global değişkenler olduğu belirtilmelidir. Örnek vermek gerekirse : $a = 1; function test ( ) print $a; test ( ); Bu şekilde bir kod parçacığı işlendiğinde herhangi bir çıktı alamazsınız zira a değişkenini global bir değişken olarak tanımlamanıza rağmen yarattığınız fonksiyon kullanacağınız değişkenin global bir değişken olduğunu bilmemektedir bununla birlikte kendi bloğu içinde bu değişken tanımlı olmadığı ve bir ilk değer atanmadığı için hiçbir çıktı vermeyecektir. Eğer bu programı şu şekilde değiştirirsek: $a = 1; $b = 2; function topla ( ) global $a, $b; $c = $a + $b; print $c; topla ( ); print $c; Ekranda 3 yazdığını görürüz. Bunun sebebi ise global olarak a ve b değişkenlerinin tanımlandıktan sonra ilk değerler atanması ve topla fonksiyonu içinde kullanılacak olan değişkenlerin global olarak tanımlanmış olan a ve b değişkenleri olduğunun fonkisyona bildirilmesidir. C değişkeni ise a ve b değişkenlerinin toplamı olacağı için print fonksiyonuna aktarıldığında 3 görürüz. Fakat bu program bloğu iki kez 3 sayısını basmaz. Sebebi ise c değişkeninin sadece topla fonksiyonu içinde geçerli olan bir değişken olması ve bu değişkenin global olarak bir anlam taşımamasıdır. PHP içinde bir çok tanımlı hazır fonksiyon barındırdığı gibi kendi fonksiyonlarımızı tanımlamamıza da olanak vermektedir. Fonksiyon tanımlamak, çok miktarda ve aynı rutin işleri yapan program parçacıklarını durmadan kodumuzun içinde tekrarlamak yerine bir kere yazıp, her iş yapılacağı zaman çağırarak kodumuzun karışıklığını önlemek için idealdir. Örneğin 3 sayıyı toplayıp aritmetik ortalamasını kullanan bir programımız olsun ve bunu bir çok kere yapması gereksin: $d = $a + $b + $c; $artort = $d/3 ; print $artort $d = $a + $b + $c ; PHP-1 11

12 $artort = $d/3 ; print $artort Burada aritmetik orta bulduran algoritma durmadan tekrarlanarak kodun çalışırlığı sağlanmıştır. Fakat aynı uygulama şu şekilde de yapılabilirdi : function aritmetikorta ( $x, $y,$z ) $t = $x + $y + $z ; $artort = $d/3; return $artort; $deneme=aritmetikorta ( $a, $b, $c ); print $deneme; $degisti = aritmetikorta ( $a, $b, $c ); print $degisti; Böylece tanımladığımız fonksiyon aktarılan parametreler için kendi içinde tanımlanan işlemleri yaptıktan sonra değer olarak yaptığı işlemin sonucunu dönecektir. Bunu program içinde istediğimiz kadar sadece tek satır kod yazarak çağırabiliriz. PHP ile HTTP Başlıklarının Kullanımı Bu kitapçık HTTP başlık fonksiyonlarını anlatmak amacında olmayıp bu geniş konu hakkında sadece pratikte bilgi aktarmakla yetinecektir. Bir web tarayıcı bir web sunucuya bir döküman istediği gönderdiğinde web sunucu istenilen dökümanın yanısıra header(başlık) adı verilen bazı açıklayıcı ve yönlendirici bilgiler de gönderir. Konuyu örneklerle açıklamaya çalışalım. header("pragma: no-cache"); header("cache-control: no-cache, must revalidate"); PHP, dinamik içerikli web siteleri oluşturmak amaçlı kullanıldığı için kimi zaman bazı sayfaların web tarayıcının cache denilen ara belleğinde saklanmaması daha doğru olmaktadır. Bu, özellikle yüksek güvenlik gerektiren ve çok sık değişen siteler için gereklidir. Yukarıdaki kod parçası kullanıldığı PHP betiğinin çıktısının cache denilen ara bellekte saklanmasını engellemek amacı ile kullanılır. header("location: Bu kod parçası ise dökümanın herhangi bir yerinde, kullanıcıdan hiç bir girdi almaya ihitiyaç duymadan aktif adresi değiştirmeye yarar. Çok sık kullanılır ve özellikle bir login ekranından sonra girilen bilgiye göre karar vererek aktif adresi değiştirmek gibi uygulamalar için faydalıdır. Örnek vermek gerekirse... login.html adlı bir HTML dökümanımız olduğunu varsayalım. Bu HTML dökümandan alınan girdi "karar.php" adlı PHP betiğinde işlenecek ve girilen bilgiye göre adresi değiştirecektir. login.html dosyası PHP-1 12

13 <html> <head> </head> <body> </body> </html> <title> Login Form </title> <form action="karar.php" method="post"> <input type="text" name="kullanici_adi"><p> <input type="password" name="sifre"><p> <input type="submit" name="submit" value="tamam"> </form> Bu sayfadan alınan girdiler kullanici_adi ve sifre seklindedir. Bu bilgileri karar.php dosyasında inceleyerek karar veriyoruz. karar.php dosyası <? // başındaki ve sonundaki boşlukları yok ediyoruz. $kullanici_adi = trim($kullanici_adi); $sifre = trim(sifre); if ($kullanici_adi == "umut") if ($sifre = "bu_bir_sifredir") header ("Location : giris_basarili.php"); header ("Location : giris_basarisiz.php");?> Yukarıdaki kod parçasında kullanıcı adı ve şifrenin doğru olup olmadığı kontrol edildikten sonra eğer her iki bilgi de doğru ise giris_basarili.php adlı döküman çağrılıyor. Eğer bu bilgilerden herhangi birisi doğru değilse giris_basarili.php betiği çağrılmayacak ve dolayısı ile aktif adres, koşulsuz çağrılan giris_basarisiz.php dosyası olacaktır. Yukarıdaki örnekte dikkat edilmesi gereken bir nokta vardır. header ("Location..."); kullanımı sadece kendisinden önce ekrana bir çıktı yapılmadığı durumlarda çalışacaktır. Örneğin : echo "Öylesine bir çıktı"; header(location : "deneme.html"); Kod parçacığı beklendiği gibi deneme.html dosyasını çağırmayacaktır. Bu kısıtlama PHP' nin zayıflığından değil HTTP protokolünün tanımlarından kaynaklanmaktadır. Diğer bazı çok kullanılan HTTP başlıkları şu şekildedir: Content-Encoding Content-Language Content-Type Expires Referrer Last-Modified User-Agent Accept-Encoding Accept-Language... Bu başlıklar hakkında ayrıntılı bilgiye ftp://ftp.isi.edu/in-notes/rfc2626.txt adresinden ulaşabilirsiniz. PHP-1 13

14 PHP ile Posta Gönderme Elektronik posta, kuşkusuz Internet üzerindeki bir numaralı iletişim aracıdır. PHP ile posta gönderme işlemi, tek bir fonksiyon kullanımı ile halledilebilecek kadar kolaylaştırılmıştır. Yalnız uyaralım, aşağıda gördüğünüz örnek kodların UNIX / Windows 2000 ve Windows 95 / 98 sistemlerde çalışma şekilleri farklıdır. UNIX türevlerinde ve Windows 2000 nde, e-posta işlemlerinin yapılması için gerekli olan POP3 ve SMTP posta sunucuları önyüklüdürler. Windows 95 ve 98 sistemlerde ise, bu sunucular olmadığı için, bu sunucuları yüklemeden örnek kodları çalıştırmanız mümkün değildir. Bu uyarı ile ilgili daha fazla bilgi almak için, adresindeki POP3/SMTP Sunucu Kurulumu yazısından faydalanabilirsiniz. Mail Fonksiyonu Mail Fonksiyonu nun kullanım şekli aşağıdaki gibidir: Mail (kime, konu, mesaj, [ek_başlıklar]); Bu fonksiyon ile e-posta otomatik olarak "kime" kısmındaki kişiye veya kişilere gönderilir. Her bir virgül (,) ayrı bir kısmı göstermektedir. Örneğin: mail("[email protected]", "Deneme", "Merhaba\nBu bir denemedir\nhoşçakalın."); Ek başlıkları da yazarsak örneğimiz şöyle olacaktır: Mail ("[email protected]", "Deneme", "Merhaba\nBu bir denemedir\nhoşçakalın.", "From: [email protected]\nreply-to: [email protected]"); Ek Başlıkların tümünün daima çift tırnak içinde olduğuna ve birbirlerinden "\n" ile ayrıldıklarına dikkat edin. Bu yazım şekli mesajı oluştururken de geçerlidir. Mesajı oluştururken bir alt satıra geçmek istediğinizde her zaman \n karakterini kullanmalısınız. Posta yollarken en sık kullanılan başlıkları listeleyelim: From (Kimden) Reply-to (Cevabın yollanacağı adres) Cc (Carbon Copy - Karbon kopya) Bc (Blind Copy - Kör Kopya - gönderdiğiniz e-posta adreslerini gizler) Tüm bunları arka arkaya kullanabilirsiniz. E-posta için temel olarak iki şey gereklidir: Bunlardan ilki, bir formdan gerekli Anahtar= Değer (Key= Value) çiftlerini almak ve php dosyasına iletmektir. Bildiğiniz gibi Internet üzerinde tüm girdiler bu şekilde gönderilmektedir. Bunu bildiğinizi varsayarak aşağıdaki örnekleri inceleyelim. Önce e-posta gönderilecek formumuzu hazırlayalım ve dosyamızı eposta.php olarak saklayalım: <html> <head> PHP-1 14

15 <title>e-posta Formu</title> <meta http-equiv="content-type" content="text/html; charset=iso "> <meta http-equiv="content-type" content="text/html; charset=windows-1254"> </head> <body> <!-Bilgiler form.php dosyasına gönderilecek --> <form name="eposta" action="form.php" method="post"> <table border="0" cellspacing="2" cellpadding="2" align="left"> <td colspan="2"> <div align="center"> <p align="left">sitemizi inşa etmede ve yenilemede görüşleriniz çok önemlidir. Lütfen doldurmaktan çekinmeyin.</p> </div> </td> <td width="98"> <div align="right">ad Soyad: </div> </td> <td width="450"> <input type="text" name="adsoyad"><!-- 1. Değişken "adsoyad" --> </td> <td width="98"> <div align="right">e-posta: </div> </td> <td width="450"> <input type="text" name="eposta"><!-- 2. Değişken "eposta" --> </td> <tr align="left" valign="top"> <td width="98"> <div align="right">yorumlarınız:</div> </td> PHP-1 15

16 <td width="450"> <!-- 3. Degisken "yorum" --> <textarea name="yorum" cols="55" rows="10"></textarea> <!-- 4. Degisken "kime" --> <br><input type="hidden" name="kime" <!-- 5. Degisken "konu" --> <input type="hidden" name="konu" value="web Sitemden"> <!-- 6. Degisken "gonder" ancak bunlar sabittir. php uzantili dosyamizda degisken atamamiza gerek yok. --> <input type="submit" name="gonder" value="gönder"> <input type="reset" name="submit" value="sil"> </p> <p style="font-size: 10px;">Lütfen 20 sn. bekleyin. Tekrar Gönder butonuna basmanıza </table> </form> </body> </html> gerek yoktur.</p> </td> Her zaman için öncelikle formunuzdaki Anahtar = Değer çiftlerini aklınızda tutarsanız, PHP'de değişkenleri atamanız çok kolaylaşacaktır. <input type="hidden" name="kime" value="[email protected]"> Dikkat ederseniz "kime" anahtarına "[email protected] değerini atadım. <input type="hidden" name="konu" value="web Sitemden"> "konu" anahtarına da "Web Sitemden" değerini atadım. Değerleri bu şekilde atamamızın amacı, ileride sadece bu iki alanı değiştirerek farklı formlar yaratabilmenizi sağlamak. Böylece hem daha anlaşılır bir sisteminiz olacak, hem de yeni bir form yaratmanız daha az zamanınızı alacak. Yukardaki formda yer alan değişkenleri sıralayalım: 1.adsoyad (ziyaretçi dolduracak) 2.eposta (ziyaretçi dolduracak) 3.yorum (ziyaretçi dolduracak) 4.kime ([email protected]) 5.konu (Web sitemden) PHP-1 16

17 Şimdi bu verileri kullanarak elektronik postamızı hazırlayıp yollayacak PHP kodumuzu yazalım: <?php 9\"\n";?> $mesaj = "Ad Soyad: ". $adsoyad. "\n"; $mesaj.= "E-Posta: ". $eposta. "\n"; $mesaj.= "Yorum: ". $yorum. "\n"; $extra_baslik = "From: $kime\n"; $extra_baslik.= "Reply-To: $eposta\n"; $extra_baslik.= "Bcc:[email protected]\n"; $extra_baslik.= "Content-Type:text/plain; charset=\"iso $extra_baslik.= "Content-Transfer-Encoding: 8bit\n"; mail($kime, $konu, $mesaj, $extra_baslik); Önce size yabancı gelebilecek birkaç kullanım şeklini açıklayalım. Eğer Perl veya C tabanlı bir kullanıcı iseniz,.= kullanımına zaten aşinasınız demektir. Basic benzeri dillerden gelen kullanıcılar için de onlara tanıdık gelecek kullanım örneğini verelim: $mesaj = $mesaj. E-Posta:. $eposta. \n ; PHP de, Basic benzeri dillerden farklı olarak, değişkenleri birbirlerine eklemek için nokta kullanılır. PHP ile her iki kullanım şekli de doğrudur. Biz bütün örneklerimizde.= biçimini kullanacağız. HTML sayfalarını yayınlarken geçerli olan bütün kurallar, e-posta hazırlarken de geçerlidir: Đçeriğin hangi karakter seti ile okunması gerektiğini mutlaka belirtmelisiniz, aksi takdirde e- postanız farklı e-posta istemcilerinde farklı sonuçlar verecektir! Bu sorunu çözmek için, $extra_baslik değişkenine iki yeni satır ekledik: Content-Type ve Content-Transfer-Encoding. Dikkat ettiyseniz, postanın BCC bölümüne de bir e-posta adresi yazdık. Böylece yollanan bütün formların bir kopyasının da [email protected] adresine gitmesini sağlamış olduk. Son olarak unutmamamız gereken bir şey daha var. Formu gönderdikten sonra, ziyaretçimize e-postanın gönderildiğine ilişkin bir mesaj vermeliyiz. Bunun için yukarıdaki kodumuza dokunmadan onu HTML kodlarıyla sarıp, gonder.php ismiyle kaydedeceğiz. Gonder.php dosyasının son hali aşağıdaki gibi olacaktır: <?php $mesaj = "Ad Soyad: ". $adsoyad. "\n"; $mesaj.= "E-Posta: ". $eposta. "\n"; $mesaj.= "Yorum: ". $yorum. "\n"; $extra_baslik = "From: $kime\n"; PHP-1 17

18 ?> $extra_baslik.= "Reply-To: $eposta\n"; $extra_baslik.= $extra_baslik.= "Content-Type:text/plain; charset=\"iso \"\n"; $extra_baslik.= "Content-Transfer-Encoding: 8bit\n"; mail($kime, $konu, $mesaj,$extra_baslik); <html> <head> <meta http-equiv="content-type" content="text/html; charset=iso "> <meta http-equiv="content-type" content="text/html; charset=windows-1254"> <title>sayın <?php echo($adsoyad)?>, formunuz başarıyla alındı.</title> </head> <body> <b>sayın <font color="purple"><?php echo($adsoyad);?></font>, formunuz <b><font color="purple"> <?php echo($kime);?></font></b> adresine gönderilmiştir. Teşekkür ederiz.</b> </body> </html> Başta da belirttiğimiz gibi, bu kodları denemek için iki şansınız var, Linux veya Windows 2000 kullanıcısı iseniz, daha şanslısınız, sisteminizde zaten yüklü bir SMTP sunucu olma ihtimali çok yüksek. Eğer Windows 95 / 98 kullanıcısı iseniz, adresinden, Windows 95 / 98 altında kullanabileceğiniz SMTP sunucusunun adresini ve kurulum bilgilerini gerekli bütün detaylarıyla birlikte bulabilirsiniz. Đkinci bir şansınız daha olduğunu söyledik, o da Internet e bağlı olmak koşuluyla kullanabileceğiniz kendi ISP nizin SMTP sunucusu, ya da Yahoo! gibi ücretsiz posta hizmeti veren ve SMTP adresi bilinen bir site. Her iki olanak için de yapmanız gereken değişikliklere bakalım. Windows altında çalışıyorsanız, C:\Windows\php.ini dosyasını açın ve [mail function] başlığı altındaki ayarlarınızı şu şekilde değiştirin: Kullandığınız bilgisayarda kurulu bir SMTP sunucusu varsa: SMTP = localhost ;for win32 only (Kendi serverınızın smtp ayarını yazın) [email protected] ;for win32 only ( adresinizi yazın) Kullandığınız bilgisayarda kurulu bir SMTP sunucusu yoksa: SMTP = smtp.mail.yahoo.com (Yahoo! dan bir e-posta adresiniz olduğunu varsayıyoruz) [email protected] Yahoo!'nun SMTP'sini kullanmak istiyorsanız, Yahoo! sitesindeki hesabınıza girin ve Options (Seçenekler) kısmından POP3 ile e-posta alacağınızı belirtin. Yukardaki satırları php.ini dosyanıza ekledikten sonra, Yahoo! nun SMTP sunucusunu kullanarak e-posta yollayabilirsiniz. Formu istediğiniz gibi çoğaltabilirsiniz. Gerisi sizin yaratıcılığınıza kalmıştır. PHP-1 18

19 MySQL ve SQL Php'nin yaygınlaşmasındaki kuşkusuz en büyük yardımcılarından biri de MySQL oldu. Windows ve Unix versiyonları ücretsiz olarak dağıtılan MySQL'in Php'yle beraber gelişmesi sayesinde hem Php hem de MySQL karlı çıktılar. Gelişmiş veritabanı sistemlerinde olan ilişkisel veri tabanı mantığıyla geliştirilen MySQL, çoklu bağlantı desteği ve performansıyla uzunca süreden beri Đnternet'te adını duyurmayı başarmıştı. Kısa bir süre önce GPL lisansıyla kaynak kodları açıklanan MySQL'in Php'yle stratejik işbirliği sayesinde Php 4 ve MySQL birlikte diğer veritabanı ve dil ikililerien karşı konulamaz performans üstünlüğü sağlıyorlar. Php'nin, MySQL ve Apache'yle birlikte derlenerek kullanıldığı sistemlerde veritabanı ve web sunucu arasında kurulan kalıcı bağlantılar (persistent connection) sayesinde web sunucu ve veritabanı tek bir yazılımmış gibi çalışabiliyorlar. Bu sayede çalışan iki ayrı yazılıma göre %400'lere varan performans üstünlüğü de sağlanmış oluyor. Kısa bir süre önce Đnternet'te dünyanın en çok kullandığı site olan Yahoo'da bazı bölümlerinde MySQL kullanmaya başladı. MySQL Komutları Php yaygın kullanılan her türlü veritabanı kullanıcısına veritabanına özel Php komutlarıyla kullanım imkanı sağlar. Php kullanım klavuzunda incelendiğinde veritabanları arasında en çok Php komutunun MySQL daha sonra Oracle için olduğu görülecektir. MySQL komutlarından birçoğu özel durumlarda gerekli olurken 10 kadar komut her türlü MySQL işleminde daha yaygın olarak kullanılırlar. Bir Php dosyasında MySQL veritabanı kullanılmak istendiğinde mutlaka veritabanı sunucusuna bağlanılmalı ve bir veritabanı seçilmelidir. Genellikle bir Php dosyasında bir veritabanına bağlantı yapılacağı için veritabanı sunucusuna bağlandıktan sonra bir veritabanı ismi verilerek tüm diğer MySQL işlemleri o veritabanı sunucusu ve o veritabanı üzerinde yapılabilir. Eğer istenirse birden çok veritabanı sunucusundaki birden çok veritabanına da bağlantı yapılabilir. Aşağıdaki komutlarda mysql_connect() komutuyla veritabanı sunucusuna ip, kullanıcı adı ve şifre verilerek bağlantı sağlanır. Daha sonraki mysql_select_db() komutuyla da dosyadaki tüm MySQL işlemlerinde kullanılacak olan veritabanı tercihi belirtilmiş olur. mysql_connect("localhost","root","sifre") or die("alete ulaşamadım..."); mysql_select_db("potdb") or die("veritabanına ulaşamadım..."); Php dosyasında tüm veritabanı işlemlerinden önce veritabanı sunucusuyla bağlantı kurulmalıdır. Php'de MySQL'e sorgu göndermek için mysql_query() komutu kullanılır. Parantezler içindeki alana SQL dilinde MySQL'in anlayacağı veritabanı sorgulama komutları girilmelidir. MySQL'de oluşabilecek hataları kullanıcının Php içinde farkedebilmesi için Php'nin özel komutları vardır. Bu komutlar sayesinde veritabanı sorgulamasında oluşan sonuçlar hata numarasıyla birlikte farkedilebilir. Hata gösterge komutları kullanılmadan Php, MySQL'e dair hiçbir hata mesajı vermeden işleme devam eder. MySQL'in sorgulanmasından geriye dönen sonuç tablosundaki veriler de mysql_result() komutuyla alınır. $isimler = mysql_query(select * from ogrenciler"); if (mysql_error()) echo ("MySQL hatası oluştu. Hata no :"); echo mysql_error(); $ad = mysql_result($isimler,$i,"ad"); PHP-1 19

20 $soyad = mysql_result($isimler,$i,"soyad"); Veritabanından dönen tablodaki ilk satırın satır numarası 0'dır. Her sonucun bir satır olduğu bu tabloda tablo alanının ismiyle satır numarası verilerek sonuçlar çağırılabilir. Öğrenci numarası, adı ve soyadının bulunduğu "ogrenciler" isimli tabloya yapılacak olan genel sorguda geriye dönen sonuç tablosunun her satırında bir öğrenci numarası, ad ve soyad bulunacaktır. Bu sonuç tablosundan sonuçların birer birer alınarak kullanılması için genellikle while döngüsü kullanılır. Sonuç tablosundaki satır sayısını öğrenmek için mysql_numrows() komutu kullanılır. $isimler = mysql_query(select * from ogrenciler"); if (mysql_error()) echo ("MySQL hatası oluştu. Hata no :"); echo mysql_error(); $sayi = mysql_numrows($isimler) $i = 0; while ( $i < $sayi) : $ad = mysql_result($isimler,$i,"ad"); $soyad = mysql_result($isimler,$i,"soyad"); echo ("Ad : $ad Soyad : $soyad"); $i++; endwhile; Sonuç tablosunun Php'de kullanılmasını sağlayan mysql_query() komutuyla tüm tablodaki değerler bir sayı kullanılarak tanımlanır. Sonuçlarsa mysql_result() kullanılarak metin değişkenine atanırlar. Eğer sonuçların bir dizi değişkeninde (array) toplanması isteniyorsa mysql_fetch_array() komutu kullanılır. SQL Komutları Php ile herhangi bir veritabanını kullanırken bilinmesi gereken en önemli ayrıntı SQL (Structured Query Language) adı verilen veritabanı yönetim ve sorgulama dilidir. Bu dilin detayları hakkında bilgi sahibi olunarak veritabanını performanslı ve hızlı şekilde ullanabilmek mümkün olur. Çoğu zaman orta derecede SQL kullanılan sitelerde performans kaybı ve gereksiz sorgularla karşılaşılır. Veritabanından sonucu tek sorguda çekmekle iki sorguda çekmek arasında oldukça büyük performans kaybı oluşacaktır. Ayrıca SQL kullanılarak yapılan işlemleri Php'yle yapmak güç kaybına da yol açar. Öğrenci sınav sonuçlarının bulunduğu bir tablo göz önünde bulundurulduğunda birinci, ikinci ve üçüncü sınav sonuçlarının Php'de toplanmasıyla performans ve memory kaybı vardır. SQL'de sınav sonuçlarının toplanması her zaman için daha hızlı olacaktır. select sinav1+sinav2+sinav3 as sinavsonuc from sinavlar Bu SQL komutuyla üç sınavın bulunduğu sınav sonuçları "sinavlar" tablosundan as komutuyla belirtilen "sinavsonuc" adında bir alanla çekilebilecektir. "select" komutu sonuç çekmek için kullanılır. "from" komutuyla sonuçların çekileceği tablo adı belirtilir. "select"'ten sonra gelen isimler sonuçların çekileceği tablodaki alan adlarıdır. Eğer tablodaki tüm alanlar çekilmek isteniyorsa select * from sinavlar kullanılmalıdır. Sınav sonuçlarında en yüksek olan kişinin bulunması istendiğinde de max() komutu kullanılabilir. PHP-1 20

21 select max(sinav1+sinav2+sinav3) as sinavsonuc from sinavlar Bu sayede sınav sonuçlarında en iyi sonuç öğrenilmiş olur. Dikkat edilmesi gereken nokta aynı sınavsonuç toplamına sahip birden fazla kişi olmasına rağmen sadece en yüksek toplamı elde eden ilk sonucun listeleneceğidir. En yüksek kişi seçilmek istendiğinde de order by komutu kullanılmalıdır. select sinav1+sinav2+sinav3 as sinavsonuc from sinavlar order by sinavsonuc desc Bu sayede ortaya çıkan tablodaki ilk kişi en yüksek puanı alan kişi olacaktır. Birden çok aynı yükseklikte puan alan kişiler alfabetik sırada sıralanacaklardır. "order by" komutundan hemen sonra sonuçların sıralanacağı alan adı verilmelidir. "desc" komutu sayesinde de en yüksekten en düşüğe doğru sıralama yapılır. "desc" kullanılmassa sıralama en azdan en çoğa doğru olur. Eğer sınav sonuçlarında en yüksek puanı alan 10 kişi belirlenmek isteniyorsa limit komutu kullanılabilir. select sinav1+sinav2+sinav3 as sinavsonuc from sinavlar order by sinavsonuc desc limit 0,10 "limit" komutuyla belirtilen ilk sayı sıralamanın başlayacağı sayıdır. Yani sıfırıncı kayıttan itibaren 10 tane sonuç getirmek istendiğinde limit 0,10 kullanılır. Limit sonuç tablosunda gereksiz kayıt barındırılmak istenmediği durumlarda kullanışlı olur. Php'de kullanılacağından fazla kayıdı veritabanından çekmek hem boş hafıza miktarını azaltır hem de veritabanını gereksiz yere zorlamış olur. Eğer sınav sonuçlarının ortalaması alınmak isteniyorsa avg() komutu kullanılır. Ortalaması alınmak istenen alan adı belirtilerek veritabanından ortalamalar kolaylıkla çekilebilir. select avg(sinav1+sinav2+sinav3) as sinavsonuc from sinavlar Eğer belli koşulların sağlanacağı sonuçlar tablodan çekilecekse "where" komutu kullanılır. Örneğin sınav sonuçları toplamı 150 ve üzerinde kişiler seçilecekse select sinav1+sinav2+sinav3 as sinavsonuc from sinavlar where sinav1+sinav2+sinav3 > 150 sorgusu kullanılmalıdır. Birden çok koşul da sorgudan verilebilir. Eğer her sınavdan 50 ve üzeri almış kişiler seçilecekse select sinav1, sinav2, sinav3 from sinavlar where sinav1 > 49 and sinav2 > 49 and sinav3 > 49 kullanılmalıdır. "and" komutuyla koşullar birbirleriyle mantıksal ve anlamında birleştirilir. Aynı şekilde "or" da kullanılarak mantıksal veya kullanılmış olur. Sorgular daha da karmaşıklaştırılarak her sınavda sınav ortalamasını geçen kişilerin listesi gibi zor gözüken işlemler de SQL kullanılarak çekilebilir. Bu işlemlerin Php'de yapılması her ne kadar kolay olsa da SQL'le veritabanından direkt verilerin formatlanarak çekilmesi işlemlerin hem kolay hem de hızlı yapılmasını sağlar. MySQL'e Veri Girişi Veritabanına girilmesi gereken veriler olduğu durumlarda "select" komutuna karşı gelen "insert" komutu kullanılır. Bu komut sayesinde veritabanında belirtilen tabloya istenen sonuçlar yerleştirilebilir. insert into sinavsonuc values('48','50','75','85') PHP-1 21

22 Bu komutla tablo sıralaması öğrenci numarası, ilk sınav sonucu, ikinci sınav sonucu ve üçüncü sınav sonucu olan bir tabloya 48 numaralı öğrencinin notları 50, 75 ve 85 olarak giriliyor. Đstenirse bu girilen sonuçlar daha sonradan değiştirilebiliyor. Eğer üçüncü sınav henüz gerçekleştirilmediyse bu sınavın notu "null" komutu kullanılarak boş değer girilebilir. Dikkat edilmesi gereken nokta her alanın boş değer kabul etmeyebileceğidir. Tablo oluşturulurken bazı veri alanları boş değer almayacak şekilde önceden tanımlanabilir. Eğer sınav sonuçlarında sonradan değişiklik yapılması gerekirse "update" komutu kullanılır. update sinavsonuc set sinav3 = 90 where ogrencino = 48 Bu komutla öğrenci numarası 48 olan öğrencinin sınav sonucu 90'a dönüştürülüyor. "set" komutuyla güncellenecek yani değiştirilecek olan alanın hangi değeri alacağı belirtilir. "where" komutu da her zamanki gibi bir koşul belirterek koşulu sağlayan öğrencilerin getirilmesini sağlar. Veritabanından sonuç silinmesi gereken durumlarda "delete" komutu kullanılır. delete from sinavsonuc where ogrencino = 98 Bu sorguyla sinavsonuc tablosunda öğrenci numarası 98 olan öğrencinin tüm kaydı siliniyor. Silme ve güncelleme için kullanılan "delete" ve "update" komutları veritabanındaki bilgiler üzerinde değişiklik yaptıklarından geri dönüşü imkansız veri kayıplarına yol açabilirler. Bu yüzden bu komutların dikkatle kullanılması gerekir. Birden Fazla Tablo Kullanımı SQL'de birden fazla tablodan veri çekmekte özel bir notasyon kullanılır. Tabloların birbirine bağlanması işlemine "join" adı verilir. Birleştirmenin "left join" ve "right join" olmak üzere iki çeşidi vardır. Öğrenci sınav sonuçlarının bulunduğu bir tabloyla öğrenci ad, soyad ve diğer bilgilerinin bir arada olduğu tabloda ortak noktayı sağlayan bir alan olmalıdır. Her iki tabloda da öğrenci numarası ortak alan olarak belirtilmelidir. Bu sayede öğrenci numarası belirtilerek sınav sonuçları bulunan tablodan sınav sonuçları, diğer bilgilerin bulunduğu tablodan da isim soyad bilgileri çekilebilir. select ad, soyad, sinav1, sinav2, sinav3 from sinavsonuc, bilgi where sinavsonuc.ogrencino = bilgi.ogrencino Bu sorguyla bilgi tablosundan ad, soyad, sinavsonuc tablosundan sinav1, sinav2 ve sinav3 alanları çekiliyor. Đki farklı tablodan bilgi çekildiği için "from" alanında her iki tablo isminin de belirtilmesi gerekiyor. Sorgudaki "where" alanında her iki tabloda eş olması gereken alanın belirtilmesi için farkı bir formatta yazılım kullanılıyor. Sınav sonuçları tablosundaki öğrenci numarası için "sinavsonuc.ogrencino", diğer bilgilerin yer aldığı bilgi tablosundaki öğrenci numarası için de bilgi.ogrencino kullanılıyor. En sonda yer alan "where" bölümü sayesinde bilgiler eşleştirilerek veritabanından çekilebiliyor. MySQL Yönetimi Tüm SQL işlemleri için Php kullanılabileceği gibi veritabanı sunucusunda veritabanı, tablo oluşturmak, değiştirmek ya da diğer işlemler için farklı arayüzler kullanmak zaman kazandırıcı olabilir. Php kullanılarak geliştirilen PhpMyAdmin sayesinde web sunucu aracılığıyla tüm MySQL özelliklerini yönetebilmek mümkündür. Hem Unix hem de Windows ortamları için PhpMyAdmin tavsiye edilir. Windows'da da MySQL'i yönetmek için myadmin adındaki yazılım da oldukça kullanışlıdır. MySQL'e ve Php'ye yeni başlayan kullanıcılar için PHP-1 22

23 veritabanını tanımak amacıyla ayrı bir yazılım kullanmaları tavsiye edilebilir. Php'de kullanılabilecek MySQL Komutları : mysql_affected_rows : Bir önceki işlemde etkilenen satır sayısı mysql_close : Belirtilen MySQL bağlantısını kapatır mysql_connect : Sunucuya veritabanı bağlantısı açar mysql_create_db : MySQL'de veritabanı açar mysql_data_seek : Sonuç satırında belirtilen sıraya geçer mysql_db_query : MySQL'e sorgu gönderir mysql_drop_db : Sunucudan veritabanı siler mysql_errno : Bir önceki işlemdeki MySQL hata numarasını verir mysql_error : Bir önceki işlemdeki MySQL hata mesajını verir mysql_fetch_array : Sonuçları dizi değişkeni olarak alır mysql_fetch_field : Sonuç tablosundaki alan adını obje olarak alır mysql_fetch_lengths : Sonuç tablosundaki dizi değişkenin uzunluğunu alır mysql_fetch_object : Sonuç satırını obje olarak alır mysql_fetch_row : Sonuç tablosundan dizi değişkeni olur mysql_field_name : Sonuç tablsundaki sonucun tablodaki alan adını verir mysql_field_seek : Sonuç tablosunda sıra indisini belirtilen yere götürür mysql_field_table : Alan adı verilen sonucun tablo adını verir mysql_field_type : Sonuçtaki alanın hangi tip olduğunu belirtir mysql_field_flags : Sonuçtaki alanın hangi tür ekstra parametrelerle tanımlandığını belirtir mysql_field_len : Sonuçtaki alanın veritabanındaki uzunluğunu verir mysql_free_result : Sonuçlar için atanan hafızayı boşaltır mysql_insert_id : Bir önceki veri yerleştirmede oluşan otomatik veri değerini verir mysql_list_fields : Sonuçtaki tüm tablo alanlarını listeler mysql_list_dbs : Sunucudaki tüm veritabanlarını listeler mysql_list_tables : Veritabanındaki tüm tabloları listeler mysql_num_fields : Sonuçtaki alan sayısını verir mysql_num_rows : Sonuçtaki satır sayısını verir mysql_pconnect : Sunucuya kalıcı bir bağlantı tanımlar mysql_query : Veritabanına sorgu gönderir mysql_result : Sorgudan dönen sonuçları alır mysql_select_db : Sunucudan veritabanı seçer mysql_tablename : Verilen alanın ait olduğu tablo adını verir PHP-1 23

24 phpmyadmin Kurulumu MySQL veritabanının yönetiminde, UNIX ve Windows sistemler altında çalışan farklı programlar mevcuttur. Bunlardan biri olan phpmyadmin, PHP ile yazılmış olması, platformdan bağımsız çalışması, kolay kurulabilmesi ve kolay kullanılabilmesi ile öne çıkıyor. Şu anda sürümü mevcut olan phpmyadmin programını adresinden temin edebilirsiniz. Programı indirip ZIP dosyasını (ya da.tar.gz) açın. Apache sunucu kullanıyorsanız, phpmyadmin i kopyaladığınız klasörü httpd.conf dosyası içinde; Alias /myadmin/ /programın/olduğu/klasör/ Biçiminde tanımlamalısınız. Burada myadmin yerine istediğiniz herhangi bir sözcük kullanabilirsiniz. PWS kullanıyorsanız, Gelişmiş bölümünden Klasör ekle seçeneğini kullanarak phpmyadmin in yer aldığı klasörü kolayca tanıtabilirsiniz. Klasörü tanıtırken, Yürütme hakkını vermiş olduğunuzdan emin olun. 2. adım, config.inc.php dosyasını inceleyeceğiz: $cfgservers[1]['host'] = 'localhost'; // MySQL in bulunduğu sunucu $cfgservers[1]['port'] = ''; $cfgservers[1]['adv_auth'] = false; $cfgservers[1]['stduser'] = ''; $cfgservers[1]['stdpass'] = ''; $cfgservers[1]['user'] = ''; // MySQL port u // MySQL kullanıcısı $cfgservers[1]['password'] = ''; // MySQL şifresi $cfgservers[1]['only_db'] = ''; Burada bizi ilgilendiren üç tane ayar var. Birincisi host, yani MySQL veritabanımızın bulunduğu bilgisayarın ismi. Bu bir IP numarası da olabilir. Kendi bilgisayarınızda kurduğunuz yerel MySQL de çalışıyorsanız, buradaki ayarı localhost olarak bırakabilirsiniz. Đkinci ayar, user, phpmyadmin in hangi MySQL kullanıcısını kullanarak veritabanı ile bilgi alışverişi yapacağını belirler. UNIX sistemlerde bu işletim sistemi kullanıcısından farklı bir kullanıcıdır ve MySQL için ayrıca tanımlanır. Son ayar password ile bu kullanıcı ile birlikte kullanılacak şifreyi belirler. HTTP sunucumuzun ve MySQL in çalışır durumda olduğundan emin olduktan sonra, tarayıcımızın adres bölümüne yazarak phpmyadmin i çalıştırıyoruz. Elde ettiğimiz ekran çıktısı şu şekilde olacaktır: // MA01.TIF Screenshot Burada veritabanımızın adını php.org.tr koyuyoruz ve Create Database diyerek veritabanını yaratıyoruz. Karşınıza çıkan bir sonraki ekran, veritabanını yöneteceğiniz ekrandır. Sol tarafta MySQL e kayıtlı bütün veritabanlarının ve onların içindeki tabloların listesi bulunuyor. Biz de ilk tablomuzu yaratalım. Ekranın alt bölümündeki Create new table on database phporgtr bölümünden, yaratacağımız tablonun ismini ve alan sayısını belirterek Go diyoruz: PHP-1 24

25 // MA02.TIF Screenshot Tablomuza test ismini verdik ve 3 alan kullanacağımızı belirledik. Bundan sonraki ekranda, tablonun alanlarının özelliklerini belirleyeceğiz. Buradan alan tipini, uzunluğunu (length), işaret alıp almayacağını (unsigned), öntanımlı değerini (default), otomatik-artan değer olup olmadığını (auto-increment), key, index ve unique özelliklerine sahip olup olmayacağını belirleyebiliriz: // MA03.TIF Screenshot Böylece phpmyadmin ile ilk tablomuzu yaratmış olduk. En önemli özelliğiyse sona sakladık: bir text dosyasının içine kaydedilmiş veritabanı yapısını ve varsa kayıtları olduğu gibi MySQL e boca edebilmesi. Bu işlem, mysqldump komutuyla benzerdir. Bu işleme örnek olarak, zdefteri.sql dosyamızın içindeki Ziyaretçi Defteri programımızın veritabanı yapısını MySQL e nasıl geçireceğimize bakalım: // MA04.TIF Screenshot Sol bölümden veritabanımızı seçiyoruz ve karşımıza çıkan ekranda, çalıştırmak istediğimiz SQL komutlarının bulunduğu dosyanın ismini kutucuğa yazıyoruz. PhpMyAdmin dosyayı otomatik olarak açacak ve işleyecektir. PhpMyAdmin ile ilgili bilmeniz gereken temel işlemler bu kadar. Kullanımı oldukça kolay bu program, aynı zamanda yapılan sorgulamaları gizlemeyip ekrana SQL kodu olarak da döktüğü için, SQL bilginizin gelişmesine de katkısı olacaktır. Ziyaretçi Defteri PHP ile Ziyaretçi Defteri örneğimiz, şimdiye kadar her iki kitapçıkta görüp öğrendiklerimizin bir sentezi olacak, teoride öğrendiğimiz bütün bilgileri bu uygulamada harmanlayıp pratiğe geçireceğiz. Ziyaretçi Defteri ni çalıştırmak için PHP ve MySQL e ihtiyacımız olacak. Uygulamaya geçmeden önce, henüz kurmadıysanız, phpmyadmin Kurulumu başlıklı bölüme gidin ve PHP tabanlı bir MySQL veritabanı yönetim sistemi olan bu programı kurun. O bölümde anlatılanları uygulayarak Ziyaretçi Defteri için kullanacağımız veritabanını otomatik olarak yaratabilirsiniz. Kullanacağımız tabloları yaratmak için gerekli olan SQL kodları şöyle: CREATE TABLE defter ( id int(10) unsigned DEFAULT '0' NOT NULL auto_increment, tarih int(11) unsigned DEFAULT '0' NOT NULL, isim varchar(50) NOT NULL, posta varchar(100) NOT NULL, url varchar(100) NOT NULL, mesaj text NOT NULL, PRIMARY KEY (id), PHP-1 25

26 ); KEY id (id, tarih), UNIQUE id_2 (id) CREATE TABLE defter_yonetim ( ); id int(10) unsigned DEFAULT '0' NOT NULL auto_increment, sesid varchar(32) NOT NULL, kullanici varchar(20) NOT NULL, sifre varchar(20) NOT NULL, PRIMARY KEY (id), KEY id (id), UNIQUE id_2 (id) Bu tabloları biraz açalım: Defter tablosunda ziyaretçilerden gelen mesajları ve onlar hakkındaki ufak bilgileri tutacağız. Alan adlarından hangi bilgiyi nerede tutacağımızı kolayca anlamanız mümkün. Defter_yonetim tablosunda, Ziyaretçi Defteri mizin yönetimiyle ilgili bilgileri tutacağız. Geçerli kullanıcı isimleri ve şifreler burada saklanıyor ve kullanıcının sistemde olup olmadığı yine buradan takip ediliyor. PhpMyAdmin i kullanarak bu tabloya kolaylıkla yeni kullanıcılar ekleyebilirsiniz. Kayıt eklerken id ve sesid alanlarını boş bırakmayı unutmayın. Programımız iki bölümden oluşacak. Birinci bölümdeki dosyalar sabit diskimizde bizim yarattığımız herhangi bir klasörde, ikinci bölümdeki (yönetim) dosyalar da bu klasörde yaratacağımız yönetim klasöründe yer alacak. Eğer kitapçığın kodlarını bilgisayarınıza indirdiyseniz, /kitapcik/zdefteri/ ve kitapcik/zdefteri/yonetim klasörlerine sahip olacaksınız. Eğer bu klasörleri kendiniz yaratmak istiyorsanız bu örneği kullanabilirsiniz. Kodumuzu yaratmaya ziyaretçilerimizin göreceği ekranlardan başlayalım. Öncelikle program çapında kullacağımız ve style bilgilerini saklayacağımız dosyamızı yaratalım. Sitedeki bütün dosyalar bu style dosyasını kullanacak: <style type="text/css">.etiket font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 10pt;.baslik font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 14pt; font-weight : bolder; text-align : center; color : #0063CE; PHP-1 26

27 .ufak font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 8pt;.liste-etiket font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 8pt; color : Red;.liste-veri </style> font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 8pt; color : Black; Bu dosyayı ana klasörde style.php olarak kaydedin. Programla ilgili bütün genel değişkenleri saklayacağımız bir ayar dosyamız var. Bu dosyayı her PHP dosyasının başına ekliyoruz ve böylece genel bir değişkenin değerini değiştirmek istediğimizde vakit kazanmış oluyoruz: <? $cfgdbhost = "localhost"; // Veritabanının bulunduğu sunucu adresi $cfgdbisim = "kitapcik"; // Veritabanının ismi $cfgdbkul = ""; // Veritabanı kullanıcısı $cfgdbsifre = ""; // Veritabanı kullanıcı şifresi $cfgbaslik = "Ziyaretçi Defteri - // Öntanımlı Site Başlığı $cfglimit = 3; // Sayfa başına gösterilecek kayıt sayısı?> Bu dosyayı ana klasörde ayar.php olarak kaydedin. Her HTML sayfasının başına eklenen standart kodlar vardır, <meta> etiketleri gibi. Bunları her sayfada ayrı ayrı yazmaktansa hepsini bir seferde tek bir dosyada topluyoruz ve yine her PHP dosyamızın başına include komutu ile ekliyoruz. <? /* Bu dosya bütün sayfaların başına ekleniyor */?> <? header("content-type: text/html; windows=1254");?> <? header("content-type: text/html; charset=iso ");?> <? header("content-language: tr");?> PHP-1 27

28 "ayar.php"?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title><? echo $cfgbaslik?></title> <? include "style.php"?> </head> <body bgcolor="#ffffff"> karakterinin kullanımı size yabancı karakterini her komuttan önce kullanabilirsiniz. Bu karakteri kullandığınızda, o komutun kullanımı sonucunda oluşan hiçbir uyarı ve hata (warning error) tarayıcınıza yazılmayacaktır. Bu karakteri işlevinden emin olmadığınız sürece kullanmamanızı tavsiye ederim, programınızdaki hataları bulmanızı oldukça zorlaştırabilir. Yukardaki dosyayı da baslik.php olarak kaydedin. Bütün sayfalara ekleyeceğimiz diğer bir dosya, her sayfanın sonuna gelecek son.php. Đçeriği oldukça basit, siz kendinize göre bu dipnot dosyasını geliştirip özelleştirebilirsiniz. </body> </html> Programımıza dışardan destek veren bir dosyamız daha var: gerecler.php <? function make_clickable($text) $ret = eregi_replace( "([[:alnum:]]+)://([^[:space:]]*)([[:alnum:]#?/&=])", "<a href=\"\\1://\\2\\3\" target=\"_blank\" target=\"_new\">\\1://\\2\\3</a>", $text); $ret = eregi_replace( "(([a-z0-9_] \\- \\.)+@([^[:space:]]*)([[:alnum:]- ]))", "<a href=\"mailto:\\1\" target=\"_new\">\\1</a>", $ret);?> return($ret); Bu dosyadaki fonksiyon regular expressions kullanılarak yazılmış, e-posta ve URL lerin tarayıcıya link olarak gönderilmesini sağlayan bir fonksiyon. Siz de bu fonksiyonu alıp kendi programlarınızda gönül rahatlığıyla kullanabilirsiniz, kod adresinde de mevcut. Artık index dosyamızla işe başlayabiliriz. Bu sayfa ziyaretçi sitemize geldiğinde ilk göreceği sayfa. Aşağıdaki kodu ana klasörde index.php olarak kaydedin: <? include "baslik.php"?> <table width="75%" border="0" align="center" bgcolor="#f8f8f8"> <td align="center"><b><font size="+2" color="blue">ziyaretçi Defterim </font></b></td> PHP-1 28

29 <td> </td> <td align="center"><a href="ekleform.php">deftere Yeni Mesaj Yaz</a></td> <td align="center"><a href="goster.php">defterdeki Mesajları Oku</a></td> <td> </td> </table> <? include "son.php"?> Bu dosya üzerinde fazla durmaya gerek yok sanırım. Hemen ziyaretçimizin kendi görüşlerini yazmasına imkan sağlayan dosyaya geçelim. Bunu ana klasörde ekleform.php olarak kaydedin: <? include "baslik.php"?> <form action="ekle.php" method="post"> <table width="75%" border="0" align="center" bgcolor="#f8f8f8"> <td class="baslik">bilgi ve Görüşleriniz</td> </table> <table width="75%" border="0" align="center" bgcolor="#f8f8f8"> <td> </td> <td class="etiket">đsim ve Soyadınız: </td> <td class="etiket"><input type="text" name="isim" size="35" maxlength="50"></td> <td class="etiket">e-posta Adresiniz: </td> <td class="etiket"><input type="text" name="posta" size="35" maxlength="100"></td> PHP-1 29

30 <td class="etiket">url'niz: </td> <td class="etiket"><input type="text" name="url" value=" size="35" maxlength="50"></td> <td valign="top" class="etiket">görüşleriniz: </td> <td><textarea cols="25" rows="5" name="mesaj"></textarea></td> <td> </td> <td align="center" class="ufak"><a href="index.php">ana Ekran</a></td> <td><input type="submit" value=" G ö n d e r "> <input type="reset"></td> </table> </form> <? include "son.php"?> // Screenshot zd01.tif Bu dosya ile, isim-soyad-posta-url-mesaj alanlarını form aracılığıyla alıp, form action bölümünde belirttiğimiz ekle.php dosyasına gönderiyoruz. Aşağıdaki ekle.php dosyasını ana klasöre kaydedelim ve nasıl çalıştığını inceleyelim: <? include "ayar.php"?> <? /* Veritabanına bağlantı kur */ $link = mysql_connect($cfgdbhost,$cfgdbkul,$cfgdbsifre); /* Bugünün tarihini timestamp olarak bul */ $tarih = time(); /* SQL kodunu hazırla */ $strsql = "INSERT INTO defter (tarih,isim,posta,url,mesaj) "; $strsql.= "VALUES ($tarih,'$isim','$posta','$url','$mesaj')"; /* SQL sorgulamasını yap */ $sonuc /* Kontrol et */?> <? include "baslik.php"?> PHP-1 30

31 <? if ($sonuc):?> <p class="etiket">değerli görüşlerinizi bizimle paylaştığınız için teşekkür ederiz.<br> Ana sayfaya <a href="index.php">buradan</a> dönebilirsiniz. <? else:?> <p class="etiket">sistemdeki bir hata yüzünden görüşlerinizi şu anda kaydedemiyoruz, özür dileriz.<br><br> Ana sayfaya <a href="index.php">buradan</a> dönebilirsiniz.<br> Tekrar denemek için önceki sayfaya <a href="javascript:history.back()">buradan</a> dönebilirsiniz. <? endif?> <? include "son.php"?> Öncelikle $cfg. ismindeki değişkenler nereden çıktı şimdi diyebilirsiniz. Bu değişkenleri daha önce yarattığımız ayar.php dosyası içinde kullandık ve ekle.php dosyamıza include ettik. Bunu diğer dosyalarda da yapacağız, böylece veritabanımızın ismi veya kullanıcı adımız ya da şifremiz değişse bile bunu her zaman tek bir dosyadan kontrol edip değiştirebileceğiz. Veritabanına kullanıcıdan aldığımız bilgilerin yanısıra $tarih alanını da eklediğimize dikkat edin. Bu alanı veritabanında INT olarak tanımladığımız için veritabanına kaydederken $tarih değişkenini tek tırnak içine almadık. Peki tarihi neden DATE ya da DATETIME olarak tanımlamadık da INT olarak tanımladık diyebilirsiniz. Bu tamamen benim kullanım alışkanlığım, ama bu kullanım şeklinin daha avantajlı olduğunu düşünüyorum. time() fonksiyonu ile elde ettiğiniz değişkene timestamp adı verilir. Bu değişken 01.Ocak.1970 tarihinden bu yana geçen zamana göre sürekli değişir. Özellikle md5() fonksiyonu ile kullanıldığında random fonksiyonlarının kullanımından çok daha güvenilir sonuçlar verir. Bununla ilgili bir örneği yönetim bölümünde göreceğiz. ekle.php ile ziyaretçilerimize kayıt yapma imkanı sağladık, şimdi de kaydettiklerini görmelerini sağlayalım. Aşağıdaki dosyayı goster.php olarak kaydedin: <? include "ayar.php"?> <? include "gerecler.php"?> <? if (!$baslangic) $baslangic = 0; /* Veritabanina baglan */ $link = mysql_connect($cfgdbhost,$cfgdbkul,$cfgdbsifre); /* SQL kodunu olustur */ $strsql = "SELECT * FROM defter ORDER BY tarih DESC LIMIT $baslangic,$cfglimit"; /* SQL sorgulamasını yap */ $sonuc PHP-1 31

32 /* Dönen satır sayısı */ $satir_sayi = mysql_num_rows($sonuc); /* $baslangic = 0 ise Önceki sayfa yoktur, değilse Önceki sayfa linkini yarat */ if ($baslangic == 0) $onceki = "Önceki"; else $fark = $baslangic - $cfglimit; $onceki = "<a href=\"goster.php?baslangic=$fark\">önceki</a>"; /* Sonraki linkini yarat */ if ($satir_sayi == $cfglimit) $fark = $baslangic + $cfglimit; $sonraki = "<a href=\"goster.php?baslangic=$fark\">sonraki</a>"; else $sonraki = "Sonraki"; /* Kontrol et */ include "baslik.php"; if ($sonuc):?> <? while ($satir = mysql_fetch_array($sonuc)):?> <table width="50%" align="center" bgcolor="#f8f8f8"> <td width="10%" class="liste-etiket">tarih:</td> <td width="40%" class="liste-veri"><? echo date("d-m-y", $satir[tarih])?></td> <td class="liste-etiket">đsim:</td> <td class="liste-veri"><? echo htmlspecialchars($satir[isim])?></td> PHP-1 32

33 <td class="liste-etiket">e-posta:</td> <td class="liste-veri"><? echo make_clickable($satir[posta])?></td> <td class="liste-etiket">url:</td> <td class="liste-veri"><? echo make_clickable($satir[url])?></td> <? /* Mesajın içindeki boşlukları HTML koduna dönüştürüyoruz */ $satir[mesaj] = str_replace("\n","<br>",$satir[mesaj]); /* Güvenlik sorunu yaratacak kodları temizliyoruz */ $satir[mesaj] = str_replace("<script","<yasak_script",$satir[mesaj]); $satir[mesaj] = str_replace("<style","<yasak_style",$satir[mesaj]); $satir[mesaj] = str_replace("<embed","<yasak_embed",$satir[mesaj]);?> <td class="liste-etiket" valign="top">görüşler:</td> <td class="liste-veri"><? echo htmlspecialchars($satir[mesaj])?></td> <td> </td> <td class="ufak">* * * * * * * * * *</td> </table> <? endwhile?> <table width="50%" align="center" bgcolor="#f8f8f8"> <td align="right" class="ufak"><? echo $onceki?> <? echo $sonraki?></td> </table> <p align = "center" class="ufak"> <a href="index.php">ana Ekran</a> <a href="ekleform.php">yeni Mesaj Yaz</a> <? else:?> <p align = "center" class="etiket">şu anda kayıtları gösteremiyoruz, özür dileriz.<br><br> PHP-1 33

34 Ana sayfaya <a href="index.php">buradan</a> dönebilirsiniz. <? endif?> <? include "son.php"?> // Screenshot zd02.tif Programın en çok üzerinde duracağımız bölümlerinden biri bu. Öncelikle en baş bölümü inceleyelim. Bu bölümde $baslangic ve $cfglimit değişkenlerimiz var. Bir de SQL kodu içerisindeki son bölümdeki LIMIT kullanımı. MySQL in en önemli avantajlarından biri LIMIT komutunun kullanımıdır. Ziyaretçi Defteri nizi siteye koyduğunuz ilk gün yüzlerce mesaj gelmeyecektir belki ama zamanla Ziyaretçi Defteri niz o kadar şişebilir ki kullanıcılar yüklenmek bilmeyen sayfalardan kaçar hale gelebilirler. Bunu önlemek için LIMIT ile veritabanından döndürdüğümüz kayıtların sayısını sınırlıyoruz. $baslangic değişkeni, sorgulama sonucu elde edilen sonuç tablosundaki değerlerin kaçıncı sıradan itibaren dikkate alınacağını, $cfglimit değişkeni de, dikkate alınacak değerlerin kaç tane olacağını belirler. Örneğin, LIMIT 5,10 kullanımı, beşinci kayıttan itibaren on tane kayıt oku anlamına gelmektedir. $cfglimit değişkenini ayar.php dosyasının içinden değiştirerek sonucun nasıl değiştiğini görebilirsiniz. LIMIT ile bir başka özelliği, Önceki / Sonraki özelliğini sayfamıza ekleyebiliyoruz. Çalışma prensibimiz ise şu şekilde: Her sayfada $cfglimit değişkeninin değeri kadar kayıt gösteriliyor. Bu durumda, ilk sayfada $baslangic değişkeninin değeri sıfır, ikinci sayfada $cfglimit, üçüncü sayfada $cfglimit * 2 şeklinde uzayıp gidecektir. Bizim tek yapacağımız, $baslangic degiskeninin degerini linkler ile sürekli bir sayfadan bir sayfaya aktarıp, önceki tıklandığında $cfglimit değişkeninin değeri kadar çıkarma yapmak, sonraki tıklandığında $cfglimit değişkeninin değeri kadar ekleme yapmak olacaktır. Böylece her sayfada LIMIT komutunun kullanımına uygun bir SQL kodu elde ederiz. Programımızın ziyaretçileri ilgilendiren kısmı bu kadar. localhost/kitapcik/zdefteri adresine gidip, programınızın çalışmasını inceleyebilirsiniz. Sitemize gelen insanlar her zaman iyi niyetli olacaklar diye bir şey yok. Ziyaretçi sayfanıza yazdıklarının aynen ekrana yansıdığını görünce Hadi bir de ufak bir javascript kodu yazayım da anlayalım bakalım ne kadar anlıyormuş bu işten diyebilir ve mesaj yerine sizin sayfanızı bozan, ya da mesajın bulunduğu sayfayı açan diğer ziyaretçileri başka sayfalara yönlendiren bir mesaj bırakabilir. Bu saldırıları önlemek için de, <script, <style, <embed gibi sitemizin görünüşünü ve işlevini etkileyebilecek etiketlerin hepsini str_replace() fonksiyonunu kullanarak değiştiriyoruz. Son olarak da, diğer html etiketleri ile saldırı yapılmasını önlemek için mesajı ekrana yazarken htmlspecialchars() fonksiyonunu kullanıyoruz. Bu fonksiyon sayesinde kötü niyetli ziyaretçimiz mesajını HTML kodlarıyla bezemiş olsa da bunların sitenin çalışmasına bir etkisi olmayacaktır. Gelelim yönetici bölümüne. Bu bölüme, anaklasor/yonetim URL sinden ulaşacaksınız, ama herkes değil, sadece siz! Şimdi en basit ve işlevsel haliyle bu işi nasıl yapacağız bakalım. Önce index.php dosyamızı inceleyelim. Bu daha önceki index.php dosyamızdan farklı bir dosya ve yine ondan farklı olarak /anaklasor/yonetim/index.php şeklinde kayıtlı olması gerekiyor: <? include "..\ayar.php"?> <? include "guvenlik.php"?> PHP-1 34

35 <? include "..\baslik.php"?> <table width="%50" align="center"> <td class="baslik">yönetim Ekranı</td> <td> </td> <td align="center"><a href="liste.php">kayıt Listesi</a></td> <td align="center"><a href="ciao.php">çıkış</a></td> </table> <? include "..\son.php"?> ayar.php ve baslik.php yi biliyoruz ama guvenlik.php nereden çıktı? Neden kullanmamız gerekiyor? Yönetici bölümüne koyduğunuz dosyaların diğer klasörlerdeki dosyalardan bir farkı yok. Bu nedenle yönetim dosyalarınızın nerede olduğunu bilen herhangi biri, tarayıcısından direk bu dosyanın adresini yazarak yönetim bölümüne ulaşabilir.peki bunu nasıl önleyebiliriz? Öyle bir dosyamız olsun ki, korumak istediğimiz bütün dosyaların başına ekleyelim, sadece bizim onay verdiğimiz kullanıcıların geçmesine izin versin. Đşte o dosya aşağıda: <? /* Kullanıcı login olmuş mu olmamış mı kontrol et. Olmamışsa kullanıcı adı ve şifre sor */ if (!$HTTP_COOKIE_VARS[sesid]) header("location: login.php"); else /* Oturum numarası (sesid) veritabanında var mı kontrol et. Numara yoksa kullanıcı adı ve şifre sor */ $link = mysql_connect($cfgdbhost); $strsql = "SELECT * FROM defter_yonetim WHERE sesid='$http_cookie_vars[sesid]'"; $sonuc = mysql_db_query($cfgdbisim,$strsql); if (!mysql_num_rows($sonuc)) PHP-1 35

36 header("location: login.php");?> // Screenshot zd03.tif Bir sonraki ekranda göreceğiniz gibi, kullanıcımızı cookie kullanarak takip ediyoruz. Kullanıcı adı ve şifreyi alacak, veritabanından kontrol edecek, bilgileri doğruysa bir cookie göndererek onun varlığından her işlemde haberdar olacağız. Peki cookie ye vermemiz gereken değerler nedir? Eğer cookie ile kullanıcı adı ve şifreyi gönderir, her seferinde de bu ikiliyi kontrol edersek, yine amacımıza ulaşmış oluruz, ama bu hiç güvenli olmaz. Çünkü cookie ler sonuçta text dosyalarıdır ve herhangi biri tarayıcınızın cache indeki dosyaları kurcalayarak bu bilgilere ulaşabilir. Çözüm? Çözüm, oturum numarası (sesid) adını vereceğimiz, md5() algoritması ile boyunu uzatacağımız bir değer kullanmak. Md5() ve microtime() fonksiyonlarını bir arada kullanarak, o andaki mikrosaniyeyi temel alan 32 karakter uzunluğunda harfler ve sayılardan oluşan bir değer elde ediyoruz. Bu değerin aynı anda başka bir kullanıcı tarafından alınabilme ihtimalinin kaçta kaç olabileceğini tahmin edebiliyorsunuz (ya da edemiyorsunuz :) herhalde. Đşte bu oluşturduğumuz değeri de cookie olarak kullanıcıya atacağız ve daha sonra aynı değeri kullanıcının veritabanındaki bölümünün sesid alanına yazdıracağız. Böylece, önce kullanıcıda cookie nin olup olmadığını kontrol edecek, cookie varsa, bu cookie nin doğruluğunu veritabanına sorup onaylatacağız. Şimdi geri dönelim, kullanıcı giriş ekranının kodlarını inceleyelim: <? include "../baslik.php"?> <form action="kontrol.php" method="post"> <table width="50%" align="center"> <td class="etiket">kullanıcı Adı:</td> <td><input type="text" name="kullanici" size="20" maxlength="20"></td> <td class="etiket">şifre:</td> <td><input type="text" name="sifre" size="20" maxlength="20"></td> <td> </td> <td><input type="submit" value=" G ö n d e r "></td> </table> </form> PHP-1 36

37 <? include "../son.php"?> Yukarıdaki kodları yonetim klasörü içinde login.php olarak kaydedin. Formdaki bilgiler aşağıdaki kontrol.php dosyasına gönderilecek: <? include "../ayar.php"?> <? /* Kullanıcı adı ve şifreyi veritabanından kontrol et */ $link = mysql_connect($cfgdbhost); $strsql = "SELECT id,kullanici,sesid FROM defter_yonetim WHERE kullanici='$kullanici' "; $strsql.= "AND sifre='$sifre'"; $sonuc = mysql_db_query($cfgdbisim,$strsql); $satir = mysql_fetch_array($sonuc); if (!mysql_num_rows($sonuc)): include "../baslik.php";?> <p class="etiket">hatalı kullanıcı adı veya şifre. <p class="etiket">lütfen geri dönüp <a href="login.php">tekrar deneyin.</a> <? include "../son.php"; else: /* Kullanıcı takibi için kullanılacak cookie yazdırılıyor */ /* Oturum numarası belirleniyor */ $sesid = md5(microtime()); /* Zaman belirtmediğimiz için cookie tarayıcı kapanana kadar aktif kalacak */ setcookie("sesid",$sesid); /* Sesid veritabanına yazdırılıyor */ $strsql = "UPDATE defter_yonetim SET sesid='$sesid' WHERE id=$satir[id]"; $sonuc = mysql_db_query($cfgdbisim,$strsql); include "../baslik.php";?> <p class="etiket">hoşgeldiniz <? echo $kullanici?> <p class="etiket"><a href="index.php">yönetim ekranı</a> <? include "../son.php"; endif;?> kontrol.php dosyası, gelen kullanıcı adı ve şifre bilgilerini veritabanından onaylatıyor, PHP-1 37

38 doğruysa md5 microtime ikilisini kullanarak yeni bir oturum numarası yaratıyor ve bunu önce kullanıcının tarayıcısına cookie olarak gönderiyor, sonra da veritabanındaki aynı kullanıcıya ait kaydın sesid alanının değerini güncelliyor. Böylece guvenlik.php dosyası ile kullanıcının login olup olmadığını takip edebileceğiz. Yönetim Bölümü yapmamızın da bir nedeni var tabii, ziyaretçilerimizin ekledikleri yazıları kendi isteğimiz doğrultusunda değiştirmek. Bunu yapabilmek için üç tane ekrana ihtiyacımız olacak. Birincisi kayıtları listeleyecek, ikincisi bu kayıtlardan istediğimizi değiştirmemizi, sonuncusu da silmemizi sağlayacak. Önce liste.php dosyasının içeriğine bakalım: <? include "../ayar.php"?> <? /* Veritabanina baglan */ $link = mysql_connect($cfgdbhost,$cfgdbkul,$cfgdbsifre);?> <? include "guvenlik.php"?> <? if (!$baslangic) $baslangic = 0; /* SQL kodunu olustur */ $strsql = "SELECT * FROM defter ORDER BY tarih DESC LIMIT $baslangic,$cfglimit"; /* SQL sorgulamasını yap */ $sonuc /* Dönen satır sayısı */ $satir_sayi = mysql_num_rows($sonuc); /* $baslangic = 0 ise Önceki sayfa yoktur, değilse Önceki sayfa linkini yarat */ if ($baslangic == 0) $onceki = "Önceki"; else $fark = $baslangic - $cfglimit; $onceki = "<a href=\"liste.php?baslangic=$fark\">önceki</a>"; /* Sonraki linkini yarat */ if ($satir_sayi == $cfglimit) PHP-1 38

39 $fark = $baslangic + $cfglimit; $sonraki = "<a href=\"liste.php?baslangic=$fark\">sonraki</a>"; else $sonraki = "Sonraki"; include "../baslik.php"; if ($sonuc): /* Kayıtları listelemeden önce tablomuzun sabit kalacak ilk satırını yaratıyoruz */?> <table width="100%" align="center" bgcolor="#f8f8f8"> <td width="13%" class="liste-etiket">tarih</td> <td width="18%" class="liste-etiket">đsim</td> <td width="19%" class="liste-etiket">e-posta</td> <td width="19%" class="liste-etiket">url</td> <td width="30%" class="liste-etiket">görüşler</td> <td width="5%"> </td> <td width="3%"> </td> <? while ($satir = mysql_fetch_array($sonuc)):?> <td class="liste-veri"><? echo date("d-m-y", $satir[tarih])?></td> <td class="liste-veri"><? echo $satir[isim]?></td> <td class="liste-veri"><? echo $satir[posta]?></td> <td class="liste-veri"><? echo $satir[url]?></td> <td class="liste-veri"> <? /* Güvenlik sorunu yaratacak kodları temizliyoruz */ $satir[mesaj] = str_replace("<script","<yasak_script",$satir[mesaj]); $satir[mesaj] = str_replace("<style","<yasak_style",$satir[mesaj]); $satir[mesaj] = str_replace("<embed","<yasak_embed",$satir[mesaj]); /* Mesaj 30 karakterden uzun ise devam ettiğini üç nokta ile belirtelim */ if (strlen($satir[mesaj]) <= 30) PHP-1 39

40 ?> echo htmlspecialchars($satir[mesaj]); else </td> echo substr($satir[mesaj],0,30). "..."; <? /* Her kayıt için Değiştir ve Sil linkleri ekleyelim */?> <td class="liste-veri"><a href="degistir.php?id=<? echo $satir[id]?>&baslangic=<? echo $baslangic?>">değiştir</a></td> <td class="liste-veri"><a href="sil.php?id=<? echo $satir[id]?>&baslangic=<? echo $baslangic?>">sil</a></td> <? endwhile?> </table> <table width="100%" align="center" bgcolor="#f8f8f8"> <td> </td> <td class="liste-veri" align="left"><a href="index.php">yönetim Ekranı</a></td> <td class="liste-veri" align="right"><? echo $onceki?> <? echo $sonraki?></td> </table> <? else:?> <p align = "center" class="etiket">şu anda kayıtları gösteremiyoruz, özür dileriz.<br><br> Ana sayfaya <a href="index.php">buradan</a> dönebilirsiniz. <? endif?> <? include "../son.php"?> // Screenshot zd04.tif liste.php dosyası, ilk bölümdeki goster.php dosyasından pek de farklı değil. Bu sefer kayıtların her biri için ayrı Değiştir ve Sil linkleri koymak istediğimiz için, kayıtları birden fazla satıra yaymak yerine her kayıdı tek bir satırda topladık. Böylece kayıtların yönetimini de daha kolaylaştırmış olduk. Tabii ki uzun mesajların hepsini okumaktan da feragat etmiş olduk PHP-1 40

41 ama bu önemli değil, istediğimiz mesajın Değiştir linkine tıkladığımızda yazılan mesajı bütünüyle görebileceğiz. Veritabanından verileri çekip ekrana tablo halinde yazarken, tablonun başlık kısmını oluşturacak satırı döngünün içine sokmamış olduğunuza dikkat edin. Verileri listelerken kullandığımız en önemli komut mysql_fetch_array komutu. Bu komut, tablodaki alan isimleriyle aynı olacak şekilde, bir dizi-değişken yaratıyor ve tablodaki değerleri bu dizideğişkene atıyor. Bu kullanımı daha iyi kavramak için, $satir değişkenini nasıl oluşturduğumuza, nasıl döngüye soktuğumuza ve verileri ekrana yazdırırken nasıl kullandığımız üzerinde yoğunlaşın. Mysql_fetch_array fonksiyonunun kullanımını tam olarak öğrendiğinizde, veritabanlarına çok daha iyi hakim olmaya başlayacaksınız. Đkinci adım, sırasıyla değiştir.php ve guncelle.php dosyalarına bakalım: // Screenshot zd05.tif <? include "../ayar.php"?> <? $link = mysql_connect($cfgdbhost,$cfgdbkul,$cfgdbsifre);?> <? include "guvenlik.php"?> <? /* Veritabanından bilgileri al */ $strsql = "SELECT * FROM defter WHERE id=$id"; $sonuc $satir = mysql_fetch_array($sonuc);?> <? include "../baslik.php"?> <form action="guncelle.php" method="post"> <? /* Hangi kaydı değiştireceğimizi unutmamak için 'id' değişkenini?> formun 'hidden' özelliği ile guncelle.php dosyasına aktarıyoruz */ <input type="hidden" name="id" value="<? echo $id?>"> <input type="hidden" name="baslangic" value="<? echo $baslangic?>"> <table width="75%" border="0" align="center" bgcolor="#f8f8f8"> <td class="baslik">kayıt Yönetim Ekranı</td> </table> <table width="75%" border="0" align="center" bgcolor="#f8f8f8"> <td> </td> PHP-1 41

42 <td class="etiket">đsim ve Soyadı: </td> <td class="etiket"><input type="text" name="isim" size="35" maxlength="50" value="<? echo $satir[isim]?>"></td> <td class="etiket">e-posta Adresiniz: </td> <td class="etiket"><input type="text" name="posta" size="35" maxlength="100" value="<? echo $satir[posta]?>"></td> <td class="etiket">url'niz: </td> <td class="etiket"><input type="text" name="url" size="35" maxlength="50" value="<? echo $satir[url]?>"></td> <td valign="top" class="etiket">görüşleriniz: </td> <td><textarea cols="25" rows="5" name="mesaj"><? echo $satir[mesaj]?></textarea></td> <td class="etiket"></td> <td> </td> <td align="center" class="ufak"><a href="index.php">ana Ekran</a> <a href="liste.php?baslangic=<? echo $baslangic?>">liste</a></td> <td><input type="submit" value=" G ü n c e l l e "> <input type="reset"></td> </table> </form> <? include "../son.php"?> Yukardaki dosyayı değiştir.php olarak kaydedin. Kayıt değiştirirken, bütün kayıtları listelemekten farklı olarak, tek bir kaydı arayıp bulmamız lazım. Veritabanını yaratırken, tablomuzda otomatik_artan (auto_increment) bir alan tanımladık: id. Her kayıdın kendine özgü bir id I var, ve auto_increment özelliği de bu özgünlüğün devamını sağlıyor. liste.php dosyasında, Değiştir ve Sil linklerini oluştururken yaptıklarımıza dikkat edin: id=sayı değerlerini ekledik. Ve yine dikkat ederseniz, her kayıt için bu id numarası farklıdır. Tarayıcınızdaki linkte yazan id=sayı ikilisindeki sayı, tablonuzdaki id alanının o kayda ait değerinden başka bir şey değildir. PHP-1 42

43 degistir.php dosyasında da, bu id değişkenini kullanarak, istediğimiz tek kayıda ait bilgileri veritabanından çekip çıkarıyoruz ve aldığımız bilgileri yeni bir forma yazıyoruz. Bundan sonraki aşama, bu formdaki değişiklikler bittikten sonra guncelle.php ile bu bilgilerin güncellenmesi: <? include "../ayar.php"?> <? $link = mysql_connect($cfgdbhost,$cfgdbkul,$cfgdbsifre);?> <? include "guvenlik.php"?> <? $strsql = "UPDATE defter SET isim='$isim',posta='$posta',url='$url',"; $strsql.= "mesaj='$mesaj' WHERE id=$id"; $sonuc /* Listeleme ekranına dön */ header ("Location: liste.php?baslangic=$baslangic");?> Yukardaki kodlar guncelle.php dosyasına ait. Veritabanında güncelleme yapmak için UPDATE komutunu kullanıyoruz. degistir.php dosyasındaki formda hidden olarak tanımlayarak, değişiklik yapmak istediğimiz kaydın veritabanındaki id ini guncelle.php dosyasına da geçirdik. Bunu yapmayı sakın unutmayın, yoksa MySQL hangi kaydı güncellemek istediğinizi asla bilemez. $baslangic değişkenini de hidden alan olarak taşımıştık, buradaki amacımız, 3.sayfadaki bir kaydı değiştirdiğinizde, yeni baştan liste.php yü çağırırken listelemenin 1.sayfadan başlaması yerine 3.sayfadan başlamasını sağlamak. Son adım, kayıt silme. Aşağıdaki dosyayı sil.php olarak kaydedin: <? include "../ayar.php"?> <? $link = mysql_connect($cfgdbhost,$cfgdbkul,$cfgdbsifre);?> <? include "guvenlik.php"?> <? $strsql = "DELETE FROM defter WHERE id=$id"; $sonuc /* Listeleme ekranına dön */ header ("Location: liste.php?baslangic=$baslangic");?> Kaydı tek seferde sildiğimize dikkat edin, geri dönüşü yok. Kullanıcının silmeden önce onaylamasını istiyorsanız, ya javascript kullanacaksınız, ya da Değiştir de yaptığımız gibi, önce araya kullanıcının emin olup olmadığını soran bir form koyacaksınız. Unutmadan, yöneticinin programla işi bittiğinde güvenlik açısından çıkarken cookie yi yok etmesi önemlidir. Bizim kullanım şeklimizle cookie, yöneticinin tarayıcısında tarayıcı ekranını kapatıncaya kadar aktif olacaktır. Bu setcookie ile cookie ye belli bir ömür biçilerek değiştirilebilir. Her iki kullanımda da, işimizi şansa bırakmamak için programdan çıkmalıyız. Bunun için ciao.php dosyasını kullanacağız: <? include "../ayar.php"?> <? include "guvenlik.php"?> PHP-1 43

44 <? setcookie("sesid")?> <? include "../baslik.php"?> <p>yönetim Bölümü'nden çıktınız.<br> Ziyaretçi Defteri'ne dönmek için <a href="../index.php">tıklayın.</a> <? include "../son.php"?> Ziyaretçi Defteri nin kodları ve açıklaması bu kadar. Sitenize kullanıcı girişi yapılmasına izin verdiğinizde bunun kötü niyetlilere (ya da bilinçsiz kullanıcılara) davetiye çıkartmak olduğunu unutmayın. Örneğin birçok kullanıcı, e-posta adreslerini ve URL lerini hatalı yazacaktır. Bunları kontrol eden bir mekanizma oluşturmalısınız. Daha önce de verdiğim adresinde, bu tip pis :) işleri yapan değişik kodlara ulaşabilirsiniz. PHP-1 44

Php Programlama Dili MySQL Uygulamaları

Php Programlama Dili MySQL Uygulamaları Php Programlama Dili İle MySQL Uygulamaları S.Çağlar Onur [email protected] İşlenecek Konular? Php Nedir? MySQL Nedir? Kullanılan Yazılımlar MySQL e Bağlanmak MySQL ile İlgili Bilgi Almak Veritabanlar

Detaylı

Internet Programming II. Elbistan Meslek Yüksek Okulu 2014 2015 Bahar Yarıyılı

Internet Programming II. Elbistan Meslek Yüksek Okulu 2014 2015 Bahar Yarıyılı Internet Programming II Elbistan Meslek Yüksek Okulu 2014 2015 Bahar Yarıyılı Öğr. Gör. Murat KEÇECĠOĞLU 11-14 May. 2014 Form Form İşlemleri Tarayıcıdan bilgi alarak işlem gerçekleştirme FORM elemanları

Detaylı

http://alikoker.name.tr

http://alikoker.name.tr MySQL PHP web geliştiricileri genel olarak database tercihlerini çok rahat sql komutları yardımıyla kontrol edilebilen MySQL den yana kullanılar. Özellikle PHP+MySQL+Apache üçlüsü performans olarak web

Detaylı

Web Formlar ve Sayfalar Arasında Bilgi Gönderme. BATML İnternet Programcılığı 1

Web Formlar ve Sayfalar Arasında Bilgi Gönderme. BATML İnternet Programcılığı 1 Web Formlar ve Sayfalar Arasında Bilgi Gönderme BATML İnternet Programcılığı 1 Bazı web sitelerinde sayfalar arasında bilgi veya değişken göndermek gerekebilir. Gönderilen bu bilgi kullanıcı adı ve şifre

Detaylı

Bölüm 10: PHP ile Veritabanı Uygulamaları

Bölüm 10: PHP ile Veritabanı Uygulamaları Bölüm 10: PHP ile Veritabanı Uygulamaları -231- Öğr.Gör. Serkan DİŞLİTAŞ 10.1. PHP PHP, platformdan bağımsız sunucu taraflı çalışan betik bir web programlama dilidir. PHP programlama dili ile MySQL, MSSQL,

Detaylı

Aşağıdaki tabloyu inceleyin. Sorgulama işlemlerini bu tabloya göre yapacağız.

Aşağıdaki tabloyu inceleyin. Sorgulama işlemlerini bu tabloya göre yapacağız. Bu Derste Öğrenecekleriniz: 1- Basit Sorgulamalar a. Tablodan tüm alanları sorgulama b. Tablodan alanları belirterek sorgulama c. Tekrarlı satırları önleme d. Belirli sayıda veya oranda sorgulama yapma

Detaylı

İNTERNET PROGRAMCILIĞI DERSİ ÇALIŞMA SORULARI

İNTERNET PROGRAMCILIĞI DERSİ ÇALIŞMA SORULARI İNTERNET PROGRAMCILIĞI DERSİ ÇALIŞMA SORULARI 1) Aşağıdaki seçeneklerin hangisinde PHP kod yazımı doğru olarak verilmiştir? A) B) C).. D) 2) PHP ile hazırlanmış

Detaylı

PHP ile İnternet Programlama

PHP ile İnternet Programlama PHP ile İnternet Programlama Doç.Dr. Gazi Üniversitesi Gazi Eğitim Fakültesi Bilgisayar ve Öğretim Teknolojileri Eğitimi Bölümü 5. BÖLÜM: Oturum Yönetimi ve Güvenlik Sayfaya Yönlendirme PHP sayfamızdan

Detaylı

İnternet Programcılığı

İnternet Programcılığı 1 PHP le Ver tabanı İşlemler Yaptığımız web sitelerinin daha kullanışlı olması için veritabanı sistemleri ile bağlantı kurup ihtiyaca göre verileri okuyup yazmasını isteriz. 1.1 Veritabanı Nedir? Veritabanı

Detaylı

İÇERİK YÖNETİM SİSTEMİ (CMS) Bir web sitesi yayınlamak için yapılması gerekenler:

İÇERİK YÖNETİM SİSTEMİ (CMS) Bir web sitesi yayınlamak için yapılması gerekenler: İÇERİK YÖNETİM SİSTEMİ (CMS) Bir web sitesi yayınlamak için yapılması gerekenler: Yer satın alınır. İsim tescil ettirilir. Ftp ile wordpress klasörü upload edilir. Kendi bilgisayarımızda web sitesi yayınlamak

Detaylı

Javascript. 1) Notepad++ aşağıdaki kodları yazıp deneme.html olarak kaydedelim. 2) Biraz önceki sayfa sadece html kodların içeriyordu.

Javascript. 1) Notepad++ aşağıdaki kodları yazıp deneme.html olarak kaydedelim. 2) Biraz önceki sayfa sadece html kodların içeriyordu. Javascript Html sayfalarının içine yazılarak, sayfayı daha etkileşimli hale getirir. click olayları, uyarı mesajları gibi hareketlerle sayfayı daha dinamik hale getirir. Javascript olmadan yazılan html

Detaylı

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA PROGRAMLAMA Öğr. Gör. Utku SOBUTAY İÇERİK 2 Java da Fonksiyon Tanımlamak Java da Döngüler Java da Şart İfadeleri Uygulamalar Java da Fonksiyon Tanımlamak JAVA DA FONKSİYON TANIMLAMAK 4 Fonksiyonlar;

Detaylı

Bu işleçlerin dışında, aşağıda belirtilen karşılaştırma işleçlerinden de yararlanılır.

Bu işleçlerin dışında, aşağıda belirtilen karşılaştırma işleçlerinden de yararlanılır. 18 SQL SORGU DİLİ SQL (Structured Query Language) yapısal sorgu dili, veritabanı yönetim sistemlerinin standart programlama dili olarak bilinmektedir. SQL dilinin Access içinde sorgu pencerelerinde veya

Detaylı

Php İle Mysql Veritabanından Bilgi Çekme

Php İle Mysql Veritabanından Bilgi Çekme Mysql_fetch_assoc, mysql_fetch_row, mysql_fetch_object, mysql_fetch_array ve mysql_result metodları Uygulamada kullanacağımız veritabanı Veritabanı: kitaplik Tablo: kitaplar isbn adi yazari 944503382 Adım

Detaylı

İNTERNET PROGRAMCILIĞI 2 10. HAFTA MYSQL - PHPMYADMIN. Hazırlayan Fatih BALAMAN. İçindekiler. Hedefler. Mysql Nedir.

İNTERNET PROGRAMCILIĞI 2 10. HAFTA MYSQL - PHPMYADMIN. Hazırlayan Fatih BALAMAN. İçindekiler. Hedefler. Mysql Nedir. İNTERNET PROGRAMCILIĞI 2 10. HAFTA İçindekiler MYSQL - PHPMYADMIN Mysql Nedir PhpMyAdmin Nedir PhpMyAdmin Arayüzü Hedefler Mysql' in görevini söyleyebilir PhpMyAdmin' in kullanım amacını söyler Hazırlayan

Detaylı

DAO İLE SQL KOMUTLARI. Sql komutlarını artık veri tabanında kullanmaktan başka çaremiz yok arkadaşlar. Şimdi bu sql derslerimize başlayalım.

DAO İLE SQL KOMUTLARI. Sql komutlarını artık veri tabanında kullanmaktan başka çaremiz yok arkadaşlar. Şimdi bu sql derslerimize başlayalım. DAO İLE SQL KOMUTLARI Sql komutlarını artık veri tabanında kullanmaktan başka çaremiz yok arkadaşlar. Şimdi bu sql derslerimize başlayalım. SQL-1 SELECT En basit SQL cümleciği oluşturmak için SELECT sözcüğü

Detaylı

VERİTABANI. SQL (Structured Query Language)

VERİTABANI. SQL (Structured Query Language) VERİTABANI SQL (Structured Query Language) SQL'de Gruplama Bir tablonun satırları gruplara ayrılarak fonksiyonların bunlara uygulanması mümkündür. Gruplara ayırmak için SELECT deyimi içerisinde GROUP BY

Detaylı

-- işareti tek satırlık açıklamalarda kullanılır. Açıklama olarak yazılan satırın önüne konulması yeterlidir.

-- işareti tek satırlık açıklamalarda kullanılır. Açıklama olarak yazılan satırın önüne konulması yeterlidir. T-SQL KODLARİ İÇERİSİNE AÇIKLAMA EKLEME Bir veya daha fazla satırın çalıştırılmasını Önlemek için veya /*... */" ifadeleri kullanılır. -- işareti tek satırlık açıklamalarda kullanılır. Açıklama olarak

Detaylı

Internet Programming II. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı

Internet Programming II. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı Internet Programming II Elbistan Meslek Yüksek Okulu 2015 2016 Bahar Yarıyılı Öğr. Gör. Murat KEÇECĠOĞLU 23 May. 2016 Form Form İşlemleri Tarayıcıdan bilgi alarak işlem gerçekleştirme FORM elemanları yardımıyla

Detaylı

Laboratuar Notları #5

Laboratuar Notları #5 The European Union s Making the Labour Market more Inclusive III programme For North Cyprus Upgrading Internet Technology skills of Information and Communication Technologies (ICT) Professionals Module

Detaylı

Yaptığımız web sitelerinin daha kullanışlı olması için veritabanı sistemleri ile bağlantı kurup ihtiyaca göre verileri okuyup yazmasını isteriz.

Yaptığımız web sitelerinin daha kullanışlı olması için veritabanı sistemleri ile bağlantı kurup ihtiyaca göre verileri okuyup yazmasını isteriz. 1 PHP ile Veritabanı İşlemleri Yaptığımız web sitelerinin daha kullanışlı olması için veritabanı sistemleri ile bağlantı kurup ihtiyaca göre verileri okuyup yazmasını isteriz. 1.1 Veritabanı Nedir? Veritabanı

Detaylı

SQL PROGRAMLAMA. Bir batch, bir arada bulunan bir dizi SQL deyimidir. Batch ayıracı GO deyimidir.

SQL PROGRAMLAMA. Bir batch, bir arada bulunan bir dizi SQL deyimidir. Batch ayıracı GO deyimidir. SQL PROGRAMLAMA BATCH Bir batch, bir arada bulunan bir dizi SQL deyimidir. Batch ayıracı deyimidir. SELECT. UPDATE...... DELETE.. BATCH BATCH Özellikleri 1- Bir batch içinde bir deyimde yazım hatası olduğunda

Detaylı

Örnek bir kullanım ve bilgisayar ağlarını oluşturan bileşenlerin özeti

Örnek bir kullanım ve bilgisayar ağlarını oluşturan bileşenlerin özeti Bu sayfaları okuduğunuza göre bir şekilde bilgisayarlar ve bilgisayar ağlarıyla ilişkiniz olduğunu biliyorum. Ancak yine de en başta niçin bilgisayar ağı kullanıyoruz sorusunun cevabını vermekle işe başlayabiliriz.

Detaylı

PHP'ye Giriş Türkiye PHP Grubu - Linux Şenlikleri PHP Eğitim / Tanıtım Seminerleri Ankara, 11 Mayıs 2006 Hidayet Doğan <hdogan@hido.

PHP'ye Giriş Türkiye PHP Grubu - Linux Şenlikleri PHP Eğitim / Tanıtım Seminerleri Ankara, 11 Mayıs 2006 Hidayet Doğan <hdogan@hido. PHP'ye Giriş Türkiye PHP Grubu - Linux Şenlikleri PHP Eğitim / Tanıtım Seminerleri Ankara, 11 Mayıs 2006 Hidayet Doğan PHP Nedir? Genel kullanım amaçlı bir betik/programlama dilidir.

Detaylı

VERİ TABANI YÖNETİM SİSTEMLERİ I

VERİ TABANI YÖNETİM SİSTEMLERİ I BÖLÜM 11 11. SQL de JOIN (BİRLEŞTİRME) İŞLEMİ 11.1. JOIN (Birleştirme) İşlemi Veri tabanı kayıtları oluşturulurken bütün bilgiler bir tabloda değil de, birkaç tablo üzerinde tutulur. Bu dataların daha

Detaylı

PHP 1. Hafta 2.Sunum

PHP 1. Hafta 2.Sunum PHP 1. Hafta 2.Sunum Hello World Bu derste görülecekler WAMP ve PHP Hosting kavramı ve bizi neden ilgilendirmediği Domain ve localhost kavramları www klasörü İlk PHP kodunun

Detaylı

İNTERNET PROGRAMCILIĞI - II

İNTERNET PROGRAMCILIĞI - II 0 İÇİNDEKİLER Bölüm 1 PHP İle Web Programlamaya Giriş 1 Bölüm 2 PHP Kodlama Standartları 5 Bölüm 3 PHP Değişken Kullanımı 17 Bölüm 4 IF Yapısı 32 Bölüm 5 Döngüler ve Diziler 64 1 BÖLÜM 1 PHP İLE WEB PROGRAMLAMAYA

Detaylı

Veritabanı. SQL (Structured Query Language)

Veritabanı. SQL (Structured Query Language) Veritabanı SQL (Structured Query Language) SQL (Structured Query Language) SQL, ilişkisel veritabanlarındaki bilgileri sorgulamak için kullanılan dildir. SQL, bütün kullanıcıların ve uygulamaların veritabanına

Detaylı

Bu makalede 2003 sunucu, Windows 2003 Server anlamına gelmektedir. Aşağıda yapılan işlemler 2003 R2 sunucu üzerinde denenmiş ve çalıştırılmıştır.

Bu makalede 2003 sunucu, Windows 2003 Server anlamına gelmektedir. Aşağıda yapılan işlemler 2003 R2 sunucu üzerinde denenmiş ve çalıştırılmıştır. WINDOWS 2003 SUNUCULARI ÜZERĐNE PHP YÜKLENMESĐ ERDAL YAZICIOĞLU erdal(at)gmail.com http://barbarossa41.wordpress.com Merhabalar, Çözümpark.com adresinde bir kullanıcı ASP ve PHP yi aynı sunucu üzerinde

Detaylı

8. HAFTA KBT204 İNTERNET PROGRAMCILIĞI II. Öğr.Gör. Hakan YILMAZ. [email protected]

8. HAFTA KBT204 İNTERNET PROGRAMCILIĞI II. Öğr.Gör. Hakan YILMAZ. hakanyilmaz@karabuk.edu.tr 8. HAFTA KBT204 İNTERNET PROGRAMCILIĞI II Öğr.Gör. Hakan YILMAZ [email protected] Karabük Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi 2 İçindekiler QUERYSTRING KOLEKSIYONU... 3 FORM

Detaylı

PHP I PHP I. E. Fatih Yetkin. 26 Eylül 2011

PHP I PHP I. E. Fatih Yetkin. 26 Eylül 2011 PHP I E. Fatih Yetkin 26 Eylül 2011 Outline Temel Tanımlar HTML e Giriş PHP ye Giriş MySQL ve PHP Temel Tanımlar Web Sunucu Nedir? Teknik detaylar bir kenara bırakılacak olursa, hazırlanan web sayfasını

Detaylı

WEB TASARIM I. Öğr. Gör. M. Mutlu YAPICI. Ankara Üniversitesi Elmadağ Meslek Yüksekokulu

WEB TASARIM I. Öğr. Gör. M. Mutlu YAPICI. Ankara Üniversitesi Elmadağ Meslek Yüksekokulu WEB TASARIM I Öğr. Gör. M. Mutlu YAPICI Ankara Üniversitesi Elmadağ Meslek Yüksekokulu Ders İzlencesi Hafta Modüller/İçerik/Konular 1. Hafta PHP Tanımı ve Sunucu Kurulumları 2. Hafta PHP Yazım Notasyonu

Detaylı

Ecat 8. Hakbim Bilgi İşlem A.Ş. Versiyon

Ecat 8. Hakbim Bilgi İşlem A.Ş. Versiyon Ecat 8 Hakbim Bilgi İşlem A.Ş. Versiyon 2015 01.01 1 Ecat8 Nedir? Firmaların elektronik yedek parça kataloğu ihtiyacını karşılamak için Hakbim Bilgi İşlem tarafından geliştirilmiş ve geliştirilmeye devam

Detaylı

SQL Uyarı Programı Kurulum ve Kullanımı

SQL Uyarı Programı Kurulum ve Kullanımı SQL Uyarı Programı Kurulum ve Kullanımı Kurulum 1. SQL Uyarı.zip dosyası açılır. 2. SQL Uyarı.exe programı çalıştırılır. 3. Üstteki ekran açılır ok. Butonuna basılır. 4. Ayarlar ekranı seçilir. 4.1 Server

Detaylı

Öğr. Gör. Serkan AKSU http://www.serkanaksu.net. http://www.serkanaksu.net/ 1

Öğr. Gör. Serkan AKSU http://www.serkanaksu.net. http://www.serkanaksu.net/ 1 Öğr. Gör. Serkan AKSU http://www.serkanaksu.net http://www.serkanaksu.net/ 1 JavaScript JavaScript Nedir? Nestcape firması tarafından C dilinden esinlenerek yazılmış, Netscape Navigator 2.0 ile birlikte

Detaylı

9. HAFTA KBT204 İNTERNET PROGRAMCILIĞI II. Öğr.Gör. Hakan YILMAZ. [email protected]

9. HAFTA KBT204 İNTERNET PROGRAMCILIĞI II. Öğr.Gör. Hakan YILMAZ. hakanyilmaz@karabuk.edu.tr 9. HAFTA KBT204 İNTERNET PROGRAMCILIĞI II Öğr.Gör. Hakan YILMAZ [email protected] Karabük Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi 2 İçindekiler Request Nesnesinin Özellikleri

Detaylı

1. Hafta MS SQL Server 2008 Kurulum ve Tanıtımı BPR255 Veritabanı. Bu Derste Öğrenecekleriniz: Kurulum:

1. Hafta MS SQL Server 2008 Kurulum ve Tanıtımı BPR255 Veritabanı. Bu Derste Öğrenecekleriniz: Kurulum: Bu Derste Öğrenecekleriniz: 1- MS SQL Server 2008 Kurulumu ve Tanıtımı 2- Komut Kullanarak Veritabanı Oluşturma ve Silme 3- SQL Yazım Kuralları Kurulum: Sistem gereksinimleri: Desteklenen işletim sistemleri:

Detaylı

Bilgisayar Uygulamaları. MySql

Bilgisayar Uygulamaları. MySql MySql MySql,; Oracle, Progress, MsSql, PostgreSql gibi veri tabanı programıdır. Kullanılan dil SQL (Structured Query Language) yapısal sorgulama dilidir. Lisansı GNU General Public License olarak bilinen

Detaylı

ÇANKAYA ÜNİVERSİTESİ WEBMAIL KULLANIM KLAVUZU

ÇANKAYA ÜNİVERSİTESİ WEBMAIL KULLANIM KLAVUZU ÇANKAYA ÜNİVERSİTESİ WEBMAIL KULLANIM KLAVUZU Üniversitemiz Webmail servisi yenilenmiş olup Roundcube webmail üzerinden servis vermeye başlamıştır. Daha önce kullanılan SquirrelMail servisi https://oldwebmail.cankaya.edu.tr/

Detaylı

if (ad == "Sabri") Console.WriteLine("Merhaba Sabri. Ne zamandır gözükmüyodun...");

if (ad == Sabri) Console.WriteLine(Merhaba Sabri. Ne zamandır gözükmüyodun...); Koşul İfadeleri ve Akış Kontrolü Koşul ifadeleri ve akış kontrolleri programlama dillerinde her zaman en önemli yeri tutmaktadır. Yazdığımız uygulamanın hangi koşulda nasıl davranacağını belirterek bir

Detaylı

İnternet Programcılığı Dersi 2.Dönem Ders Notu

İnternet Programcılığı Dersi 2.Dönem Ders Notu İnternet Programcılığı Dersi 2.Dönem Ders Notu DEĞİŞKEN TİPLERİ TAM SAYI (İNTEGER) VERİ TİPİ Negatif veya pozitif ondalık kısmı bulunmayan sayılardır. Örnek: $i=65; $x=345; ONDALIK(REAL)VERİ TİPİ Ondalıklı

Detaylı

SP_RENAMEDB eski_isim, yeni_isim VEYA SP_RENAMEDB 'eski isim', 'yeni isim'

SP_RENAMEDB eski_isim, yeni_isim VEYA SP_RENAMEDB 'eski isim', 'yeni isim' Bu Derste Öğrenecekleriniz: 1- Veri Tabanı Adı Değiştirme 2- Nesnelerin Adını Değiştirme a. Tablo Adı Değiştirme b. Alan Adı Değiştirme c. Constraint (Kısıtlama) Adı Değiştirme 3- Tablo Düzenleme Komutları

Detaylı

Ortamınızda A.D. veya LDAP sistemi var ise aşağıdaki linkten KoruMail LDAP-AD isimli dokümanı inceleyebilirsiniz.

Ortamınızda A.D. veya LDAP sistemi var ise aşağıdaki linkten KoruMail LDAP-AD isimli dokümanı inceleyebilirsiniz. KoruMail, kullanıcı doğrulama işlemi için herhangi bir dizin sunucu (MS Active Directory, Novell edirectory, Sun Directory Server, OpenLDAP) olmadığı durumlarda kullanıcıları dizin sunucu yerine, MySQL

Detaylı

SQL Komutları (2) Uzm. Murat YAZICI

SQL Komutları (2) Uzm. Murat YAZICI SQL Komutları (2) Uzm. Murat YAZICI Sıralama Sıralama işlemi için SELECT ifadesinde ORDER BY kullanılır. Bu ifadede ASC kelimesi kullanılırsa sıralama küçükten büyüğe doğru (A-Z), DESC kullanılırsa büyükten

Detaylı

İNTERNET PROGRAMCILIĞI 2 14. HAFTA. PHP ile FORM İŞLEMLERİ. Hazırlayan Fatih BALAMAN. İçindekiler. Hedefler. Form Elemanları Kullanımı

İNTERNET PROGRAMCILIĞI 2 14. HAFTA. PHP ile FORM İŞLEMLERİ. Hazırlayan Fatih BALAMAN. İçindekiler. Hedefler. Form Elemanları Kullanımı İNTERNET PROGRAMCILIĞI 2 14. HAFTA İçindekiler PHP ile FORM İŞLEMLERİ Form Elemanları Kullanımı GET ve POST Metodu Hedefler Php komutları kullanarak form elemanlarını etkileşimli hale getirebilir Hazırlayan

Detaylı

13 Aralık 2007. Đlgili Versiyon/lar : ETA:SQL, ETA:V.8-SQL. Đlgili Modül/ler : Raporlar. Kullanıcı Tanımlı Raporlar Bölümünden Yapabildiklerimiz

13 Aralık 2007. Đlgili Versiyon/lar : ETA:SQL, ETA:V.8-SQL. Đlgili Modül/ler : Raporlar. Kullanıcı Tanımlı Raporlar Bölümünden Yapabildiklerimiz 13 Aralık 2007 Đlgili Versiyon/lar : ETA:SQL, ETA:V.8-SQL Đlgili Modül/ler : Raporlar KULLANICI TANIMLI RAPORLAR Kullanıcı Tanımlı Raporlar Bölümünden Yapabildiklerimiz Kendi isteklerinize özel rapor tasarımları

Detaylı

Veritabanına Giriş. Oğuzhan Ceylan. 19 Eylül 2011

Veritabanına Giriş. Oğuzhan Ceylan. 19 Eylül 2011 Veritabanına Giriş Oğuzhan Ceylan 19 Eylül 2011 Outline Veritabanı MYSQL Mysql Sorgu Komutları Bir veritabanı yaratmak ve kullanmak Veritabanı Veritabanı Verittabanı hangi alanlarda kullanılıyor. Web sitesi

Detaylı

PERKON PDKS Kurulum ve hızlı başlangıç rehberi

PERKON PDKS Kurulum ve hızlı başlangıç rehberi Oluşturma 02.11.2015 Revizyon: 19.01.2016 Rev. No: 03 Yazan: Süleyman FAKİR Düzenleyen: F. DELİRİ PERKON PDKS Kurulum ve hızlı başlangıç rehberi 1) PDKS Kurulumu, Lisans Onaylaması Ve Veri Tabanı Ayarları

Detaylı

Aşağıdaki şemaya dikkat edin. Sorgulamalarımızı genellikle bu şemaya göre yapacağız.

Aşağıdaki şemaya dikkat edin. Sorgulamalarımızı genellikle bu şemaya göre yapacağız. Bu Derste Öğrenecekleriniz: 1- Sorgulama Yaparken Gruplama (GROUP BY) 2- Gruplamada Koşul Kullanımı (HAVING) 3- Sorgulama Yaparken Sıralama (ORDER BY) 4- Sorgulamalarda İşlem Yapma 5- Güncellemelerde İşlem

Detaylı

Genel Kavramlar. Bilgisayar ortamında işlenebilecek durumda bulunan kayıtlar. Birbiri ile ilişkili veriler topluluğu ve veriler arası ilişkiler

Genel Kavramlar. Bilgisayar ortamında işlenebilecek durumda bulunan kayıtlar. Birbiri ile ilişkili veriler topluluğu ve veriler arası ilişkiler Genel Kavramlar Veri Nedir? Bilgisayar ortamında işlenebilecek durumda bulunan kayıtlar Veri Tabanı Nedir? Birbiri ile ilişkili veriler topluluğu ve veriler arası ilişkiler Veritabanı Yönetim Sistemi (DBMS)Nedir?

Detaylı

MOBİL UYGULAMA GELİŞTİRME

MOBİL UYGULAMA GELİŞTİRME MOBİL UYGULAMA GELİŞTİRME PELİN YILDIRIM FATMA BOZYİĞİT YZM 3214 Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Bu Derste Veri Saklama 2 Veri Saklama Veri Saklama her appnin ihtiyaci

Detaylı

SQL e Giriş. Uzm. Murat YAZICI

SQL e Giriş. Uzm. Murat YAZICI SQL e Giriş Uzm. Murat YAZICI SQL (Structured Query Language) - SQL Türkçe de Yapısal Sorgulama Dili anlamına gelmektedir ve ilişkisel veritabanlarında çok geniş bir kullanım alanına sahiptir. - SQL ile

Detaylı

4. Bağlantı (Köprü) Oluşturma

4. Bağlantı (Köprü) Oluşturma 4. Bağlantı (Köprü) Oluşturma Bu bölümü bitirdiğinizde, HTML dosyalarında nasıl bağlantı oluşturulduğunu, Bağ etiketinin ne olduğunu, Yerel dosyalara nasıl bağlantı kurulduğunu, İnternet üzerindeki dosyalara

Detaylı

WEB TASARIM I. Öğr. Gör. M. Mutlu YAPICI. Ankara Üniversitesi Elmadağ Meslek Yüksekokulu

WEB TASARIM I. Öğr. Gör. M. Mutlu YAPICI. Ankara Üniversitesi Elmadağ Meslek Yüksekokulu WEB TASARIM I Öğr. Gör. M. Mutlu YAPICI Ankara Üniversitesi Elmadağ Meslek Yüksekokulu Ders İzlencesi Hafta Modüller/İçerik/Konular 1. Hafta PHP Tanımı ve Sunucu Kurulumları 2. Hafta PHP Yazım Notasyonu

Detaylı

5. Tablo İşlemleri. Bu bölümü bitirdiğinizde,

5. Tablo İşlemleri. Bu bölümü bitirdiğinizde, 5. Tablo İşlemleri Bu bölümü bitirdiğinizde, Tablonun nasıl oluşturulduğunu, Satır ve hücrelerin ne olduğunu ve nasıl oluşturulduğunu, Tablonun ve hücrelerin nasıl hizalandığını, Satır veya sütunların

Detaylı

PHP kodları çoğu zaman HTML kodları arasına gömülü olarak yazıldığından öncesinde HTML kodlarınının bilinmesinde fayda vardır.

PHP kodları çoğu zaman HTML kodları arasına gömülü olarak yazıldığından öncesinde HTML kodlarınının bilinmesinde fayda vardır. PHP Nedir? PHP, dünyada en çok kullanılan web programlama dillerinden biridir. Biraz daha teknik bir açıklama yapmak gerekirse şöyle söylenebilir. PHP, sunucu taraflı çalışan bir betik ve programlama dilidir.

Detaylı

VERİTABANI Veritabanı Sorgulama

VERİTABANI Veritabanı Sorgulama VERİTABANI Veritabanı Sorgulama VERİ SORGULAMA DİLİ (DATA QUERY LANGUAGE) Veritabanı platformunda veri sorgulamak için geliştirilmiş en temel araç SQL (Structured Query Language)'dir. SQL'in veritabanı

Detaylı

Genel Programlama II

Genel Programlama II Genel Programlama II 22.03.2011 1 Yapılar ( Structures ) Yapılar ( structures ); tam sayı, karakter vb. veri tiplerini gruplayıp, tek bir çatı altında toplar. Bu gruplandırma içinde aynı ya da farklı veri

Detaylı

Birden Çok Tabloda Sorgulama (Join)

Birden Çok Tabloda Sorgulama (Join) Birden Çok Tabloda Sorgulama (Join) Join(Birleştirici), iki ya da daha fazla tabloyu aynı anda sorgulayarak bir sonuç tablosu (result table) oluşturmaya yarar. Örneğin: İki tabloyu birleştirici ile birleştirerek

Detaylı

Dinamik Kodlama. [X] Fusion@6. [X] Yeni Fonksiyon

Dinamik Kodlama. [X] Fusion@6. [X] Yeni Fonksiyon Dinamik Kodlama Ürün Grubu Kategori Versiyon Önkoşulu [X] Fusion@6 [X] Yeni Fonksiyon @6 Uygulama @6 Serisi ürünlerde, kullanıcı arabirimlerinin her yerine eklenen dinamik kodlama özelliği ile, programın

Detaylı

JavaScript Örnekleri PDF

JavaScript Örnekleri PDF 5 JavaScript örneği ve bu örneklerin çalışan uygulamaları JavaScript Örnekleri PDF www.yazilimbilisim.net.. İçindekiler Tablosu Javascript Text Kutusuna Sadece Sayı Girdirme... 2 PROGRAM KODU... 3 Javascript

Detaylı

Basit SQL Sorguları Veritabanından verilerin SELECT cümleleri ile alınması işlemine sorgulama denir.

Basit SQL Sorguları Veritabanından verilerin SELECT cümleleri ile alınması işlemine sorgulama denir. SQL SELECT CÜMLELERİ Oracle birçok kullanışlı ve güçlü özellikleri olan bir veritabanıdır. Bu özelliklerinin birçoğu SQL ile ilgilidir. VTYS lerinin çoğunluğunda veriler ile çalışmak için SQL kullanılmaktadır.

Detaylı

2-Hafta Temel İşlemler

2-Hafta Temel İşlemler 2-Hafta Temel İşlemler * Html Komutlarının Yapısı * Açıklamalar * Htm Sayfasının Oluşturulması * Temel Html Komutları * Html Sayfalarının Düzenlenmesi * Html Sayfalarının İncelenmesi Html Komutlarının

Detaylı

1. Excel Dönüşümü : 2. Rapor Master Tanımları :

1. Excel Dönüşümü : 2. Rapor Master Tanımları : Programın Amacı : Bu Program As/400 Sistemindeki herhangi bir veya birden fazla file ı kullanarak istenilen şekilde sorgulama yaparak elde edilen bilgileri Excel Formatında Pc deki istenilen bir yere kaydetmek.

Detaylı

Scream! e gelen veri akışlarından bazılarını diğer bir kurum yada bilgisayarla paylaşmak için kullanılabilir.

Scream! e gelen veri akışlarından bazılarını diğer bir kurum yada bilgisayarla paylaşmak için kullanılabilir. Eş zamanlı Scream! kullanımı Scream!, sismik ağın güçlü bir parçası olacak şekilde tasarlanmıştır. Varsayılan yapılandırma dosyası scream.ini dir ve ilk kullanım sırasında kendini otomatik olarak oluşturur.

Detaylı

PHP Programlama 3. Bölüm. Tolga GÜYER 2009-2010

PHP Programlama 3. Bölüm. Tolga GÜYER 2009-2010 PHP Programlama 3. Bölüm 2009-2010 İçindekiler 3.1 Neden Veritabanı Kullanırız? 3.2 MySQL Veritabanı Hakkında 3.3 MySQL Veritabanının Yönetimi 3.4 PHP & MySQL 3.5 Öğrendiklerimizi Uygulayalım: İkinci El

Detaylı

Tablolar Arası İlşikiler ve Alan Özellikleri Siparis.musteri_no musteri.musteri_no Siparis.urun_kodu musteri.urun_kodu

Tablolar Arası İlşikiler ve Alan Özellikleri Siparis.musteri_no musteri.musteri_no Siparis.urun_kodu musteri.urun_kodu SQL'DE VERİ İŞLEME KOMUTLARI SQL'de verileri işlemek için kullanılan komutlara DML (Data Manipulation Language Veri İşleme Dili) denilmektedir. Bu komutlar ile oluşturulan ifadeler tablolara kayıt eklemek,

Detaylı

ÜNİTE NESNE TABANLI PROGRAMLAMA I. Uzm. Orhan ÇELİKER VERİTABANI SORGULARI İÇİNDEKİLER HEDEFLER

ÜNİTE NESNE TABANLI PROGRAMLAMA I. Uzm. Orhan ÇELİKER VERİTABANI SORGULARI İÇİNDEKİLER HEDEFLER VERİTABANI SORGULARI İÇİNDEKİLER Select İfadesi Insert İfadesi Update İfadesi Delete İfadesi Verileri Sıralamak Verileri Gruplandırmak Veriler Üzerinde Arama Yapmak NESNE TABANLI PROGRAMLAMA I Uzm. Orhan

Detaylı

PHP, nesne-yönelimli (object-oriented) bir dil olduğu için, nesne oluşturma imkânına ve bunların kullanılmasını sağlayan metodlara da sahiptir.

PHP, nesne-yönelimli (object-oriented) bir dil olduğu için, nesne oluşturma imkânına ve bunların kullanılmasını sağlayan metodlara da sahiptir. PHP'nin Temelleri PHP Nedir? PHP, bir programlama dili olarak, değişkenler, değişkenlerin değerleriyle bir işlem yapmayı sağlayan işlemciler (operatörler), işlemcilerle oluşturulan deyimler ve nihayet

Detaylı

App İnventor-Pide Sipariş Uygulaması

App İnventor-Pide Sipariş Uygulaması EĞİTİMDE BİLGİSAYAR PROGRAMLAMA FİNAL SINAVI App İnventor-Pide Sipariş Uygulaması 1)Ekran Tasarımı, ekranda kullanılan elementler ve özellikleri Bütün işlemler tek bir ekrandan yapılmaktadır. Arka plan

Detaylı

ÖĞRENME FAALİYETİ 1 ÖĞRENME FAALİYETİ 1 1. FORMLAR

ÖĞRENME FAALİYETİ 1 ÖĞRENME FAALİYETİ 1 1. FORMLAR ÖĞRENME FAALİYETİ 1 AMAÇ ÖĞRENME FAALİYETİ 1 Uygun ortam sağlandığında web sayfaları için formlar oluşturabileceksiniz. ARAŞTIRMA Web sayfalarında formların kullanım amaçlarını ve nasıl kullanıldığını

Detaylı

HESAP MAKİNASI YAPIMI

HESAP MAKİNASI YAPIMI HESAP MAKİNASI YAPIMI 1..Aşağıdakine benzer görünüm ve butonları hazırlayın. 2. 24. Butonun içerisine aşağıdaki kodları yazın. 3. Yeni bir layer ekleyip Frame1 F9 na aşağıdaki kodları ekleyelim. 4. Butonlardan

Detaylı

Yeni bir proje açarken File New - Web Site diyoruz. Gelen ekranda Visual Basic veya C# seçilebilir. Biz ders kapsamında C# programlama dilini seçtik.

Yeni bir proje açarken File New - Web Site diyoruz. Gelen ekranda Visual Basic veya C# seçilebilir. Biz ders kapsamında C# programlama dilini seçtik. ASP.NET DERS 1 Yeni bir proje açarken File New - Web Site diyoruz. Gelen ekranda Visual Basic veya C# seçilebilir. Biz ders kapsamında C# programlama dilini seçtik. Gelen ekranda Visual C# seçildikten

Detaylı

SM 100 Terazi Ayarları. Digi SM 100. SM 100 Terazi Ayarları

SM 100 Terazi Ayarları. Digi SM 100. SM 100 Terazi Ayarları Digi SM 100 SM 100 Terazi Ayarları Digi SM 100 Terazi Ayarları Teraziyi ayarlamaya başlamak için öncelikle X S Z ENTER Raporlar Program Ayarlar FONKSIYON Bölümlerine geçiş yapabilmemiz gerekmektedir. Bunun

Detaylı

ANDROID İŞLETİM SİSTEMİ YÜKLÜ OLAN TELEFON VEYA TABLETLERE ÖĞRENCİ WEBMAIL TANIMLAMA

ANDROID İŞLETİM SİSTEMİ YÜKLÜ OLAN TELEFON VEYA TABLETLERE ÖĞRENCİ WEBMAIL TANIMLAMA ANDROID İŞLETİM SİSTEMİ YÜKLÜ OLAN TELEFON VEYA TABLETLERE ÖĞRENCİ WEBMAIL TANIMLAMA Son Güncelleme Tarihi: 16.10.2014 Acıbadem Üniversitesi Bilgi İşlem Daire Başkanlığı Öğrenci Mail Adreslerini Android

Detaylı

PHP Günleri 2013#1. mysql_* Fonksiyonları Ömrünü Doldurmak Üzere. Peki Şimdi Ne Olacak? Özgür Yazılım A.Ş. www.ozguryazilim.com.tr

PHP Günleri 2013#1. mysql_* Fonksiyonları Ömrünü Doldurmak Üzere. Peki Şimdi Ne Olacak? Özgür Yazılım A.Ş. www.ozguryazilim.com.tr PHP Günleri 2013#1 mysql_* Fonksiyonları Ömrünü Doldurmak Üzere. Peki Şimdi Ne Olacak? Adil İlhan Yazılım Geliştirici @adil_ilhan www.adililhan.com [email protected] PHP ve MySQL Bitirim İkili

Detaylı

KISITLAMALAR (CONSTRAINT)

KISITLAMALAR (CONSTRAINT) KISITLAMALAR (CONSTRAINT) Tablo alanlarına veri girişini kontrol etmeyi amaçlayan düzenlemelerdir. Bir alana girilen değerleri sınırlayan bu düzenlemeler kullanıcı hataları açısından önemlidir. Verilerin

Detaylı

Bölüm 4: DDL Veri Tanımlama Dili

Bölüm 4: DDL Veri Tanımlama Dili Bölüm 4: DDL Veri Tanımlama Dili -43- Dr. Serkan DİŞLİTAŞ DDL (Data Definition Language Veri Tanımlama Dili : Bu kategorideki SQL komutları ile veritabanları, tablo, görünüm ve indekslerin yaratılması,

Detaylı

Microsoft SQL Server 2008 Oracle Mysql (Ücretsiz) (Uygulamalarımızda bunu kullanacağız) Access

Microsoft SQL Server 2008 Oracle Mysql (Ücretsiz) (Uygulamalarımızda bunu kullanacağız) Access Programlamaya Giriş VERİ TABANI UYGULAMASI ÖN BİLGİ Veritabanları, verilere sistematik bir şekilde erişilebilmesine, depolanmasına ve güncellenmesine izin veren, yüksek boyutlu veriler için çeşitli optimizasyon

Detaylı

C# Programlama Dili. İlk programımız Tür dönüşümü Yorum ekleme Operatörler

C# Programlama Dili. İlk programımız Tür dönüşümü Yorum ekleme Operatörler C# Programlama Dili İlk programımız Tür dönüşümü Yorum ekleme Operatörler 1 İlk Programımız Bu program konsol ekranına Merhaba dünya! yazıp kapanır. Programı geçen derste anlatıldığı gibi derleyin, sonra

Detaylı

WebInstaller. 1. Kurulum Đçin Gereksinimler

WebInstaller. 1. Kurulum Đçin Gereksinimler WebInstaller Ürün Grubu [X] Fusion@6 [X] Fusion@6 Standard Kategori [X] Yeni Fonksiyon Versiyon Önkoşulu @6 Uygulama E-Netsis.Net uygulamasının kurulumu Netsis\ENetsis.Net\Kurulum dizininde bulunan NetsisWebInstall.exe

Detaylı

LOGO için Online Mutabakat Kullanım Kılavuzu

LOGO için Online Mutabakat Kullanım Kılavuzu LOGO için Online Mutabakat Kullanım Kılavuzu LOGO Windows Ürünleri için Online Mutabakat LOGO Java Ürünleri için Online Mutabakat Microsoft Excel veri kaynağı için Online Mutabakat Microsoft SQL Server

Detaylı

Akış Kontrol Mekanizmaları

Akış Kontrol Mekanizmaları Akış Kontrol Mekanizmaları 1 Akış Kontrol Mekanizmaları if else switch for döngüsü for döngüsünün çalışma prensibi for döngüsüyle ilgili örnekler for döngüsüyle ilgili kurallar while döngüsü while döngüsünün

Detaylı

Sunum Planı. Django Nedir? Django projesi oluşturmak Basit bir blog uygulaması. Şablon Kullanımı Diğer özellikleri

Sunum Planı. Django Nedir? Django projesi oluşturmak Basit bir blog uygulaması. Şablon Kullanımı Diğer özellikleri Django Web Çatısı Mete Alpaslan Katırcıoğlu Emre Yüce Portakal Teknoloji [email protected] [email protected] Akademik Bilişim 2008 Çanakkale, 30 Ocak 2008 Sunum Planı Django

Detaylı

Samsun Çocuk Hizmetleri İ l Koordinasyon Sekretarya Birimi

Samsun Çocuk Hizmetleri İ l Koordinasyon Sekretarya Birimi Samsun Çocuk Hizmetleri İ l Koordinasyon Sekretarya Birimi Veri Giriş Sistemi Klavuzu Amaç Veri Giriş Sistemi, koruyucu ve destekleyici tedbir kararlarının takibinde ve uygulamasında ilgili kurumları daha

Detaylı

Yukarıdaki örnekte görüldüğü üzere her php komut satırı noktalı virgül (;) ile biter.

Yukarıdaki örnekte görüldüğü üzere her php komut satırı noktalı virgül (;) ile biter. PHP Kod Yapısı Basit PHP Kod Yapısı PHP Scriptleri ile başlar ve ile biter. PHP Kodlarımız bu aralığa yazılır. Ayrıca çoğu sunucu

Detaylı

Script. Statik Sayfa. Dinamik Sayfa. Dinamik Web Sitelerinin Avantajları. İçerik Yönetim Sistemi. PHP Nedir? Avantajları.

Script. Statik Sayfa. Dinamik Sayfa. Dinamik Web Sitelerinin Avantajları. İçerik Yönetim Sistemi. PHP Nedir? Avantajları. Script Statik Sayfa Dinamik Sayfa Dinamik Web Sitelerinin Avantajları İçerik Yönetim Sistemi PHP Nedir? Avantajları Dezavantajları Script HTML kodları arasına yerleştirilen küçük kodlardır. Web sayfalarında

Detaylı

Aşağıdaki şemaya dikkat edin. Sorgulamalarımızı genellikle bu şemaya göre yapacağız.

Aşağıdaki şemaya dikkat edin. Sorgulamalarımızı genellikle bu şemaya göre yapacağız. Bu Derste Öğrenecekleriniz: 1- Birden Fazla Tablodan Sorgulama 2- Tablo Birleştirme işlemleri (JOIN) a. INNER JOIN b. OUTER JOIN i. LEFT OUTER JOIN ii. RIGHT OUTER JOIN iii. FULL OUTER JOIN 3- Tablo Ekleme

Detaylı

İnternet Programcılığı Öğr. Gör. Serkan AKSU PHP de Dizi-Değişkenler, Nesneler. Dizi Oluşturma. Tek Boyutlu Diziler

İnternet Programcılığı Öğr. Gör. Serkan AKSU  PHP de Dizi-Değişkenler, Nesneler. Dizi Oluşturma. Tek Boyutlu Diziler PHP de Dizi-Değişkenler, Nesneler Dizilerle ilgili örneklere geçmeden önce aşağıdaki tabloyu inceleyelim. Tabloda dizi kavramının mantığı açıklanmaktadır. Tablonun tamamını bir dizi olarak düşünün ve bu

Detaylı

WEB TASARIM I. Öğr. Gör. M. Mutlu YAPICI. Ankara Üniversitesi Elmadağ Meslek Yüksekokulu

WEB TASARIM I. Öğr. Gör. M. Mutlu YAPICI. Ankara Üniversitesi Elmadağ Meslek Yüksekokulu WEB TASARIM I Öğr. Gör. M. Mutlu YAPICI Ankara Üniversitesi Elmadağ Meslek Yüksekokulu Ders İzlencesi Hafta Modüller/İçerik/Konular 1. Hafta PHP Tanımı ve Sunucu Kurulumları 2. Hafta PHP Yazım Notasyonu

Detaylı

VERİ TABANI YÖNETİM SİSTEMLERİ I

VERİ TABANI YÖNETİM SİSTEMLERİ I BÖLÜM 8 8. TEMEL SQL KOMUTLARI-II 8.1. SELECT (Seç) Komutu Veri tabanındaki tablo veya tablolardan istenilen özellikteki verileri seçip listeleme için kullanılan komuttur. Genel kullanımı aşağıdaki gibidir.

Detaylı

Herhangi bir tablonun tekrarlı veriler içerdiği duruma birinci normal form denir. Birinci normal formu Aşağıdaki tablo ile ele alacağız.

Herhangi bir tablonun tekrarlı veriler içerdiği duruma birinci normal form denir. Birinci normal formu Aşağıdaki tablo ile ele alacağız. Normalleştirme ve Uygulaması Normalleştirme Neden Uygulanır: İlişkisel veritabanı oluşturmak için normalleştirmeyi bilmek çok önemlidir. Normalleştirme işlemini anlayabilmek için ise fonksiyonel bağımlılık

Detaylı

Android Ders Notları

Android Ders Notları Android Ders Notları 1. Yeni Bir Proje Başlatma Android Studio programında yeni bir proje başlatıyoruz. İlk olarak karşımıza resim 1 deki gibi bir pencere gelecek. Burada Application name kısmına proje

Detaylı

2. HTML Temel Etiketleri

2. HTML Temel Etiketleri 2. HTML Temel Etiketleri Bu bölümü bitirdiğinizde, HTML ve etiket kavramlarının ne olduğunu, HTML komut yapısını, Örnek bir HTML dosyasının nasıl oluşturulduğunu, Temel HTML etiketlerinin neler olduğunu,

Detaylı

Windows Live ID ve parolanızı giriniz.

Windows Live ID ve parolanızı giriniz. Ücretsiz Deneme Hesabı Oluşturma ve Temel Özelliklerin Kullanım Kılavuzu Bilgi girilmesi gerekli alanlar Kişisel bilgi içeren alanlar http://www.windowsazure.com/tr-tr/pricing/free-trial/ adresine gidiniz

Detaylı

dinamo / Periyodik İşler

dinamo / Periyodik İşler 1 Periyodik İşler dinamo / Periyodik İşler 2 Periyodik İşler Genel Tanım Periyodik İşler Nedir? Periyodik işler, kullanıcılar tarafından belirlenmiş olan rapor ve makroları yine kullanıcılar tarafından

Detaylı

JAVASCRIPT JAVASCRIPT DİLİ

JAVASCRIPT JAVASCRIPT DİLİ JAVASCRIPT JAVASCRIPT DİLİ Netscape Navigator 2.0 ile birlikte geliştirilen JavaScript dili istemci taraflı (client-side) script dilidir. Web sayfalarında dinamik içerik sağlamak ya da kullanıcıyla iletişim

Detaylı

Mikro Ayarları. Mikro Programının kurulu olduğu veritabanı ve web servisi için bağlantı ayarlarının yapıldığı menüdür.

Mikro Ayarları. Mikro Programının kurulu olduğu veritabanı ve web servisi için bağlantı ayarlarının yapıldığı menüdür. Mikro Ayarları Mikro muhasebe sistemini kullanan müşterilemizin, muhasebe sistemleri ile E Ticaret sitesi arasındaki entegrasyon parametrelerini tanımladıkları menüdür. Bu menü altındaki alt menüler kullanılarak

Detaylı