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.
12 Eylül 2012 at 06:33
hasta yatağı siteme mesaj panosunu entegre etmeye çalıştım ama beceremedimm 🙁 yinede teşekkür ettim
10 Ocak 2015 at 14:42
link silinmiş galiba kontrol edermisin ?
26 Şubat 2015 at 05:46
Maalesef link silindi ve muhtemelen geri gelmeyecek.