Harun Reşit Zafer

bâki kalan bu kubbede bir hoş sadâ imiş

PHP Örneği 01: Mesaj Panosu

2009–2010 bahar döneminde verilen web programlama dersi boyunca 7 adet ödev verilmişti. Dersin o zamanki asistanı olarak çözümleri hazırlamak da bana düşmüştü. Uzun zamandır çözümleri makale haline getirmek gibi bir niyetim vardı. Kısmet bugüneymiş. Her hafta birini makale haline getireceğim vaktim olursa. İlk örnek oldukça basit bir mesaj panosu örneği. PHP’ye giriş niteliğinde. Çözüme geçmeden önce problemi net olarak tanımlayalım:

Problem

1- Kullanıcılar mesaj panosuna yeni mesaj girebilmeli.
2- Önceden girilmiş mesajlar panoda listelenmeli.
3- Mesajlar artan ve azalan biçimde tarihe veya kullanıcı adına göre sıralanabilmeli.
4- Tüm mesajlar bir metin dosyasında tutulmalı.
5- Sayfanın başında mesajlar içerisinde arama yapabilmek için bir arama çubuğu olmalı.

Çözüm

Yazılım projelerinde (en azından ödev türü küçük projelerde) tasarım adımları aşağıdaki gibi olmalı.

1-     Model: Veri modelinin tasarlanması, yani verilerin nerede ve nasıl tutulacağı.
2-     View: Kullanıcı arayüzünün (GUI) tasarımı.
3-     Controller: İlk iki kısmı birleştiren ve iş akış mantığını içeren kod kısmı.

1- Veri Modelinin Tasarlanması

Burada verileri bir metin doyasında tutacağımız zaten aşikâr. Geriye dosyada nasıl bir yapı kullanacağımız kalıyor. Ben aşağıdaki gibi bir yapıyı tercih ettim:

musa | March 30, 2010, 11:48 am | bu bir denemedir
kullanıcı 1 | March 30, 2010, 11:48 am | Merhaba, bu site çok güsel :)
harun | March 30, 2010, 11:48 am | hopaaaaaaaa!!!!
volkan | March 30, 2010, 11:49 am | peypır yazıp gelcem
yolguli | March 30, 2010, 11:49 am | Türkmenim hovvaaa
son | March 30, 2010, 11:50 am | son mesaj

Kullanıcı adı, tarih ve mesaj alanlarını bir birinden “ | ”, yani boşluk | boşluk şeklinde ayırdım. Virgül, tab, noktalı virgül vb. kullanmamamın nedeni, bunların mesajın içerisinde de geçebilme ihtimalindendir.

2- Kullanıcı Arayüzü

İster kağıt kalemle, ister dreamweaver gibi bir araç ile basit bir kullanıcı arayüzü tasarlayabilirsiniz. Ben aşağıdaki gibi bir arayüz düşündüm bu proje için.

3- Program akışı.

Sayfada 3 ayrı işlem yapılabiliyor. Bunlar listeleme, arama ve mesaj ekleme. Sayfanın hemen başında “op” ismini verdiğimiz istem parametresi (request parameter) bu işlemin ne olduğunu kontrol ediyor ve ona göre gerekli fonksiyonları çağırıyoruz.

switch($_REQUEST['op']){
 case 'search':
    searchForm();
    addForm();
    search($_REQUEST['text']);
    break;
 
case 'add':
    add($_REQUEST['ad'], $_REQUEST['message']);
 
default:
    searchForm();
    addForm();
    messageList($_REQUEST['field'], $_REQUEST['ascDesc']);
}

Eğer hiçbir işlem seçilmemişse varsayılan (default) işlem sayfada arama ve ekleme formlarının oluşturulması ve daha sonra mesajların bir tablo halinde listelenmesidir.

Ekleme fonksiyonu aşağıdaki gibidir.

function add($name, $message){
    $dosya = fopen('message.txt','a');
    $line = $name . " | " . date("F j, Y, g:i a"). " | " .$message."\n";
    fwrite($dosya, $line);
    fclose($dosya);
    echo 'Message added: ' . $line ;
}

Arama fonksiyonu özetle dosyadan veriyi satırlar halinde okuyor ve her satırın mesaj alanı içerisinde aranan ifadenin bulunup bulunmadığına bakıyor. Eğer bulunuyor ise tabloya yeni satır olarak ekleniyor.

function search($text){
 
	$satirlar = file ('message.txt');
 
	printTableHeader();
 
	foreach($satirlar as $i => $satir){
            list($name[], $datetime[], $message[]) = explode('|', $satir);
            if(stristr($message[$i], $text) != FALSE )
			echo "$i{$name[$i]}{$datetime[$i]}{$message[$i]}"; 
	} 
	echo ''; 
}

Kodların tamamını buradan indirebilirsiniz. Umarım faydalı olmuştur.

Herkese kolay gelsin.

 

Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedInPrint this pageEmail this to someone

3 Yorum

  1. hasta yatağı siteme mesaj panosunu entegre etmeye çalıştım ama beceremedimm 🙁 yinede teşekkür ettim

  2. link silinmiş galiba kontrol edermisin ?

Bir Cevap Yazın

E-posta adresiniz yayınlanmayacak

*

© 2017 Harun Reşit Zafer

Temayı tasarlayanAnders NorenYukarı ↑