Form Đşlemleri PHP-1 1

Benzer belgeler
Php Programlama Dili MySQL Uygulamaları

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


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

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

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

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

PHP ile İnternet Programlama

İnternet Programcılığı

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

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

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

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

Php İle Mysql Veritabanından Bilgi Çekme

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

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.

VERİTABANI. SQL (Structured Query Language)

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

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

Laboratuar Notları #5

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.

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

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

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.

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

PHP 1. Hafta 2.Sunum

İNTERNET PROGRAMCILIĞI - II

Veritabanı. SQL (Structured Query Language)

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.

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

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

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

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

SQL Uyarı Programı Kurulum ve Kullanımı

Öğr. Gör. Serkan AKSU 1

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

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

Bilgisayar Uygulamaları. MySql

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

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

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

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

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

SQL Komutları (2) Uzm. Murat YAZICI

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

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

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

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

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

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

MOBİL UYGULAMA GELİŞTİRME

SQL e Giriş. Uzm. Murat YAZICI

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

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

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

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.

VERİTABANI Veritabanı Sorgulama

Genel Programlama II

Birden Çok Tabloda Sorgulama (Join)

Dinamik Kodlama. [X] [X] Yeni Fonksiyon

JavaScript Örnekleri PDF

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

2-Hafta Temel İşlemler

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

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

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

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

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

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.

App İnventor-Pide Sipariş Uygulaması

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

HESAP MAKİNASI YAPIMI

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.

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

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

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

KISITLAMALAR (CONSTRAINT)

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

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

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

WebInstaller. 1. Kurulum Đçin Gereksinimler

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

Akış Kontrol Mekanizmaları

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

Samsun Çocuk Hizmetleri İ l Koordinasyon Sekretarya Birimi

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

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

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

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

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

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

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

Android Ders Notları

2. HTML Temel Etiketleri

Windows Live ID ve parolanızı giriniz.

dinamo / Periyodik İşler

JAVASCRIPT JAVASCRIPT DİLİ

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.

Transkript:

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-8859-9"> <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

<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 http://localhost/form.php 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-8859-9"> <meta http-equiv="content-type" content="text/html; charset=windows-1254"> </head> <body> <p>sevdiğiniz meyveler: <? PHP-1 2

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

</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

<!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-8859-9"> <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

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

Đ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

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

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

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

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

$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: http://www.php.org.tr"); 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

<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

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, http://www.php.org.tr 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("deneme@php.org.tr", "Deneme", "Merhaba\nBu bir denemedir\nhoşçakalın."); Ek başlıkları da yazarsak örneğimiz şöyle olacaktır: Mail ("deneme@php.org.tr", "Deneme", "Merhaba\nBu bir denemedir\nhoşçakalın.", "From: webmaster@php.org.tr\nreply-to: webmaster@php.org.tr"); 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

<title>e-posta Formu</title> <meta http-equiv="content-type" content="text/html; charset=iso-8859-9"> <meta http-equiv="content-type" content="text/html; charset=windows-1254"> </head> <body> <!-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

<td width="450"> <!-- 3. Degisken "yorum" --> <textarea name="yorum" cols="55" rows="10"></textarea> <!-- 4. Degisken "kime" --> <br><input type="hidden" name="kime" value="deneme@php.org.tr"> <!-- 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="deneme@php.org.tr"> Dikkat ederseniz "kime" anahtarına "deneme@php.org.tr 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 (deneme@php.org.tr) 5.konu (Web sitemden) PHP-1 16

Ş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:arsiv@php.org.tr\n"; $extra_baslik.= "Content-Type:text/plain; charset=\"iso-8859- $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 arsiv@php.org.tr 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