Veritabanı Yönetim Sistemleri Dersi Projesi Emlak Alım - Satım Otomasyonu
E5 Ali Keles, ¸ 040030085 (11826) Mehmet Aktas, ¸ 040030097 (11826) Erman Oral, 040030032 (11826) Meriç Polat, 040030030 (11826) Kaan Tasçı, ¸ 040030041 (11826)
Veritabanı Yönetim Sistemleri Dersi Projesi: Emlak Alım - Satım Otomasyonu by E5, Ali Kele¸s, 040030085 (11826), Mehmet Akta¸s, 040030097 (11826), Erman Oral, 040030032 (11826), Meriç Polat, 040030030 (11826), ve Kaan Ta¸sçı, 040030041 (11826)
˙Içindekiler 1. Genel Bilgiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Proje Tanımı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Geli¸stirme ve Çalı¸stırma Ortamı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 ˙I¸s Bölü¸sümü . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2. Kurulum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Veritabanı Olu¸sturulması: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Tabloların Olu¸sturulması . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 MySQL Sunucusuna Ba˘glanma: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 3. Kullanım Kılavuzu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Ana Sayfa: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Sisteme Giris : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Üye Ol: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Mü¸steri Sayfası . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Ana Sayfa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 ˙Ilan Ara . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Geli¸smi¸s Arama . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Mesajlarım . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Oy Kullan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Kredi Hesapla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 ˙Istatistikler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Talep Formu Gönderme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 Ayarlarım . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Çıkı¸s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Emlakçı Sayfası . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Geli¸smi¸s Arama . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 Mesajlarım . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 Ayarlarım . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 ˙Ilanlarım . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Yönetici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 Mesajlarım . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 Üye Yönetimi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Mesaj Yönetimi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 ˙Ilan Yönetimi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 Talep Yönetimi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Anket Yönetimi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 4. Teknik Kılavuz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Veritabanı Tasarımı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Yazılım Tasarımı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 uye_ol.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 em_bak_semt.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 5ilan_ekle.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 unuttum.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 index.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 kontrol.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 menu.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 musteri.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 emlakci.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 mesaj.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 mesaj_gonderilen.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 yeni_mesaj.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 mesaj_oku.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 kredi.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 iii
Veritabanı Yönetim Sistemleri Dersi Projesi oy_ver.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sifre_degistir.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ayarlar.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . istatistik.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ev_puan_hesapla.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . kullanici_bilgi.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . talep_gönder.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . giden_talep.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . gelen_talep.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . talep_oku.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ilangoster.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ilanekle.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . insertcontrol.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . duyuruoku.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . duyuruekle.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . duyurugoster.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . duzenle.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . resim.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . updatecontrol.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . detay.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ilce.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . semt.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ilan_ara.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . gelismis_arama.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . yonetici.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . y_uyeler.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . y_uyebilgi.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . y_mesajlar.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . y_talepformu.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . y_evbilgi.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . y_ilanlar.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . y_resimbilgi.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . y_anket.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . anket_ekle.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . anketformu.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . grafik.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
iv
62 63 63 64 65 66 66 66 66 67 67 69 69 71 72 72 73 73 74 76 77 78 78 78 79 82 83 84 85 86 86 87 88 88 89 89
Sekiller ¸ 3.1. Üyelik Seçimi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3.2. Üyelik Bilgilerinin Doldurulması . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 3.3. ˙Ilan Ekleme Kısmı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 3.4. Mü¸steri Ana Sayfası . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.5. Geli¸smi¸s Arama . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 3.6. Mesaj . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.7. Oy Kullan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.8. Kredi Hesaplama . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3.9. ˙Istatistikler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 3.10. Talep Formu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.11. Eri¸sim Bilgileri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.12. Sifre ¸ De˘gi¸sikli˘gi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.13. Emlakçı Ana Sayfası . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.14. Geli¸smi¸s Arama . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.15. Mesajlarım . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.16. ˙Ilan Ekleme Kısmı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.17. ˙Ilan Ekleme Kısmı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.18. ˙Ilan Ekleme Kısmı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.19. Yönetici Ana Sayfası . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.20. Yeni Mesaj . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.21. Gelen Kutusu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.22. Giden Kutusu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.23. Üye Yönetimi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.24. Üye Yönetimi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 3.25. Mesaj Yönetimi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 3.26. ˙Ilan Yönetimi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 3.27. ˙Ilan Yönetimi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.28. ˙Ilan Yönetimi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.29. Talep Yönetimi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 3.30. Talep Yönetimi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 3.31. Anket Yönetimi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 3.32. Anket Yönetimi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.33. Anket Yönetimi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1. Varlık-˙Ili¸ski Diyagramı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 4.2. Tablo ba˘glantıları . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
v
Tablolar 4.1. kullanicilar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2. musteri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3. emlakci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4. semt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.5. em_bak_semt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.6. ev . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.7. talep_formu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.8. mesaj . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.9. oylar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.10. ilan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.11. resim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.12. satilan_ev . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.13. duyurular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.14. anket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.15. cevap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.16. oy_kullananlar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
vi
Bölüm 1. Genel Bilgiler Proje Tanımı Emlak alım-satımını kolayla¸stırmak, mü¸steri ile emlakçı arasındaki ileti¸simin internet ortamına ta¸sınmak için veritabanı ve web uygulaması tasarlanacaktır. Projenin temel özellikleri a¸sa˘gıda verilmi¸stir. Sistemde 5 çe¸sit kullanıcı olacaktır. Bunlar; yönetici emlakçı, üst düzey emlakçı, mü¸steri ve misafir kullanıcılardır. Misafir kullanıcı dı¸sındaki her kullanıcı sisteme kullanıcı adı ve s¸ifresi ile giri¸s yapabilecektir. Kullanıcı tiplerinin özellikleri s¸öyledir: Misafir: Bu tip kullanıcıların sisteme giri¸s yapmalarına gerek yoktur. Yalnızca sitedeki emlak ilanlarını görüntüleyebilir ve arama özelli˘gini kullanabilirler. Her misafir kullanıcı siteye emlakçı ya da mü¸steri tipinden üye olabilir. Sisteme üye olan her kullanıcının s¸ifresi vermi¸s oldu˘gu mail adresine gönderilecektir. Mü¸ steri: Sisteme mü¸steri olarak kayıt yaptırmak için herhangi bir ko¸sul bulunmamaktadır. Her mü¸steri siteye TC kimlik numarası, ad-soyad, adres, telefon numarası, elektronik posta adresi, meslek bilgilerini girerek sisteme kayıt yapabilir. Mü¸steri tipinden kullanıcıların kendi s¸ifre ve TC kimlik numaralarıyla, ana sayfadan sisteme giri¸s yapmaları gerekmektedir. Her mü¸steri, sistemin talep formu gönderme, mesaj alma ve gönderme, ilan arama gibi özelliklerini kullanabilmektedir. Emlakçı: Kullanıcılar ad-soyad, firma adı, elektronik posta adresi, T.C. kimlik numarasını girerek sisteme kayıt yapabilir. Bir kullanıcının sisteme emlakçı olarak kayıt olabilmesi için en az 5 tane emlak ilanı da koyması gerekmektedir. Bu s¸ekilde sitedeki ilan sayısının artması hedeflenmi¸stir. Her emlakçının mü¸steri memnuniyet puanı olacaktır. Her mü¸steri aynı emlakçıya yalnızca bir kere olmak üzere oy verebilecek ve emlakçıların satmı¸s ya da kiralamı¸s oldukları ev sayısı da dahil edilerek mü¸steri memnuniyet puanları olu¸sturulacaktır. Bu puan belli bir seviyeyi a¸sınca emlakçılar, üst düzey emlakçı konumuna geçeceklerdir. Üst düzey emlakçı konumuna geçen bir kullanıcının puanı dü¸sse ile üst düzey emlakçı olarak kalmaya devam eder, tekrar emlakçı konumuna geçmez. ˙ Emlakçıların puanlarına mü¸sterilerin verdikleri oylar ve ilan etti˘gi ev sayısı belirler. Ilan sayısı 0 ile 10 arasında ise 1, 10 ile 20 arasında ise 2, 20 ile 30 arasında ise 3, 30 ile 40 arasında ise 4, 40’dan büyük ise de 5 puan emlakçıya verilmektedir. Emlakçının puanını etkileyecek di˘ger kısım %50’lik kısım ise mü¸steri oylarının yarıya bölünmesiyle hesaplanır. Bir emlakçının üst düzey emlakçı olabilmesi için puanının 7’den yüksek olması ve bu kullanıcıya verilen oy sayısısının 20’den fazla olması gerekmektedir. Üst Düzey Emlakçı: Sisteme emlakçı olarak kayıt yaptıran kullanıcıların olabilece˘gi bir tiptir. Puanları 7’yi a¸san emlakçılar üst düzey emlakçı statüsüne geçerler. Üst düzey emlakçıları, emlakçılardan ayırt eden özellik bu kullanıcıların talep formu okuyabilmeleridir. Mü¸steriler yalnızca bu tip kullanıcılara talep formu gönderebilirler. Yönetici: Sistemin devamlılı˘gını sa˘glayacak olan kullanıcıdır. Sistemdeki mesajları, talepleri ve ilanları resimleri ile birlikte görüntüleyebilecek ve uygun olmayanlarını silebilecektir. Yönetici ayrıca sistemdeki kullanıcıların kimler oldu˘gunu görebilir, herhangi bir kullanıcıyı sistemden silebilece˘gi gibi kullanıcıların s¸ifresini de de˘gi¸stirme yetkisine sahiptir. Kullanıcıların özellikleri bu s¸ekildedir. Simdi ¸ sistemin genel özellikleri hakkında bilgi verilecektir. Mesaj Alma-Gönderme: Misafir kullanıcı dı¸sında kalan di˘ger tüm kullanıcılar birbirleri ile mesajla¸sabileceklerdir. Kullanıcı mesaj göndermek istedi˘gi kullanıcının TC kimlik numarasını girerek 1
Genel Bilgiler
mesaj gönderebilir. Gönderdi˘gi mesajlar ve aldı˘gı mesajlar sistemde tutulacaktır. Her birinin kotası 50 olarak seçilmi¸stir. Talep Formu: Mü¸steriler, üst düzey emlakçılara talep formu gönderebileceklerdir. Bu formlar mü¸sterinin ilanlarda bulamadı˘gı türden evleri üst düzey emlakçılara bildirmelerini sa˘glamaktadır. ˙ Ilan Araman: Tüm kullanıcılar emlak aradıkları ilçe ve semti seçtikten sonra di˘ger özellikleri de opsiyonlu olarak seçerek arama yapabilirler. Kullanıcı Ayarları: Kullanıcılar ki¸sisel bilgilerini güncelleme ya da s¸ifre de˘gi¸stirmek için ayarlar linkini kullanabilirler. ˙ Istatistikler: Site hakkında genel istatistikler görüntülenir. En fazla emlak satılan semt, en fazla emlak satan emlakçı gibi istatistikler görüntülenir. Kredi Hesaplama: Kullanıcıları çe¸sitli bankaların konut kredisi alanlarına yönlendirir. Duyuru: Yönetici sitedeki herkesin görebilmesi için duyuru ekleyebilir. Bu duyurular her sayfanın sa˘g tarafında görülebilir. Anket: Sitede yönetici tarafında koyulan çe¸sitli anket soruları bulunmaktadır. Ziyaretçiler aynı ip adresiyle yalnızca bir kez oy kullanabilirler. Bu özelliklerin yanı sıra s¸ifre hatırlatma seçene˘gi de bulunmaktadır. Herhangi bir kullanıcı s¸ifresini unuttu˘gunda TC kimlik numarasını girerek s¸ifresini ö˘grenebilir. Kullanıcının s¸ifresi elektronik posta adresine gönderilecektir.
Gelistirme ¸ ve Çalıstırma ¸ Ortamı Proje MySQL veritabanı ve PHP dili kullanılarak gerçekle¸stirilmi¸stir. Java Script kodları da yer yer kullanılmı¸stır. Sunucu olarak ise Apache kullanılmı¸stır. Proje grup üyeleri tarafından ayrı ortamlarda hazırlanmı¸stır. Tüm üyeler PHP 4.3.1, Apache 1.3.33 ve MySQL 4.1.9 sürümlerini kullanmı¸slardır. ˙Internet Explorer 5.5 internet tarayıcısında ve Windows Xp i¸sletim sistemi altında sorunsuz çalı¸smakta iken, Opere ve Mozilla Firefox internet tarayıcılarında tabloların gösteriminde hata olu¸smaktadır.
˙Is¸ Bölüsümü ¸ Proje üyüleri arasında i¸s bölümü: 1. Mehmet AKTAS¸ • Veritabanı tasarımı, • Raporda veritabanı tasarımının anlatılması, • A¸sa˘gıdaki php kodlarının yazılması:
2
Genel Bilgiler
• uye_ol.php • em_bak_semt.php • 5ilan_ekle.php • talep_gönder.php • giden_talep.php • gelen_talep.php • talep_oku.php • unuttum.php 2. Ali KELES¸ • Veritabanı tasarımı • Ana sayfa ve di˘ger sayfaların görsel tasarımı, style dosyalarının olu¸sturulması, • Raporun xml formatına dönü¸stürülmesi, • Genel bilgiler kısmının yazılması, • A¸sa˘gıdaki php kodlarının yazılması: • kontrol.php • index.php • menu.php • istatistik.php • mesaj.php
3
Genel Bilgiler
• mesaj_gonderilen.php • yeni_mesaj.php • mesaj_oku.php • oy_ver.php • ayarlar.php • sifre_degistir.php • kredi.php • ev_puan_hesapla.php • kullanici_bilgi.php • musteri.php, emlakci.php 3. Erman ORAL • Veritabanı tasarımı, • Sunum dökümanlarının hazırlanması, • Emlak.swf ve Emlak2.swf animasyonlarının hazırlanması, • A¸sa˘gıdaki php kodların yazılması: • yonetici.php • y_mesajlar.php • y_ilanlar.php • y_resimbilgi.php
4
Genel Bilgiler
• y_talepformu.php • y_uyebilgi.php • y_uyeler.php • y_evbilgi.php • y_anket.php • anketfomu.php • anket_ekle.php • grafik.php 4. Meriç POLAT • Kullanım klavuzunun hazırlanması, • A¸sa˘gıdaki php kodlarının yazılması: • ilangoster.php • ilanekle.php • insertcontrol.php • duyuruoku.php • duyuruekle.php • duyurugoster.php • duzenle.php • updatecontrol.php
5
Genel Bilgiler
• resim.php • detay.php • ilce.php • semt.php 5. Kaan Ta¸sçı • Sunum dökümanlarının hazırlanması, • A¸sa˘gıdaki php kodlarının yazılması: • ilan_ara.php • gelismis_arama.php • config.php, opendb.php, closedb.php, logout.php Ayrıca her üye teknik klavuz kısmında kendi yazmı¸s oldukları kodların açıklamasını yapmı¸stır.
6
Bölüm 2. Kurulum Projenin kodları ve projede kullanılmı¸s olan di˘ger dökümalar bir Apache sunucusu üzerine kopyalanmalıdır
Veritabanı Olusturulması: ¸ Veritabanını olu¸sturmak için phpMyAdmin kullanılabilir. Bu durumda karakter kodlama (collation) seçene˘gi “utp8_turkish_ci” olarak de˘gi¸stirilmeli veya komut satırı üzerinden CREATE DATABASE ‘E5‘ DEFAULT CHARACTER SET utf8 COLLATE utf8_turkish_ci; kullanılarak bo¸s bir veritabanı olu¸sturulabilir.
Tabloların Olusturulması ¸ Projede kullanılan tüm tabloları olu¸sturulması için projeyle beraber verilen VERITABANI.SQL dosyası phpMyAdmin komut satırına kopyalanabilir veya [“ Location of the textfile:”] ile gösterilen sekmeden VERITABANI.SQL seçilerek tablolar olu¸sturulabilir.
˘ MySQL Sunucusuna Baglanma: Sunucuya ba˘glanmak için config/config.php isimli php dosyası kullanılmaktadır. Bu dosya a¸sa˘gıda görüldü˘gü gibidir. <?php $dbhost $dbuser $dbpass $dbname ?>
= = = =
’localhost’; //sunucu adı ’E5’; //kullanıcı adı ’LefKuOtloy’; //¸ sifre ’E5’; //veritabanı
Burada kullanıcı sunucu adını, kullanıcı adını, s¸ifresini ve veritabanını belirtmelidir. E˘ger sunucu, kullanılan bilgisayar üzerinde kuruluysa sunucu adına ‘localhost’ yazılmalıdır. Kullanıcı adı ve s¸ifre kullanıcının kendi belirledi˘gi de˘gerlerdir. Veritabanı ise MySQL de olu¸sturulan tabloların bulundu˘gu veritabanı ismidir.
7
Bölüm 3. Kullanım Kılavuzu Emlak alım-satım i¸slemlerini koordine edip bu i¸slemlerin düzenli bir biçimde yürütülmesini sa˘glayan programın esas bölümleri a¸sa˘gıdaki gibidir:
1. Ana Sayfa: Sistem kullanıcılarının s¸ifre ve kullanıcı adı ile giri¸s yapabilece˘gi, sisteme üye olmayanların üye olabilece˘gi, aynı zamanda basit ilan arama , anket ve duyuru i¸slemlerinin yapılabilece˘gi temel ekrandır. 2. Mü¸steri Sayfası: Mü¸sterilerin i¸slemlerini yaptı˘gı temel ekrandır. 3. Emlakçı Sayfası: Emlakçı tipindeki üyelerin i¸slemlerini yapabilecekleri temel ekrandır. 4. Yönetici Sayfası: En yetkili kullanıcı olan yöneticinin i¸slem yapabildi˘gi sayfadır.
Ana Sayfa: Ana sayfa sistemi çalı¸stıran kullanıcı i¸slemlerine ilk olarak bu sayfadan ba¸slar. Bu sayfa üzerindeki sisteme giri¸s veya üye kaydı temel i¸slevlerdendir.
Sisteme Giris : Kullanıcı adı ve parolası kullanılarak sisteme giri¸s i¸slemi yapılır.
Üye Ol: Kullanıcı kendine ait bir kullanıcı adı ve parola ile sisteme giri¸s yapabilmek için üyelik i¸slemlerini bu ba˘glantıyla gerçekle¸stirir. Üye olma i¸slemi kullanıcı tipinin seçilmesi ve seçilen kullanıcı tipine göre gerekli bilgilerin doldurulmasıyla gerçekle¸sir.
Sekil ¸ 3.1. Üyelik Seçimi
8
Kullanım Kılavuzu
Mü¸steri ise kullanıcılardan temel olarak istenen bilgileri girip üyeli˘gini yapabilir. Üyelik bilgileri eksiksiz ve do˘gru dolduruldu˘gunda kayıt yapılır. Kullanıcının e-mail adresi, telefon numarası do˘gru formatta olmalıdır. Aksi durumda hata mesajı alınıp üyelik yapılmayacaktır.
Sekil ¸ 3.2. Üyelik Bilgilerinin Doldurulması
9
Kullanım Kılavuzu
Emlakçı üyeli˘gi yapılırken kullanıcı en az 5 tane ilan girmek zorundadır, ayrıca kendine belirli bir bölgeyi (ilçe-semt) çalı¸sma alanı olarak seçebilir.
˙ Sekil ¸ 3.3. Ilan Ekleme Kısmı
10
Kullanım Kılavuzu
Müsteri ¸ Sayfası Ana Sayfa Ana sayfaya dönü¸s i¸slemi.
Sekil ¸ 3.4. Mü¸steri Ana Sayfası
11
Kullanım Kılavuzu
˙Ilan Ara Basit formatta ilan arama i¸slemi. Ana sayfada da bu seçenek görüntülenir.
Gelismi ¸ s¸ Arama Detaylı arama kriterleri ile arama i¸sleminin yapılması. Detay kriterleri : oda sayısı aralı˘gı , salon sayısı aralı˘gı , kat aralı˘gı, ısıtma sistemini , otopark durumunu, ebeveyn banyosu, ücretin aralı˘gı, alan aralı˘gı s¸eklindedir.
Sekil ¸ 3.5. Geli¸smi¸s Arama
12
Kullanım Kılavuzu
Mesajlarım Kullanıcı di˘ger üyelere mesaj gönderebilir. Bir üye ba¸ska bir üyenin mesaj kutusunu/mesajlarını görüntüleyemez. Kullanıcı kendi mesajlarını silebilir, cevaplayabilir. Mesaj ba˘glantısının yanında okunmamı¸s mesaj sayısı kullanıcıya gösterilir. Mü¸steri, mesaj gönderip aldı˘gı emlakçılara oy verme hakkı kazanır.
Sekil ¸ 3.6. Mesaj
13
Kullanım Kılavuzu
Oy Kullan Daha önce mesaj gönderme/alma i¸slemi yapılmı¸s emlakçılara puan verme (her emlakçıya sadece 1 kez) i¸slemi yapılır. Emlakçılar aldıkları oy ortalamasına göre belirli seviyeler yakalayabilir. Ortalama puanı 7 olan kullanıcı en az 20 mü¸steriden oy alması halinde üst düzey emlakçı olur. Bunun kullanıcıya faydası talep formlarını görüntüleyebilmesidir.
Sekil ¸ 3.7. Oy Kullan
14
Kullanım Kılavuzu
Kredi Hesapla Mü¸steri ihtiyaç duyması halinde belirli bankalara ait kredi miktarlarını hesaplama i¸slemini yapabilir. Bunun için açılır pencere kullanılmı¸stır. Bankalara ait kredi hesaplama sayfalarına kullanıcının iste˘gine göre yönlendirme yapılır.
Sekil ¸ 3.8. Kredi Hesaplama
15
Kullanım Kılavuzu
˙Istatistikler Sistemdeki kayıtlara ait çe¸sitli istatistik bilgilerinin görüntülenmesi i¸slemini yapar. kullanıcıya fikir verme ve bilgilendirme açısından önem ta¸sır.
˙ Sekil ¸ 3.9. Istatistikler
16
Bu istatistikler
Kullanım Kılavuzu
˙Istatistikler aynı zamanda di˘ger kullanıcılar tarafından da görülebilir. ˙Istatistik bilgileri kendi kategorisine göre görüntülenece˘gi zaman elde edilir. ˙Istatistik bilgilerinin anla¸sılır olması için grafik gösterimi de mevcuttur. Grafikler en yüksek ve en dü¸sük de˘gerler kullanılarak elde edilmi¸stir. Görülebilen istatistikler : • En yüksek ev fiyatlarının oldu˘gu semtler • En dü¸sük ev fiyatlarının oldu˘gu semtler • En yüksek ev kiralarının oldu˘gu semtler • En dü¸sük ev kiralarının oldu˘gu semtler • En fazla emla˘gın satıldı˘gı semtler 17
Kullanım Kılavuzu • En az emla˘gın satıldı˘gı semtler • En fazla ev satan emlakçılar • En az ev satan emlakçılar • En fazla geliri olan emlakçılar • En az geliri olan emlakçılar
Talep Formu Gönderme Talep formu mü¸sterinin belirli özelliklerde aradı˘gı emlak bilgilerini içerir, alım/satım veya kiralama i¸slemlerinin daha pratik olmasını sa˘glar. Talep formunda kullanıcıdan aradı˘gı eve ait genel özellikleri girmesi istenir.
Sekil ¸ 3.10. Talep Formu
18
Kullanım Kılavuzu
Ayarlarım Kullanıcıya ait (mü¸steri tipinden) adres, telefon numarası ve e-mail bilgilerini içeren profilin düzenlenmesi i¸slemi ve s¸ifre de˘gi¸sikliklerini yerine getirir. Kullanıcı isterse girdi˘gi verileri temizleyebilir.
Sekil ¸ 3.11. Eri¸sim Bilgileri
19
Kullanım Kılavuzu
Sekil ¸ 3.12. Sifre ¸ De˘gi¸sikli˘gi
20
Kullanım Kılavuzu
Çıkıs¸ Kullanıcının sistemden çıkı¸s yapmasını sa˘glar. Bu durumda kullanıcı adı ve s¸ifre gibi özel bilgiler güvendedir.
Emlakçı Sayfası Emlakçı sisteme girdi˘ginde ana ekranında ilan arama (basit) i¸slemini yapabilir.
Sekil ¸ 3.13. Emlakçı Ana Sayfası
21
Kullanım Kılavuzu
Gelismi ¸ s¸ Arama Kullanıcı bu ba˘glantıyı kullanarak detaylı kriterler belirleyip arama yapabilir. Bu detaylı arama kriterleri oda sayısı aralı˘gı , salon sayısı aralı˘gı , kat aralı˘gı, ısıtma sistemini , otopark durumunu, ebeveyn banyosu, ücretin aralı˘gı, alan aralı˘gı s¸eklindedir.
Sekil ¸ 3.14. Geli¸smi¸s Arama
22
Kullanım Kılavuzu
Mesajlarım Emlakçının di˘ger kullanıcılara gönderdi˘gi, onlardan aldı˘gı mesajları görüntüleyip silme ve yeni mesaj yollama i¸slemlerini gerçekle¸stirdi˘gi yapıdır. Mesajlarım linki yanında mesaj kutusundaki okunmamı¸s mesaj sayısı görüntülenir. Mesajlar görüntülenirken hangi kullanıcıdan hangi tarihte geldi˘gi ve mesajın ba¸slı˘gı da kullanıcı tarafından görülür. Mesajın okunup okunmadı˘gını gösteren açık/kapalı zarf i¸saretleri her mesajın yanında görüntülenir.
Sekil ¸ 3.15. Mesajlarım
23
Kullanım Kılavuzu
Ayarlarım Kullanıcı kendi profiline ait bilgileri istedi˘gi zaman de˘gi¸stirebilir. Emlakçı tipindeki kullanıcının 3 tip ayar de˘gi¸stirme i¸slemi vardır : 1. Eri¸sim Bilgileri: Emlakçıya ait adres, telefon numarası, firma ve e-mail bilgileri de˘gi¸stirilebilir. 2. Semt ekleme/çıkarma : Emlakçının ilgilendi˘gi semt ve ilçelerin istediklerinin silinmesi veya yeni ilçe/semt bilgilerinin eklenmesi i¸slemleri bu menü yardımıyla yapılır. 3. ¸ de˘gi¸stirme i¸sleminde kullanıcının o Sifre ¸ de˘gi¸stirme : Emlakçı tipindeki kullanıcının s¸ifresinin de˘gi¸stirilir. Sifre an kullandı˘gı s¸ifre bir kez, yeni s¸ifresi 2 kez istenir. Bunun amacı güvenlik ve olası yanlı¸sları önlemektir.
˙Ilanlarım Emlakçının sisteme eklemi¸s oldu˘gu ilanları görüntülenmesi ˙Ilan Göster seçene˘giyle yapılır.
˙ Sekil ¸ 3.16. Ilan Ekleme Kısmı
24
Kullanım Kılavuzu
Emlakçı istedi˘gi ilanın detaylarını görüntüleyip bilgileri güncelleme i¸slemlerini yapabilir.
˙ Sekil ¸ 3.17. Ilan Ekleme Kısmı
25
Kullanım Kılavuzu
Güncelleme i¸slemleri foto˘graf ekleme / çıkarma, Otopark durumu ısıtma sistemi, ebeveyn banyo ve ücret alanları için geçerlidir.
˙ Sekil ¸ 3.18. Ilan Ekleme Kısmı
26
Kullanım Kılavuzu
Yönetici Sekil ¸ 3.19. Yönetici Ana Sayfası
27
Kullanım Kılavuzu
Mesajlarım Yönetici bu menüyü kullanarak di˘ger kullanıcılara mesaj gönderip onlardan aldı˘gı mesajları okuyabilir, göndermi¸s oldu˘gu mesajları görebilir, mesaj kutusunda silme i¸slemi yapabilir. 1. Yeni Mesaj : Mesaj gönderme i¸sleminde kullanıcı mesajın gidece˘gi kullanıcı numarasını girmekte zorunludur.
Sekil ¸ 3.20. Yeni Mesaj
28
Kullanım Kılavuzu
2. Gelen Kutusu : Mesajların hangi kullanıcıdan hangi tarihte geldi˘gi bilgisi yönetici tarafından görüntülenebilir. Mesaj Oku menüsünün yanında yöneticinin okumadı˘gı mesaj sayısı belirtilir.
Sekil ¸ 3.21. Gelen Kutusu
29
Kullanım Kılavuzu
3. Giden Kutusu : Yöneticinin göndermi¸s oldu˘gu mesajların listelendi˘gi bölümdür. Yönetici bu mesajları görüntüleyip silebilir.
Sekil ¸ 3.22. Giden Kutusu
30
Kullanım Kılavuzu
Üye Yönetimi Bu menü yardımıyla site yöneticisi kayıtlı kullanıcıların profillerini görüntüleyip s¸ifrelerini de˘gi¸stirebilme imkanına sahiptir. Kullanıcıların görüntülenen özellikleri Tc kimlik no, s¸ifre,kullanıcı tipi gibi temel üyelik bilgileri yanında e-mail, adres, telefon, ya¸s, meslek gibi farklı bilgileri de içerir.
Sekil ¸ 3.23. Üye Yönetimi
31
Kullanım Kılavuzu
Kullanıcının s¸ifre bilgisinin de˘gi¸stirilmesi ve detaylı profil bilgilerinin gösterilmesi:
Sekil ¸ 3.24. Üye Yönetimi
32
Kullanım Kılavuzu
Mesaj Yönetimi Yönetici tipindeki kullanıcı di˘ger üyelerin kendi aralarındaki mesajları gönderen, alan, tarih ve konu bilgileriyle beraber görüntüleyebilir. Yönetici bunlara ek olarak mesajları silme yetkisine de sahiptir.
Sekil ¸ 3.25. Mesaj Yönetimi
33
Kullanım Kılavuzu
˙Ilan Yönetimi Sisteme girilmi¸s ilanlara ait bilgilerin görüntülenmesi imkanı Yönetici kullanıcısına tanınmı¸stır. Veritabanında bulunan ilan bilgilerinin hangi kullanıcı tarafından verildi˘gi, giri¸s ve sonlandırılma tarihleri, durumu, ev özellikleri ver sistemdeki foto˘grafları (foto˘graf yüklendiyse) görüntülenebilir.
˙ Sekil ¸ 3.26. Ilan Yönetimi
34
Kullanım Kılavuzu
• ˙Ilana ait ev bilgilerin görüntülenmesi :
˙ Sekil ¸ 3.27. Ilan Yönetimi
35
Kullanım Kılavuzu
• ˙Ilana ait foto˘grafların görüntülenmesi : Yönetici, foto˘grafların uygun olup olmama durumunu kontrol etmek için ilanlara eklenen foto˘grafları görüp silme yetkisine sahiptir.
˙ Sekil ¸ 3.28. Ilan Yönetimi
36
Kullanım Kılavuzu
Talep Yönetimi Yönetici, sistemde bulunan talep formlarını, talebin hangi mü¸steriden hangi emlakçıya iletildi˘gi bililerini görüntüleyebilir. Yönetici bu talepleri silebilir.
Sekil ¸ 3.29. Talep Yönetimi
37
Kullanım Kılavuzu
Aynı zamanda aranılan evin özellikleri de yönetici tarafından görülebilir.
Sekil ¸ 3.30. Talep Yönetimi
38
Kullanım Kılavuzu
Anket Yönetimi Yönetici sitenin anket düzenlemesini yapar. Siteye anket ekleyip varsayılan (ana sayfada görüntülenecek olan ) anketi seçer. Bir veya birden fazla anketi veritabanından kaldırır.
Sekil ¸ 3.31. Anket Yönetimi
39
Kullanım Kılavuzu
• Anket Ekle: Yeni anket eklenece˘gi zaman izlenen yoldur. ˙Ilk adımda Yöneticiden anket sorusu istenir:
Sekil ¸ 3.32. Anket Yönetimi
40
Kullanım Kılavuzu
Sonraki adımlarda seçenek bilgileri alınır. Yönetici en az iki cevap seçene˘gi eklemek zorundadır, iki cevap seçene˘gi eklendi˘ginde anketin onaylanması için gerekli Kaydet butonu görüntülenir.
Sekil ¸ 3.33. Anket Yönetimi
41
Kullan覺m K覺lavuzu
42
Bölüm 4. Teknik Kılavuz Veritabanı Tasarımı 1. Kullanıcılar tablosu:
Tablo 4.1. kullanicilar Alan tc sifre ad tip h_soru h_cevap
Uzunluk 11 20 20
Veritipi varchar varchar varchar smallint varchar varchar
50 50
Varsayılan
Ekstra Özellik Birincil Anahtar evet
Dı¸s Anahtar
0 NULL NULL
Sistemde kayıtlı olan tüm kullanıcıların bulundu˘gu tablodur. Kullanıcıların s¸ifre ve tip bilgileri bu tablodan kontrol edilir. • tc: Kullanıcı kimli˘gidir. Kimlik olarak TC kimlik no bilgisi tutulur. Bu tablo için birincil anahtardır. • sifre: Sistem kullanıcıları için sisteme giri¸slerini sa˘glayacak s¸ifre bilgisi tutulur. • ad: Kullanıcıların isim bilgisi tutulur. • tip: Sistem kullanıcılarının tipi bilgisi tutulur. 0 - Mü¸steri, 1 - Emlakçı , 2 - Üst düzey emlakçı, 3 - yönetici • h_soru: Hatırlatma sorusudur. Kullanıcı s¸ifresini unuttu˘gu zaman s¸ifresini hatırlatmak için kullanılır. • h_cevap: Hatırlatma sorusunun cevabıdır
43
Teknik Kılavuz
2. Mü¸steri tablosu:
Tablo 4.2. musteri Alan tc yas meslek adres tel_no email
Veritipi varchar smallint varchar text varchar varchar
Uzunluk 11
Varsayılan
Ekstra Özellik Birincil Anahtar Dı¸s Anahtar evet kullanicilar(tc)
0 30 11 30
Sistemde bulunan mü¸sterileri ve onlara ait bazı ki¸sisel bilgileri tutar. “kullanicilar” tablosundaki güncelleme ve silme i¸slemleri, bu tabloya da yansıtılır. • tc: Mü¸steri kimli˘gidir. Kimlik olarak TC kimlik no bilgisi tutulur. Bu bilgi bu tablo için birincil anahtardır. Ayrıca kullanicilar tablosundaki tc niteli˘gine de bir dı¸s anahtardır. kullanicilar tablosundaki güncelleme ve silme i¸slemlerinde, de˘gi¸siklikler aynı s¸ekilde bu tabloya yansıtılacaktır. • yas: Mü¸sterinin ya¸sı bilgisi tutulur. • meslek: Mü¸sterinin meslek bilgisi tutulur. • adres: Mü¸sterinin ikamet adresi bilgisi tutulur. • tel_no: Mü¸sterinin irtibat telefonu bilgisi tutulur. • email: Mü¸sterilerin e-mail adresleri tutulur. 3. Emlakçı tablosu
Tablo 4.3. emlakci Alan tc firma tel_no adres email
Veritipi varchar varchar varchar text varchar
Uzunluk 11 20 11
Varsayılan
Ekstra Özellik Birincil Anahtar Dı¸s Anahtar evet kullanicilar(tc)
30
Sistemde bulunan emlakçılara ve üst düzey emlakçılara ait bazı bilgileri tutar. “kullanicilar” tablosundaki güncelleme ve silme i¸slemleri, bu tabloya da yansıtılır.
44
Teknik Kılavuz
• tc: Emlakçı kimli˘gidir. Kimlik olarak TC kimlik no bilgisi tutulur. Bu bilgi bu tablo için birincil anahtardır. Ayrıca kullanicilar tablosundaki tc niteli˘gine de bir dı¸s anahtardır. Kullanıcılar tablosundaki güncelleme ve silme i¸slemlerinde de˘gi¸siklikler aynı s¸ekilde bu tabloya yansıtılacaktır. • firma:
Emlakçı için firma ismi bilgisi tutulur.
• tel_no: Emlakçı ile irtibat telefonu bilgisi tutulur. • adres: Emlakçının ofisi için adres bilgisi tutulur. • email: Emlakçıların e-mail adresleri tutulur. 4. Semt tablosu:
Tablo 4.4. semt Alan id ilce semt puan
Veritipi integer varchar varchar integer
Uzunluk
Varsayılan
Ekstra Özellik Birincil Anahtar auto_increment evet
Dı¸s Anahtar
20 11 0
Bu tabloda semt ve ilçe bilgileri ile birlikte semtlere belirlenen puanlar da tutulur. Bu puanlar, semtlerin bulundukları bölgeye ve özelliklerine göre belirlenmi¸s olup; 0 ile 10 arasında de˘ger alabilmektedir. • id: Semt kimli˘gidir. Bu tablo için birincil anahtardır. AUTO_INCREMENT özelli˘gi ile bu de˘gerin sıralı artması sa˘glanmı¸stır. • ilce: Adres bilgilerinden ilçe bilgisi tutulur. • semt: Adres bilgilerinden semt bilgisi tutulur. • puan: Belirtilen ilçe ve semte özgü o mekanın lüks karakteristi˘gini belirten 0-10 arası puan bilgisini tutar. Ev puanının hesaplanmasında
45
Teknik Kılavuz
5. Emlakçının baktı˘gı semttlerin tablosu
Tablo 4.5. em_bak_semt Alan id semt_id emlakci_id
Uzunluk
Veritipi integer integer varchar
Varsayılan
Ekstra Özellik Birincil Anahtar auto_increment evet
Dı¸s Anahtar semt(id) emlakci(tc)
20 11
Emlakçıların sorumlu oldukları semtlerin tutuldu˘gu tablodur. “emlakci” tablosundaki silme ve güncelleme i¸slemleri bu tabloya da yansıtılır. • id: Kimlik bilgisidir. Bu tablo için birincil anahtardır. AUTO_INCREMENT özelli˘gi ile bu de˘gerin sıralı artması sa˘glanmı¸stır. • semt_id: Semt kimlik bilgisi tutulur. semt tablosundaki id niteli˘gine bir dı¸s anahtardır. semt tablosundaki güncelleme ve silme i¸slemlerinde de˘gi¸siklikler aynı s¸ekilde bu tabloya yansıtılacaktır • emlakci_id: Söz konusu emlakçı ile ilgili kimlik bilgisi tutulur. emlakci tablosundaki tc niteli˘gine bir dı¸s anahtardır. emlakci tablosundaki güncelleme ve silme i¸slemlerinde de˘gi¸siklikler aynı s¸ekilde bu tabloya yansıtılacaktır. 6. Ev tablosu
Tablo 4.6. ev Alan id oda_sayisi salon_sayisi kat semt_id isitma otopark ucret metrekare ebe_banyo satilik
Uzunluk
Veritipi integer smallint smallint smallint integer varchar tinyint integer smallint tinyint tinyint
Varsayılan
Ekstra Özellik Birincil Anahtar auto_increment evet
Dı¸s Anahtar
semt(id) 20 0
0 1
Ev bilgilerinin tutuldu˘gu tablodur. “semt” tablosudaki silme ve güncelleme i¸slemleri bu tabloya da yansıtılır. • id: Kimlik bilgisidir. Bu tablo için birincil anahtardır. AUTO_INCREMENT özelli˘gi ile bu de˘gerin sıralı artması sa˘glanmı¸stır. • oda_sayisi: Oda sayısı bilgisi tutulur.
46
Teknik Kılavuz
• salon_sayisi: Salon sayısı bilgisi tutulur. • kat: Kat bilgisi tutulur. • semt_id: Evin bulundu˘gu semtin kimlik bilgisidir. semt tablosundaki id niteli˘gine bir dı¸s anahtardır. semt tablosundaki güncelleme ve silme i¸slemlerinde, de˘gi¸siklikler aynı s¸ekilde bu tabloya yansıtılacaktır. • isitma: Evin ısınma türü ile ilgili bilgi tutulur. • otopark: Evin otopark bilgisi tutulur. • ucret: Evin kiralıksa kira, satılıksa satılık ücreti bilgisi tutulur. • metrekare: Evin metrekare bilgisi tutulur. • ebe_banyo: Ebeveyn banyosu bilgisi tutulur. • satilik: Evin satılık mı kiralık mı oldu˘gu bilgisi tutulur. 7. Talep formu tablosu
Tablo 4.7. talep_formu Alan id emlakci musteri ev_id okundu
Veritipi integer varchar varchar integer tinyint
Uzunluk
Varsayılan
11 11
Ekstra Özellik Birincil Anahtar auto_increment evet
Dı¸s Anahtar emlakci(tc) musteri(tc) ev(id)
0
Mü¸sterilerin, emlakçılara gönderdi˘gi ev taleplerini tutar. “emlakci” ve “musteri” tablosundaki silme i¸slemi bu tabloya da yansıtılır. • id: Kimlik bilgisidir. Bu tablo için birincil anahtardır. AUTO_INCREMENT özelli˘gi ile bu de˘gerin sıralı artması sa˘glanmı¸stır. • emlakci: Talep formunun gönderildi˘gi üst düzey emlakçı kullanıcısının TC kimlik no bilgisi tutulur. emlakci tablosundaki tc bilgisine bir dı¸s anahtardır. emlakci tablosundaki güncelleme ve silme i¸slemlerinde de˘gi¸siklikler aynı s¸ekilde bu tabloya yansıtılacaktır.
47
Teknik Kılavuz
• musteri: Talep formunu dolduran mü¸sterinin TC kimlik no bilgisi tutulur. musteri tablosundaki tc bilgisine bir dı¸s anahtardır. musteri tablosundaki güncelleme ve silme i¸slemlerinde de˘gi¸siklikler aynı s¸ekilde bu tabloya yansıtılacaktır. • ev_id: Talep formunda belirtilen ev özellikleriyle olu¸sturulan sanal ev için kimlik bilgisi tutulur. ev tablosundaki id niteli˘gine bir dı¸s anahtardır. • okundu: Talebin, talebi alan emlakçı tarafından okunup okunmadı˘gı bilgisi tutulur böylece kullanıcının talep bölümünde düzen sa˘glanmı¸s olur. 8. Mesaj tablosu:
Tablo 4.8. mesaj Alan id alan gonderen konu mesaj okundu tarih
Veritipi integer varchar varchar varchar text tinyint date
Uzunluk
Varsayılan
11 11 20
Ekstra Özellik Birincil Anahtar auto_increment evet
Dı¸s Anahtar kullanicilar(tc) kullanicilar(tc)
0
Kullanıcılar tarafından gönderilen mesajların tutuldu˘gu tablodur. “kullanicilar” tablosundaki silme ve güncelleme i¸slemleri bu tabloya da yansıtılır. • id: Mesaj kimli˘gi bilgisidir. Bu tablo için birincil anahtardır. AUTO_INCREMENT özelli˘gi ile bu de˘gerin sıralı artması sa˘glanmı¸stır. • alan: Mesajı alan kullanıcının TC kimlik nosu bilgisi tutulur. kullanicilar tablosundaki tc niteli˘gine bir dı¸s anahtardır. kullanicilar tablosundaki güncelleme ve silme i¸slemlerinde, de˘gi¸siklikler aynı s¸ekilde bu tabloya yansıtılacaktır. Bu s¸ekilde kullanıcı silindi˘gi an kullanıcının aldı˘gı mesajların da silinmesi garantilenmi¸s olur. • gonderen: Mesajı gönderen kullanıcının TC kimlik no bilgisi tutulur. kullanicilar tablosundaki tc niteli˘gine bir dı¸s anahtardır. kullanicilar tablosundaki güncelleme ve silme i¸slemlerinde, de˘gi¸siklikler aynı s¸ekilde bu tabloya yansıtılacaktır. Bu s¸ekilde kullanıcı silindi˘gi an kullanıcının gönderdi˘gi mesajların da silinmesi garantilenmi¸s olur. • konu: Mesajın konu ba¸slı˘gı bilgisi tutulur. • mesaj: Mesaj metni tutulur. • okundu: Mesajın mesajı alan kullanıcı tarafından okunup okunmadı˘gı bilgisi tutulur böylece kullanıcının mesaj kutusunda düzen sa˘glanmı¸s olur. 48
Teknik Kılavuz
• tarih: Mesajın gönderildi˘gi tarih bilgisi tutulur. 9. Oylar tablosu:
Tablo 4.9. oylar Alan id oy_alan oy_veren oy
Veritipi integer varchar varchar integer
Uzunluk
Varsayılan
Ekstra Özellik Birincil Anahtar auto_increment evet
11 11
Dı¸s Anahtar emlakci(tc) musteri(tc)
0
Mü¸sterilerin emlakçılara verdi˘gi oyların tutuldu˘gu tablodur. “emlakci” tablosundaki silme i¸slemi bu tabloya yansıtılır. • id: Kimlik bilgisidir. Bu tablo için birincil anahtardır. AUTO_INCREMENT özelli˘gi ile bu de˘gerin sıralı artması sa˘glanmı¸stır. • oy_alan: Oy alan emlakçının TC kimlik no bilgisini tutar. emlakci tablosundaki tc niteli˘gine bir dı¸s anahtardır. emlakci tablosundaki güncelleme ve silme i¸slemlerinde, de˘gi¸siklikler aynı s¸ekilde bu tabloya yansıtılacaktır. • oy_veren: Oy veren mü¸sterinin TC kimlik no bilgisini tutar. musteri tablosundaki tc niteli˘gine bir dı¸s anahtardır. musteri tablosundaki güncelleme ve silme i¸slemlerinde, de˘gi¸siklikler aynı s¸ekilde bu tabloya yansıtılacaktır. • oy: verilen 0-10 arası oy de˘geri bilgisi tutulur. 10. ˙Ilan tablosu:
Tablo 4.10. ilan Alan id ev_id emlakci_id giris_tarih durum bitis_tarihi
Veritipi integer integer varchar date binary date
Uzunluk
Varsayılan
11
Ekstra Özellik Birincil Anahtar auto_increment evet
Dı¸s Anahtar ev(id) emlakci(tc)
1 NULL
Emlakçıların sisteme girdikleri ilanları ve onlara ait bilgileri tutar. “emlakci” tablosundaki silme i¸slemi bu tabloya da yansıtılır. • id: Kimlik bilgisidir. Bu tablo için birincil anahtardır. AUTO_INCREMENT özelli˘gi ile bu de˘gerin sıralı artması sa˘glanmı¸stır. 49
Teknik Kılavuz
• ev_id: ˙Ilanda belirtilen ev için kimlik bilgisi ta¸sır. ev tablosundaki id niteli˘gine bir dı¸s anahtardır. • emlakci_id: ˙Ilanı gönderen emlakçının TC kimlik no bilgisi tutulur. emlakci tablosundaki tc niteli˘gine bir dı¸s anahtardır.emlakci tablosundaki güncelleme ve silme i¸slemlerinde de˘gi¸siklikler aynı s¸ekilde bu tabloya yansıtılacaktır. • giris_tarih: ˙Ilanın girildi˘gi tarihin bilgisi tutulur. • durum: ˙Ilanda belirtilen evin satılıp satılmadı˘gı ya da kiralanıp kiralanmadı˘gı bilgisi tutulur. • bitis_tarih: ˙Ilanın geçerli˘gi oldu˘gu son tarih bilgisi tutulur. 11. Resim tablosu:
Tablo 4.11. resim Alan id ilan_id konum
Veritipi integer integer varchar
Uzunluk
Varsayılan
Ekstra Özellik Birincil Anahtar auto_increment evet
Dı¸s Anahtar ilan(id)
50
Emlakçılar tarafından girilen ilanlara ait resimlerin sistemdeki yerlerini (dizinlerini) tutan tablodur. “ilan” tablosundaki silme i¸slemi bu tabloya da yansıtılır. • id: Resim kimlik bilgisidir. Bu tablo için birincil anahtardır. AUTO_INCREMENT özelli˘gi ile bu de˘gerin otomatik sıralı artması sa˘glanmı¸stır. • ilan_id: Resmin ait oldu˘gu ilanın kimlik bilgisidir. ilan tablosundaki id niteli˘gine bir dı¸s anahtardır. ilan tablosundaki güncelleme ve silme i¸slemlerinde, de˘gi¸siklikler aynı s¸ekilde bu tabloya yansıtılacaktır. • konum: Resim dosyasının adı tutulmaktadır. 12. Satılan ev tablosu:
Tablo 4.12. satilan_ev Alan id emlakci tarih fiyat satilik semt_id
Veritipi integer varchar date integer tinyint integer
Uzunluk
Varsayılan
11
Ekstra Özellik Birincil Anahtar auto_increment evet
Dı¸s Anahtar emlakci(tc)
1 semt(id)
Emlakçılar tarafından satılan veya kiralanan evlerin bilgilerini tutar. Kullanım amacı daha çok istatikseldir. 50
Teknik Kılavuz
• id: Kimlik bilgisidir. Bu tablo için birincil anahtardır. AUTO_INCREMENT özelli˘gi ile bu de˘gerin sıralı artması sa˘glanmı¸stır. • emlakci: Evi satan ya da kiralayan emlakçının TC kimlik no bilgisi tutulur. emlakci tablosundaki tc niteli˘gine bir dı¸s anahtardır. emlakci tablosundaki güncelleme i¸slemleri direk olarak bu tabloya yansıtılacak, silme i¸slemlerinde ise bu nitelik null yapılacak satılan ya da kiralanan ev kaydı silinmeyecektir. • tarih: Emlakçının sattı˘gı evin ya da kiraladı˘gı evin kiralanma veya satılma tarihi bilgisi tutulur. • fiyat: Evin satıldı˘gı ya da kiralandı˘gı fiyat bilgisi tutulur. • satilik: Evin satıldı˘gı ya da kiralandı˘gı bilgisi tutulur. • semt_id: Evin satıldı˘gı semtin kimlik bilgisi tutulur. semt tablosundaki id niteli˘gine bir dı¸s anahtardır. semt tablosundaki güncelleme ve silme i¸slemlerinde, de˘gi¸siklikler aynı s¸ekilde yansıtılacaktır. 13. Duyurular tablosu:
Tablo 4.13. duyurular Alan id gonderen tarih metin
Veritipi integer integer date mediumtext
Uzunluk
Varsayılan 0 00-00-0000
Ekstra Özellik Birincil Anahtar auto_increment evet
Dı¸s Anahtar kullanicilar(tc)
Kullanıcılar tarafından duyurular bölümüne eklenen duyuruları tutar. “kullanicilar” tablosundaki silme i¸slemi bu tabloya da yansıtılır. • id: Kimlik bilgisidir. Bu tablo için birincil anahtardır. AUTO_INCREMENT özelli˘gi ile bu de˘gerin otomatik sıralı artması sa˘glanmı¸stır. • gonderen: Duyuruyu, sayfaya koyan kullanıcının TC kimlik no bilgisi tutulur. kullanıcı tablosundaki tc niteli˘gine bir dı¸s anahtardır. kullanıcı tablosundaki güncelleme ve silme i¸slemlerinde de˘gi¸siklikler aynı s¸ekilde bu tabloya yansıtılacaktır. • tarih: Duyurunun siteye koyulma tarihi bilgisini tutar. • metin: Duyuru metni tutulur.
51
Teknik Kılavuz
14. Anket tablosu:
Tablo 4.14. anket Alan id soru goster
Veritipi integer varchar tinyint
Uzunluk
Varsayılan
50
NULL 0
Ekstra Özellik Birincil Anahtar auto_increment evet
Dı¸s Anahtar
Yönetici tarafından hazırlana anketlerin tutuldu˘gu tablodur. “goster”, o anda hangi anketin gösterilece˘gi bilgisini tutar. Herhangi bir anda sadece bir anketin göster de˘geri “1” olabilir. • id: Kimlik bilgisidir. Bu tablo için birincil anahtardır. AUTO_INCREMENT özelli˘gi ile bu de˘gerin otomatik sıralı artması sa˘glanmı¸stır. • soru: Anket metni tutulur. • goster: Anketin gösterilip gösterilmeyece˘gi bilgisi tutulur. goster niteli˘gi 1 ise o anket gösterilir. Aynı anda sadece bir anket gösterildi˘gi için o anda sadece bir anketin goster de˘geri 1 olabilir. 15. Cevap tablosu:
Tablo 4.15. cevap Alan id anket_id cevap oy_sayisi
Veritipi integer integer varchar integer
Uzunluk
Varsayılan
50
0 NULL 0
Ekstra Özellik Birincil Anahtar auto_increment evet
Dı¸s Anahtar anket(id)
Anketlerdeki seçeneklere verilen oy sayılarını tutar. “anket” tablosundaki silme ve güncelleme i¸slemleri bu tabloya da yansıtılır. • id: Kimlik bilgisidir. Bu tablo için birincil anahtardır. AUTO_INCREMENT özelli˘gi ile bu de˘gerin otomatik sıralı artması sa˘glanmı¸stır. • anket_id: Oy verilen anketin id no bilgisi tutulur. anket tablosundaki id niteli˘gine bir dı¸s anahtardır. anket tablosundaki güncelleme ve silme i¸slemlerinde de˘gi¸siklikler aynı s¸ekilde bu tabloya yansıtılacaktır. • cevap: Anketin seçeneklerinden her biri ayrı ayrı bu nitelikte tutulur. • oy_sayisi: Anketin seçene˘gine verilen oy sayısı tutulur.
52
Teknik Kılavuz
16. Oy kullananlar tablosu:
Tablo 4.16. oy_kullananlar Alan id anket_id ip
Veritipi integer integer varchar
Uzunluk
Varsayılan
15
0 NULL
Ekstra Özellik Birincil Anahtar auto_increment evet
Dı¸s Anahtar anket(id)
Anketlere oy kullanan kullanıcıların “ip” numaralarını tutar. Kullanıcı bir ankete yalnız bir kez oy verebilir. • id: Kimlik bilgisidir. Bu tablo için birincil anahtardır. AUTO_INCREMENT özelli˘gi ile bu de˘gerin otomatik sıralı artması sa˘glanmı¸stır. • anket_id: Oy verilen anketin id no bilgisi tutulur. anket tablosundaki id niteli˘gine bir dı¸s anahtardır. anket tablosundaki güncelleme ve silme i¸slemlerinde de˘gi¸siklikler aynı s¸ekilde bu tabloya yansıtılacaktır. • ip: Ankete oy kullanan kullanıcının ip adresi tutulur. Varlık-ili¸ski diyagramı:
˙ ski Diyagramı Sekil ¸ 4.1. Varlık-Ili¸
53
Teknik Kılavuz
Sekil ¸ 4.2. Tablo ba˘glantıları
Yazılım Tasarımı Projenin içerdi˘gi kodların yapısı s¸u s¸ekildedir:
uye_ol.php Yeni üye olacak olan kullanıcını kaydının yapılaca˘gı sayfadır. Öncelikle kullanıcı, hangi tipten kullanıcı olmak istedi˘gini seçer. Bu tip, mü¸steri ve emlakçı olmak üzere iki tiptedir. Kullanıcının seçti˘gi tipe göre $tip de˘gi¸skeni de˘ger alır. Kullanıcı mü¸steriyi seçmi¸sse tip de˘gi¸skeni “0”, emlakçıyı seçmi¸sse $tip de˘gi¸skeni “1” de˘gerini alır. Bu de˘gi¸skenin de˘gerine göre kullanıcının kar¸sısına iki çe¸sit form gelebilmektedir. $tip de˘gi¸skeni “0” de˘gerini almı¸ssa kullanıcının kar¸sısına “form1.inc” dosyası 54
Teknik Kılavuz
içerisindeki form getirilir. $tip de˘gi¸skeni “1” de˘gerini almı¸ssa “form2.inc” dosyası içerisindeki form getirilir. Bu i¸slemi gerçekle¸stirmek iin kullanılan kod parçası a¸sa˘gıdaki gibidir. if (isset($_POST[’tip’])){ switch($tip=$_POST[’tip’]){ case 1: include ’form1.inc’; break; case 2: include ’form2.inc’; break; } } Bu i¸slemden sonra, POST yöntemi ile kullanıcıdan form bilgileri alınır. Form bilgileri de˘gi¸skenlere alınarak kontrolleri yapılır. Mü¸steri tipinden kullanıcılardan alınan form bilgileri: TC kimlik numarası “tc”, s¸ifresini “sifre”, s¸ifre tekrarını “sifre1”, hatırlatma sorusu “h_soru”, hatırlatmasorusunun cevabı “h_cevap”, e-posta adresi “email”, e-posta adresinin tekrarı “email1”, adı soyadı “ad”, mesle˘gi “meslek”, ya¸sı “ya¸s” , telefon numarası “tel_no”, ve adresi “adres”. Emlakçı tipinden kullanıcılardan alınan form bilgileri: TC kimlik numarası “tc”, s¸ifresini “sifre”, s¸ifre tekrarını “sifre1”, hatırlatma sorusu “h_soru”, hatırlatmasorusunun cevabı “h_cevap”, e-posta adresi “email”, e-posta adresinin tekrarı “email1”, adı soyadı “ad”, firması adı “firma”, telefon numarası “tel_no”, ve adresi “adres”. Bunlardan sadece adres bilgisinin girilmesi zorunlu de˘gildir. Di˘ger bilgilerin girilip girilmedi˘gi ve girilmi¸slerse do˘gru karakterlerden olu¸sup olu¸smadıkları kontrol edilir. Kontrolde ortaya çıkan hatalar “hata” de˘gi¸skeni içerisinde toplanarak kullanıcıya uyarı olarak bildirilir. Bu kontrollerden sonra kullanıcı TC kimlik numarasının ve e-posta adresinin daha önceden kayıtlı olup olmadı˘gı kontrol edilir. Bu bilgiler veritabanında mevcut ise hata mesajı gösterilir. Hata mesajı gönderilmesi durumunda kullanıcıya girdi˘gi bilgiler tekrar gösterilerek, hatalı bölümü de˘gi¸stirmesi istenir. Mü¸steriler tüm kontrollerden geçtikten sonra kayıtları iki farklı tabloya yapılır. Veritabanına kayıt i¸slemlerinin sql ifadeleri: INSERT INTO kullanicilar (tc, sifre, ve INSERT INTO musteri ad, tip) VALUES ($tc,’$sifre’,’$ad’,0) (tc,yas,meslek,adres,tel_no,email) VALUES ($tc,$yas, ’$meslek’,’ $adres’, $tel_no, ’$email’)" s¸eklindedir. Kaydı yapılan mü¸sterinin e-posta adresine “mail()” fonksiyonu kullanılarak12 haneli random bir s¸ifre gönderilir ve mü¸sterinin kaydı sona ermi¸s olur. Emlakcilar da tüm kontrolleri geçtikten sonra kayıtları iki farklı tabloya yapılır. Veritabanına kayıt i¸slemlerinin sql ifadeleri: INSERT INTO kullanicilar (tc,sifre,ad,tip,h_soru,h_cevap) VALUES ($tc,’$sifre’,’$ad’,1,$h_soru,$h_cevap)) ve INSERT INTO emlakci (tc,firma,tel_no,adres,email) VALUES ($tc,’$firma’,$tel_no,’$adres’,’$email’) s¸eklindedir. Kaydı yapılan emlakçı em_bak_semt.php sayfasına yönlendirilir.
em_bak_semt.php Emlakçının sorumlu olaca˘gı semtleri, em_bak_semt tablosuna kaydetmek için kullanılan sayfadır. uye_ol.php de emlakçının TC kimlik numarasının kaydedildi˘gi sessionı alarak $emlakci_tc de˘gi¸skenine atar. Emlakçının seçebilece˘gi semtleri veritabanından çekerek combobox s¸eklinde gösterir. Bunu i¸slem için kullanılan sql ifadesi: Select distinct ilce from semt s¸eklindedir. Seçilen ilçeyi $ilce de˘gi¸skenine kaydederek bu ilçeye ba˘glı semtlerin 2. comboboxta görüntülenmesini sa˘glar. Bu i¸slem için kullanılan sql ifadesi: Select distinct semt,id from semt where ilce = ’$ilce’ s¸eklindedir. Emlakçının buradan semti seçip “ekle” butonuna basmasıyla bu semtin id numarası $semt_id de˘gi¸skenine atanır ve em_bak_semt tablosuna eklenir. Bu i¸slem için kullanılan sql ifadesi: INSERT INTO em_bak_semt (semt_id, emlakci_id) VALUES ($semt_id, $emlakci_id) s¸eklindedir. Emlakçının son ekledi˘gi semt ekrana yazdırılır ve ekledi˘gi tüm semtler bir 55
Teknik Kılavuz
tablo halinde gösterilir. Eklenen tüm semtlerin ba¸sına bir checkbox eklenerek istenilen semtin emlakçı tarafından silinebilmesi sa˘glanmı¸stır. ˙I¸saretli olan checkboxlar sil[] içine alınarak silinmektedir. Bu i¸slemi gerçekleyen sql ifadesi: $query = "DELETE FROM em_bak_semt WHERE id IN ("; foreach($sil as $value) { $query.= "$value, "; } $query.="$value) AND emlakci_id = ’$emlakci_id’"; s¸eklindedir. Burada sil[] içine alınan tüm de˘gerler foreach döngüsü içerisinde em_bak_semt tablosundan silinmektedirler. Emlakci semt ekleme i¸sini bitirdikten sonra “bitti” butonunu basarak “5ilan_ekle.php” sayfasına yönlenir.
5ilan_ekle.php Emlakçının siteye koymak istedi˘gi ev ilanlarını ekleyece˘gi sayfadır. “uye_ol.php” de emlakçının TC kimlik numarasının kaydedildi˘gi sessionı alarak “$emlakci_tc” de˘gi¸skenine atar. Emlakçı kayıt olabilmek için en az 5 tane ilan koymalıdır. Bunun için “$_SESSION[’sayi’] ” kullanılmı¸stır. Emlakçının sayfaya ilk giri¸sinde bu sessiona “5” de˘geri atanır ve her yeni ilan eklemesinde 1 azaltılır. Emlakçı 5 tane ilan ekledi˘gi zaman kaydın tamamlandı˘gı bildirilir ancak istenirse ilan eklemeye devam edilebilir. Emlakçıdan form ile alınan bilgiler 3 farklı tabloya eklenir. ˙Ilk olarak ev tablosuna eklenir. Bu i¸slemin sql ifadesi: “INSERT INTO ev (oda_sayisi, salon_sayisi, kat,semt_id, isitma, otopark, ucret, metrekare, ebe_banyo, satilik) VALUES ($oda_sayisi, $salon_sayisi, $kat, $semt_id, ’$isitma’, $otopark, $ucret, $metrekare, $ebe_banyo, $satilik)” s¸eklindedir. Ev tablosuna eklenen satırın “id” numarası alınır(“select max(id) from ev”) ve di˘ger verilerle birlikte ilan tablosuna eklenir (“INSERT INTO ilan (ev_id, emlakci_id, giris_tarih, durum, bitis_tarih) VALUES ($ev_id, $emlakci_tc, ’$tarih’, 1, NULL)”) . Emlakçıya ilanlarına resim ekleme seçene˘gide sunulmu¸stur. Emlakçı resim eklerse ana dizindeki data klasörünün altına “$path” de˘gi¸skeni adında bir klasör açılır. Resimler ana dizine alındıktan sonra data/”$path” dizinine kaydırılır. “path” de˘gi¸skeni ev tablosuna son eklenen evin “id” numarasıdır. Resim tablosuna ise ilan_id (“select max(id) from ilan”) ve resmin yol adresi kaydedilir: “INSERT INTO resim (ilan_id, konum) VALUES ($ilan_id, ’data/$path/$name’)”.
unuttum.php Sifresini ¸ unutan kullanıcıların s¸ifrelerini hatırlatmak amacıyla kullanılan sayfadır. Formdan POST yöntemi ile alınan TC kimlik numarasını alınır. Kullanıcılar tablosundan bilgileri alınır: SELECT ad,tc,sifre,tip,h_soru,h_cevap FROM kullanicilar WHERE tc=$tc. Kullanıcıya hatırlatma sorusu gösterilir ve cevabı istenir. Cevabı yazmı¸ssa “$cevap” de˘gi¸skenineatılır ve veritabanındaki cevapla aynımı kontrol edilir. Kontrolden geçebilirse s¸ifresi gösterilir: if (isset($_POST["cevap"]) && ($cevap==$h_cevap)) echo"<strong>¸ Sifreniz: </strong> $sifre"; }
index.php Sisteme giri¸sin yapıldı˘gı ana sayfadır. Kayıtlı kullanıcıdan TC kimlik numarası ve s¸ifresi alınarak do˘grulu˘gu kontrol edilir. check() adlı fonksiyon ile tc ve sifre parametrelerinin geçerlili˘gi incelenir, örne˘gin tc de˘gi¸skeni rakam dı¸sında bi de˘ger içerirse bu fonksiyon yanlı¸s de˘gerini üretir. check adlı 56
Teknik Kılavuz
fonksiyon do˘gru de˘gerini üretirse veritabanında s¸u sorgu çalı¸stırılır: SELECT sifre,tip,ad FROM kullanicilar WHERE tc = ’$tc’. Seçilen niteliklerden tc ve tip daha sonra kullanılmak üzere oturuma (session) kaydedilir. Sorgu sonucu olu¸san tip niteli˘gine göre de kullanıcı mü¸steri, emlakçı ya da yönetici sayfalarına yönlendirilir. Bu sayfalara yönlendirmeden önce veritabanı ile kurulan ba˘glantı closedb.php dosyası ile sonlandırılır. • Kullanıcının TC kimlik numarasını tutar.
$tc:
• Kullanıcı tipini tutar. 0,1,2,3 de˘gerlerini alabilir.
$tip:
• Kullanıcı s¸ifresini tutar.
$sifre:
kontrol.php Ortak kullanım için yazılmı¸s bir dosyadır. kontrol_tip adlı fonksiyonu ve gerekli de˘gi¸sken tanımlarını içerir. tc, tip, ad, tarih ve self isimli de˘gi¸skenler tüm sayfalarda kullanılabilmektedir. Bu nedenle bu de˘gi¸skenlerin tanımları bu dosyada tutulmu¸stur. Ayrıca oturum açmak için kullanılan session_start() komutu da bu dosyada i¸sletilmektedir. • Oturumda kayıtlı olan tc de˘gi¸skenine e¸sitlenir.
$tc:
• Oturumda kayıtlı olan tip de˘gi¸skenine e¸sitlenir.
$tip:
• Kullanıcı adının veritabanından çekilmesi ile olu¸sturulur
$ad:
• $self:
kontrol.php dosyasının ça˘gırılıdı˘gı sayfanın adresini içerir.
kontrol_tip($tip1,$tip2 = “-1”,$tip3 = “-1”,$tip4 = “-1”); Deklarasyonu verilen kontrol_tip fonksiyonu her sayfada kullanılmaktadır. Fonksiyon en az 1 en fazla 4 parametre alabilmektedir. Parametre olarak kullanıcı tiplerini alır. 0 mü¸steri, 1 emlakçı, 2 üst düzey emlakçı, 3 ise yönetici tipleri için kullanılmaktadır. Örne˘gin ilan_ekle sayfasını yalnızca emlakçı ve üst düzey emlakçı kullanacaktır. Bu durumda ilan_ekle.php sayfasının ba¸sında kontrol_tip(1,2); kullanılmalıdır. kontrol_tip() fonksiyonu tip kontrolünün yanı sıra tc de˘gi¸skeninin tanımlı olup olmadı˘gını da kontrol etmektedir. Böylece sisteme giri¸s yapmayan bir ki¸sinin di˘ger sayfalar giri¸si engellenmi¸s olur. kontrol_tip isimli fonksiyon gerekli kontrolleri yaptıktan sonra kullanıcının sayfayı görüntülemeye izinli olup olmadı˘gını belirler. ˙Izinli de˘gilse exit() komutu ile i¸slemi sonlandırır. //girilmeyen parametrelerin de˘ geri ilk girilen parametre ile de˘ gi¸ stirilir for($i = 0; $i < 4; $i++){ if($tip[$i] == "-1") $tip[$i] = $tip[0]; } 57
Teknik Kılavuz
//kullanıcı sisteme girmemi¸ sse ya da kullanıcı tipi bu sayfayı görmesini //engelliyorsa i¸ slem iptal edilir. if(!isset($_SESSION[’tc’]) || !in_array($_SESSION[’tip’],$tip) ){ echo "Izinli degilsiniz!"; mysql_close(); session_destroy(); echo "<script language=\"javascript\"> location.replace(\"index.php\"); </script>"; exit(); }
menu.php Bu php dosyası menu gösterimi için kullanılmaktadır. Bunun için 4 fonksiyon içerir. Menu kısmında kullanıcının okunmamı¸s mesajlarını göstermek için s¸u sorgu i¸sletilir SELECT COUNT(*) AS yeni_mesaj FROM mesaj WHERE alan = ’$tc’ AND okundu = 0 ve $yeni_mesaj de˘gi¸skenine yeni_mesaj niteli˘gi atanır. Bu fonksiyonlar ça˘gırıldı˘gı sayfanın menudeki adına göre ça˘gırılmalıdırlar. Örne˘gin ˙Istatistik sayfası olan istatiktik.php sayfasında menu fonksiyonu olarak menu_musteri("˙ Istatistik") ça˘gırılmalıdır. Böylece istatistik kısmına uygun olan menu olu¸sturulucaktır. • menu_musteri:
Mü¸steri tipi kullanıcılar
• menu_emlakci: emlakçı tipi kullanıcılar • menu_ust_emlakci: • menu_yonetici: • menu_flash:
üst düzey kullanıcılar
yönetici tipi kullanıcılar için kullanılan menu fonksiyonlarıdır.
emlak.swf isimli flash animasyonunu görüntülmek için kullanılır.
Bu menu fonksiyonlarından menu_musteri() fonksiyonun genel yapısı a¸sa˘gıdaki gibidir: @$menuquery = "SELECT COUNT(*) AS yeni_mesaj FROM mesaj WHERE alan = ’$tc’ AND okundu = 0"; if($coklu = mysql_query($menuquery)){ //Kullanıcının okunmamı¸ s ne kadar mesajı oldu˘ gu belirlenir //ve bu de˘ ger menude gösterilir. $veri = mysql_fetch_array($coklu); $yeni_mesaj = $veri[’yeni_mesaj’]; } else $yeni_mesaj = 0;
58
Teknik Kılavuz
//mü¸ steri tipi kullanıcılar için menu fonksiyonu function menu_musteri($secenek){ //Gelen Kutusunda ne kadar mesaj bulundu˘ gunu belirler global $yeni_mesaj; //her ¸ seçenek için linkler farklı de˘ ger alıcaktır. Konumları farklı olucaktır if($secenek == "Ana Sayfa"){ echo (" <tr> <td width=\"77%\" class = \"baslik\"> <a href=\"musteri.php\"> <font color=\"#FFFF00\">Ana Sayfa</a> </td></tr> <tr> <td class=\"yazi_kutusu\"><img src=\"images/ok.gif\" width=\"16\" height=\"10\"> <a href=\"musteri.php\">˙ Ilan ara </font></a> </td> </tr> <tr> <td><img src=\"images/menu_cubuk.gif\" border=0 width=\"0\" height=0> </td> </tr> <tr> <td class = \"yazi_kutusu\"> <img src=\"images/ok.gif\" width=\"16\" height=\"10\"> <a href=\"oy_ver.php\">Oy kullan </font></a> </td> </tr> // Di˘ ger kodlar </tr>"); } else if($secenek == "Mesajlarım"){ <tr> <td width=131><img src=\"images/menu_cubuk.gif\" border=0> </td> </tr> // di˘ ger kodlar } echo "<tr> //Çıkı¸ s için logout.php’ye yönlendirir. <td height=\"19\"><a href=\"logout.php \" >Çıkı¸ s</a> </td> </tr> </table> </body> </html>"; }
musteri.php Mü¸steri tipi kullanıcıların ana sayfasıdır. Bu sayfada mü¸steriler ilan arama özelli˘gini kullanabilmektedir. Sayfayı yalnızca mü¸steri tipi kullanıcılar görece˘ginden konrol_tip(0) fonksiyonu ça˘gırılmı¸stır.
59
Teknik Kılavuz
emlakci.php Emlakçı ve üst düzey emlakçı tipinden kullanıcıların ana sayfasıdır. Bu tip kullanıcılar sisteme girdikten sonra bu sayfaya yönlendirilirler. Dosyada kullanılan tip kontrolü s¸u s¸ekildedir: kontrol_tip(1,2);
mesaj.php Kullanıcıların kendilerine gönderilmi¸s olan mesajları okuyabilecekleri ve bunları silebilecekleri bölümdür. Mesajı gönderen ki¸sinin adı, gönderilme tarihi ve mesajın konusu bir tablo halinde gösterilir. Kullanıcı konu kısmına tıkladı˘gında mesaj_oku.php sayfasına yönlendirilir ve mesajın içeri˘gi görüntülenir. kontrol.php,menu.php, config.php ve opendb.php dosyaları include komutu ile mesaj.php dosyasına eklenir. kontrol.php dosyasında yer alan kontolr_tip fonksiyon ile gerekli izin kontrolleri yapılır. Kullanıcı tipine göre gösterilecek menu, menu.php dosyasında yer alan fonksiyonlardan seçilir. config.php ve opendb.php ise veritabanına ba˘glanmak için gerekecekir. Bu php dosyasında genel olarak iki i¸slem gerçeklenir. Bu i¸slemler gelen mesajların tablo halinde gösterilmesi ve istenilen mesajların silinmesidir. Mesajların görüntülenmesi için mesaj isimli fonksiyon kullanılır. Her mesaj görüntüleme sayfasında gelen mesajların yalnızca 10 tanesi gösterilcektir. Bunun için SELECT * FROM mesaj WHERE alan = ’$tc’ ORDER BY tarih DESC LIMIT $baslangic,$sayi komutu sorgulanır. $sayi gösterilcek mesaj sayısı olan 10 de˘gerindedir. $baslangic ise sayfa seçimine göre de˘gi¸sen bir de˘ger alır. $sayfa = 0; //sayfanın ba¸ slangıç de˘ geri 0 olarak atanır. if(isset($_POST[’sayfa’])){ $sayfa = $_POST[’sayfa’] - 1; if($sayfa < 0) $sayfa = 0; unset($_POST[’sayfa’]); } //sayfa de˘ gerine göre baslangic de˘ geri belirlenir $baslangic = $sayfa * 10 ; Yukarıdaki kodda da görüldü˘gü gibi sayfa seçimi yapılmı¸s ise ba¸slangıç de˘geri o sayfa sayısının 10 ile çarpılmasıyla elde edilir. Sayfa seçimi yapılmaz ise baslangic de˘gi¸skeninin de˘geri 0 yapılarak ilk 10 mesajın görüntülenmesi sa˘glanır. Sayfa seçiminden sonra sıra mesajların tablo halinde gösterilmesine geldi. SELECT * FROM mesaj WHERE alan = ’$tc’ ORDER BY tarih DESC LIMIT $baslangic,$sayi komutu ile ilk önce mesajların tüm bilgileri veritabanından alınır. Daha sonra SELECT kullanicilar.ad FROM kullanicilar, mesaj WHERE ( kullanicilar.tc= mesaj.gonderen AND mesaj.gonderen = ’$gonderen’) sorgusu ile de mesajı gönderen ki¸sinin ismi kullanıcılar tablosundan çekilir. Bu veriler tabloda gösterilir. Konu kısmı tabloda bir link olarak yer alır. Böylece kullanıcı mesajın konu linkine tıklayarak mesajın tüm içeri˘gini mesaj_oku.php dosyası ile görüntüleyebilir. Her mesajın gösterildi˘gi satırda mesajı silmek için bir seçim kutusu(combobox) yer alır. Birden çok mesaj aynı anda seçilerek silinebilir. Silme i¸slemi a¸sa˘gıdaki program komutları ile sa˘glanır. if(isset($_POST["sil"])){ $sil = $_POST["sil"]; //birden çok mesaj silinmek istenirse $sil dizisi tek tek sorguya eklenir.
60
Teknik Kılavuz
$query = "DELETE FROM mesaj WHERE id IN ("; foreach($sil as $value) { $query.= "$value, "; } //en sonda virgül yer almaması için son eklenen de˘ ger tekrar eklenir $query.="$value) AND alan = ’$tc’"; @mysql_query($query) or die("Silme i¸ slemi gerçeklenemedi".mysql_error()); } Programda kullanılan de˘gi¸skenler ve tanımları: • $gonderen: mesajı gönderen ki¸sinin tc numarası • $alan: mesajı alıcak ki¸sinin tc numarası • $okundu: mesajını okunup okunmadı˘gı bilgisini tutan de˘gi¸sken • $konu: mesajların konuları • $id: Her mesajın kendine has olan numarasını tutan de˘gi¸sken
mesaj_gonderilen.php Kullanıcıları gönderdikleri mesajları tablo halinde gösteren php dosyasıdır. mesaj.php dosyası ile benzerlik gösterir.
yeni_mesaj.php Kullanıcıların birbirlerine mesaj atmalarını sa˘glayan php dosyasıdır. Mesaj yazma ve mesaj cevaplama olarak iki seçenek sunar. Mesaj cevaplama kısmında $tc de˘gi¸skeni ba¸ska bir php dosyasından alınır. Örne˘gin mesaj_oku.php adlı dosyada cevapla tu¸su seçildi˘ginde o mesajı atan kullanıcının TC numarası yeni_mesaj.php dosyasına aktarılır ve gönderilecek kullanıcının TC de˘gi¸skeni bölümüne yazılır. Mesaj cevaplama seçene˘ginin kullanılabilmesi için yeni_mesaj.php dosyasında $gonderen isimli bir de˘gi¸sken aktarılmalıdır. Kullanıcı [“kime”] kısmında mesajı gönderece˘gi kullanıcının TC numarısını girmelidir. Konu ve içerik kısımları bo¸s kalabilir. Kullanıcının girdi˘gi tüm de˘gi¸skenler check isimli fonksiyon ile denetlenir. Bu fonksiyon girilen verilerin do˘grulu˘gunu denetler. Tüm de˘gi¸skenler uygun ise htmlspecialchars isimli fonksiyon ile istenmeyen karakterler temizlenir do˘gru de˘geri üreterek sonlandırılır. De˘gi¸skenlerin kontrolünden sonra mesaj gönderilecek ki¸sinin kotası kontrol edilir. Her kullanıcının 50 ile sınırlandırılmı¸s mesaj saklama kapasitesi vardır. Bu de˘ger a¸sıldı˘gında ba¸ska bir mesaj alamaz. Kota kontrolü SELECT COUNT(*) AS mesaj_sayisi FROM mesaj WHERE alan = ’$alan’ sorgusu sonucu olu¸san $mesaj_sayisi adlı de˘gi¸sken ile sa˘glanır. $mesaj_sayisi de˘gi¸skeni 50 de˘gerinden büyükse $alan TC numaralı kullanıcıya yeni bir mesaj gönderilemez. 61
Teknik Kılavuz
Kota kontrolünün ardından mesaj gönderilebilir. INSERT INTO mesaj(gonderen, alan, konu, mesaj, tarih) values(’$gonderen’, ’$alan’, ’$konu’, ’$mesaj’, now()) sorgusu ile mesaj gönderilir.
mesaj_oku.php Veritabanında mesaj tablosunda yer alan $id de˘gi¸skenine göre bir mesajın içeri˘gini görüntüleyen ve içeri˘gini görüntüledi˘gi mesajın okundu de˘gi¸skenine 1 de˘gerini atayan php dosyasıdır. Select alan,gonderen,konu,mesaj from mesaj WHERE id = $id AND (alan = ’$tc’ OR gonderen = ’$tc’) sorgusu ile veritabanından ilgili mesajın nitelikleri elde edilir. Bir mesaj yalnızca mesajı gönderen ki¸si ya da mesajı alan ki¸si tarafından okunabilir. Bunu sa˘glamak için de alan = ‘$tc’ OR gonderen = ‘$tc’ kısmı sorguda yer alır. Adres çubu˘gundan ba¸ska kullanıcıya ait olmayan bir mesajın numarı girilirse “Bu mesaj size ait de˘gildir” uyarısı kullanıcıya iletilir.
kredi.php Çe¸sitli bankaların konut kredisi ile ilgili kısımlarının adresini içeren bir php dosyasıdır. Kullanıcı menusunden kredi seçene˘gi seçildi˘ginde kredi.php için ayrı bir pencere açılır ve kullanıcının seçimine göre banka sayfalarına yönlendirme gerçeklenir.
oy_ver.php Yalnızca mü¸steriler tarafından görünecek bir php dosyasıdır. Mü¸sterilerin mesaj gönderdikleri emlakçılara oy vermesini sa˘glar. Emlakçıların üst düzey emlakçı konumuna geçmeleri de yine bu dosya ile sa˘glanır. oy_ver.php dosyasında 4 tane fonksiyon yer alır. Bunlar oy_ver, ust_duzey_emlakci, ilk_on ve yeni_oy isimli fonksiyonlardır. oy_ver isimli fonksiyon mü¸sterinin sadece mesaj attı˘gı emlakçı ve üst düzey emlakçıları seçmede SELECT DISTINCT ad,tc FROM ve bu ki¸silere mü¸sterinin oyunu vermekte görevlidir. kullanicilar, mesaj WHERE mesaj.gonderen = ’$tc’ and mesaj.alan = kullanicilar.tc and (kullanicilar.tip = 1 or kullanicilar.tip = 2) sorgusu mü¸sterinin mesaj attı˘gı emlakçı ya da üst düzey emlakçıların isimlerini ve TC numaralarını döndürür. Mü¸sterinin kullandı˘gı oy, oylar isimli tabloda tutulmaktadır. INSERT INTO oylar(oy_veren, oy_alan, oy) values(’$tc’, ’$emlakci_id’, ’$oy’) sorgusu ile mü¸sterinin kullandı˘gı oy veritabanına eklenir. Veritabanında UNIQUE(oy_veren, oy_alan) kısıtlaması oldu˘gundan dolayı sorgu sonucunun olumsuz olması bize kullanıcının daha önce bu emlakçıya oy verdi˘gini gösterir. Mü¸sterinin verdi˘gi oy, oylar tablosuna atandıktan sonra sıra emlakçının yeni puanını hesaplamaya geldi. Bilindi˘gi gibi emlakçı puanı yalnızca mü¸sterilerin verdi˘gi oylara göre de˘gil aynı zamanda verdi˘gi ilan sayısına göre de de˘gi¸smektedir. ˙I¸ste oy_ver fonksiyonu içinde ça˘gırılan yeni_oy isimli fonksiyon bu görevi yerine getirmektedir. oy_ver fonksiyonu emlakci_id adlı bir de˘gi¸skeni parametre olarak alır. Bu parametre oy verilecek emlakçının TC numarasını ta¸sır. ˙Ilan sayısı 0 ile 10 arasında ise 1, 10 ile 20 arasında ise 2, 20 ile 30 arasında ise 3, 30 ile 40 arasında ise 4, 40’dan büyük ise de 5 puan emlakçıya verilmektedir. Emlakçının puanını etkileyecek di˘ger kısım %50’lik kısım ise mü¸steri oylarının yarıya bölünmesiyle hesaplanır. SELECT AVG(oy) AS ’musteri_oy’ FROM oylar WHERE oy_alan = ’$emlakci_id’ GROUP BY oy_alan sorgusu ile emlakçının ya da üst düzey emlakçının mü¸sterilerden aldıkları ortalama oy hesaplanır. SELECT COUNT(*) AS ’ilan_sayisi’ FROM ilan WHERE emlakci = ’$emlakci_id’ sorgusu ile de emlaçının ya da üst düzey emlakçının vermi¸s oldu˘gu ilanların sayısı hesaplanır. 62
Teknik Kılavuz
oy = ( $musteri_oy / 2 )+ $ilan_oy; Yukarıda yer alan komut ile yeni puan hesaplanır ve bu hesaplanan puan UPDATE emlakci SET puan = ’$oy’ WHERE tc = ’$emlakci_id’ sorgusu ile veritabanında güncellenir Emlakçının puanı hesaplandıktan sonra ust_duzey_emlakci isimli fonksiyon ça˘gırılır. Bu fonksiyon oy ve emlakci_id olmak üzere iki parametre alır. emlakci_id de˘gerindeki TC numarasına ve oy de˘gi¸skeni ile belirtilen puana sahip emlakçıların üst düzey emlakçı olup olmayacaklarına bu fonksiyon ile karar verilir. if( $oy < 7 ) return false; else{ $myquery = "SELECT COUNT(*) AS ’oy_sayisi’ FROM oylar WHERE oy_alan = ’$emlakci_id’ GROUP BY oy_alan"; $coklu = mysql_query($myquery) or die(’oy sayısı bulunamadı’); $veri = mysql_fetch_array($coklu); $oy_sayisi = $veri[’oy_sayisi’]; if($oy_sayisi > 20){ $myquery = "SELECT tip FROM kullanicilar WHERE tc = ’$emlakci_id’"; $coklu = mysql_query($myquery) or die(’Tip seçimi gerçeklenemedi’); $veri = mysql_fetch_array($coklu); //kullanıcı tipi emlakçı ise ve oy sayısı 7 den fazla ve kullanılan //oy sayısı 20 den fazla ise emlakçı üst düzey emlakçı yapılır if($veri[’tip’] == 1){ $myquery = "UPDATE kullanicilar SET tip = 2 WHERE tc = ’$emlakci_id’"; if( !mysql_query($myquery) ) die(’Ust düzey emlakçıya geçi¸ s i¸ slemi gerçeklenemedi’.mysql_error()); } } return true; } Son fonksiyon ise ilk_on isimli fonksiyondur. Emlakçı tablosundaki puan niteli˘gine göre ilk 10 emlakçıyı bulur ve bunu tablo s¸eklinde gösterir
sifre_degistir.php Kullanıcıların s¸ifrelerini de˘gi¸stirmelerini sa˘glayan bir php dosyasıdır. Kullanıcının s¸ifresini de˘gi¸stirmesi için eski s¸ifresini, yeni s¸ifresini ve tekrar yeni s¸ifresini girece˘gi 3 tane yazı alanı bulunmaktadır. Dosyada ilk önce eski s¸ifre ile yeni s¸ifrenin uyu¸sup uyu¸smadı˘gına bakılır. Daha sonra da girilen s¸ifrenin boyutunun uygun olup olmadı˘gına bakılır. Bu durumlara bakıldıktan sonra uygun ko¸sullar olu¸smu¸s ise UPDATE kullanicilar SET sifre = ’$yeni_sifre’ where ( tc = ’$tc’ and sifre = ’$eski_sifre’) sorgusu ile kullanıcının yeni s¸ifresi veritabanında güncellenir.
ayarlar.php Kullanıcıların eri¸sim bilgilerini de˘gi¸stirebilecekleri alandır. Yönetici dı¸sındaki tüm kullanıcılar kullanabilir. Kullanıcıların eri¸sim bilgileri ilgili yerlerde gösterildikten sonra iste˘ge ba˘glı olarak bilgiler de˘gi¸stirilebilir. De˘gi¸stir tu¸suna basıldı˘gında de˘gi¸siklikler veritabanına kaydedilir. 63
Teknik Kılavuz
Emlakçı ve mü¸steriler farklı eri¸sim bilgilerine sahiptir. Örne˘gin emlakçı tipi kullanıcılar için veritabanında firma isimli bir nitelik var iken mü¸steri tipi kullanıcılarda böyle bir nitelik yoktur. Bu nedenle her tip kullanıcı için farklı sorgular olu¸sturulmu¸stur. UPDATE musteri SET tel_no = ’$tel_no’, adres = ’$adres’, email = ’$email’ where tc = ’$tc’ sorgusu ile mü¸steri tipi kullanıcıların eri¸sim bilgileri güncellenirken, UPDATE emlakci SET tel_no = ’$tel_no’, email = ’$email’, adres = ’$adres’, firma = ’$firma’ where tc = ’$tc’ sorgusu ile de emlakçı tipi kullanıcılar için güncelleme i¸slemi yapılır. Sorguda yer alan $tc oturumda kayıtlı ve kullanıcıya ait TC kimlik numarasıdır. Di˘ger de˘gi¸skenler ise form de˘gi¸skenleridir.
istatistik.php Sistemde görüntülenecek istatistik bilgilerini sa˘glayacak olan dosyadır. istatistik fonksiyonu parametre olarak bir sayı de˘geri alır ve bu de˘gere göre bir istatisti˘gi görüntüler. istatistik.php sayfasında bir seçim kutusu bulunmaktadır. Kullanıcının yaptı˘gı seçime göre istatistikler bir tablo halinde görüntülenir. Sistemde tutulacak istatistikler s¸öyledir: • En fazla emla˘gın satıldı˘gı semtler • En az emla˘gın satıldı˘gı semtler • En yüksek ev fiyatlarının bulundu˘gu semtler • En dü¸sük ev fiyatlarının bulundu˘gu semtler • En yüksek ev kiralarının bulundu˘gu semtler • En dü¸sük ev kiralarının bulundu˘gu semtler • En fazla ev satan emlakçılar • En az ev satan emlakçılar • En yüksek gelir kazanan emlakçılar • En dü¸sük gelir kazanan emlakçılar
64
Teknik Kılavuz
Her istatistik ile birlikte bir grafik gösterilecektir. Bu grafik olu¸sturulan istatistik bilgisinin veri tabanındaki di˘ger verilerler olan oranına ba˘glı olarak de˘gi¸smektedir. Bu oran kararla¸stırılan bir formüle göre hesaplanır. $oran = 90 / ($max - $min + 1) * ($uc - $min) + 10; $max de˘gi¸skeni inceledi˘gimiz niteli˘gin veritabanındaki en büyük de˘geridir. $min de˘geri de en dü¸sük de˘geri içerir. $uc de˘gi¸skeni oranı hesaplanmak istenen veriyi saklar. Bu formüle göre veritabanındaki en dü¸sük de˘ger 10 ile temsil edilirken en yüksek de˘ger de 100 ile temsil edilecektir. Formülde 90’ın böleni olan $max - $min + 1 ifadesinde 1 de˘gerinin eklenmesinin sebebi max ve min de˘gerleri birbirine e¸sit oldu˘gu an ifadenin geçerli bir de˘ger üretebilmesini sa˘glamak içindir. Grafik gösterimi için gerekli oran gösterildikten sonra sıra sorguların nasıl çalı¸stı˘gına geldi. 10 tane farklı istatistik ve her istatistik için 2 tane sorgu olmak üzere toplam 20 tane sorgu bulunmaktadır. Sorgulardan birisi gösterilecek istatistik bilgisini bularken di˘geri veritabanında o niteli˘ge ili¸skin en yüksek ve en dü¸sük de˘gerlerin bulunmasını sa˘glamaktadır. Örnek olarak en fazla emlak satan emlakçılar görüntüleyen sorgulara bakalım: $main_query = "SELECT ad,puan,COUNT(*) AS sayi FROM kullanicilar,emlakci,satilan_ev
WHERE (satilan_ev.emlakci = emlakci.tc AND emlakci.tc = kullanicilar.tc AND satilik = 1) GROUP BY emlakci.tc ORDER BY sayi DESC"; $query = $main_query."LIMIT 0,10"; $max_min = "SELECT MAX(sayi) AS max, MIN(sayi) AS min FROM (".$main_query.") AS tablo" $main_query adı verilen ana sorguda tüm emlakçıların satmı¸s oldukları ev sayısı bir ba˘gıntı olarak döndürülür. $query sorgusunda ise LIMIT 0,1 sorguya eklenerek en fazla emlak satan ilk 10 emlakçı bulunmu¸s olur. Di˘ger sorgu olan $max_min ise veritabanında kayıtlı olan emlakçılar içinde en fazla ve en az emlak satan emlakçıyı sorgular. Sorgu sonucunda olu¸san max niteli˘gi ile min niteli˘gi grafik gösterimi için gerekli olan oranın olu¸sturulmasında kullanılacaktır.
ev_puan_hesapla.php Arama sonucu kullanıcıya sunulan evlerin detayları da görünebilir. Kullanıcı herhangi bir evin detayını görmek istedi˘ginde bu evle ilgili istatik bilgisi görüntülenir. Evler hakkındaki istatik bilgisi için 4 kriter öne çıkar. Bu kriterler evin bulundu˘gu semttin puanı(veritabanı yöneticisi tarafından belirlenir), evin oda sayısı, salon sayısı ve bulundu˘gu kattır. Dosyada ev_puan_hesapla isimli bir fonksiyon olu¸sturulmu¸stur. Bu fonksiyon parametre olarak $ilan_id de˘gi¸skenini alır. Böylece do˘grudan detaylı_goster.php (parametre olarak $ilan_id de˘gi¸skeni alır) dosyası tarafından kullanılabilecek hale gelir. Fonksiyon öncelikle SELECT ev_id, kat, oda_sayisi, salon_sayisi, satilik FROM ilan, ev WHERE ilan.id = $ilan_id AND ev.id = ilan.ev_id sorgusu ile ilan numarası verilen ev hakkındaki bilgileri elde eder. Olu¸san çoklu sonucundaki her nitelik bir de˘gi¸skene atanır ve di˘ger bir sorgulara geçilir. if($kat != 1) $kat =100; //ev 1.kat de˘ gilse di˘ ger tüm katlar ile aynı statüde olsun $semt_query = "SELECT id FROM semt WHERE semt.puan = ANY (SELECT puan FROM ev,semt WHERE ev.id = ’$ev_id’ AND semt.id = semt_id) "; $query = "SELECT AVG(ucret) AS ort_fiyat FROM ev WHERE kat <= ’$kat’ 65
Teknik Kılavuz
AND oda_sayisi = ’$oda_sayisi’ AND salon_sayisi <= ’$salon_sayisi’ AND satilik = ’$satilik’ AND semt_id = ANY( ".$semt_query." )"; $semt_query sorgusu ile inceledi˘gimiz evin bulundu˘gu semt ile aynı puana sahip di˘ger semtlerin $id de˘gi¸skenleri olu¸sturulur. Son sorguda ise olu¸sturmak istedi˘gimiz istatistik bilgisi olan aynı özellikteki evlerin ortalama fiyatı olu¸sturulur.
kullanici_bilgi.php Dosya kullanici_bilgisi() isimli bir fonksiyondan olu¸smaktadır. kullanici_bilgi.php dosyası GET metoduyla aldı˘gı $tc parametresine göre ki¸si hakkındaki bilgileri görüntülemekle görevlidir. Bu dosya mesaj okuma kısmında kullanıcının adı üzerine basıldı˘gında o kullanıcı hakkında bilgi edinilmesini sa˘glamak amacıyla yazılmı¸stır. Genel olarak kullanıcının adı, tc kimlik numarası,mü¸steri tipi ve mü¸steri ya da emlakçı olmasına göre de meslek, puan bilgilerinin görüntülenmesi i¸slemi gerçekle¸sir. GET metodu ile alınan TC kimlik numarasına ait bilgiler basit bir sql sorgusu ile SELECT ad, kullanicilar.tc, tip FROM kullanicilar WHERE kullanicilar.tc = ’$tc veritabanından alınır ve kullanıcıya gösterirlir.
talep_gönder.php Mü¸sterilerin emlakçılara talep gönderebilmeleri için hazırlanmı¸stır. Öncelikle mü¸sterinin TC kimlik numarası daha önce kaydedilmi¸s olan sessiondan alınır ve “$tc” de˘gi¸skenine atanır. “kontrol_tip(0);” fonksiyon ça˘grısıyla kullanıcının gerçekten mü¸steri olup olmadı˘gı kontrol edilir. Formla mü¸steriden talebi yollamak istedi˘gi emlakçının TC kimli numarası ve aradı˘gı evde bulunması gereken özellikler alınır. Evin özellikleri “ev” tablosuna eklenir: “INSERT INTO ev (oda_sayisi, salon_sayisi, kat, semt_id, isitma, otopark, ucret, metrekare, ebe_banyo, satilik) VALUES ($oda_sayisi, $salon_sayisi, $kat, $semt_id, ’$isitma’, $otopark, $ucret, $metrekare, $ebe_banyo, $satilik)”. Daha sonra eklenen satırın “id” numarası alınarak (“SELECT max(id) FROM ev”) , “talep_formu” tablosuna eklenir: “INSERT INTO talep_formu (emlakci,musteri,ev_id) VALUES ($emlakci_tc,$tc,$id)”.
giden_talep.php Mü¸sterinin, yolladı˘gı talepleri görmesi ve taleplerinin emlakçı tarafından okunup okunmadı˘gını anlaması için hazırlanmı¸s sayfadır. Öncelikle mü¸sterinin TC kimlik numarası daha önce kaydedilmi¸s olan sessiondan alınır ve “$tc” de˘gi¸skenine atanır. “kontrol_tip(0);” fonksiyon ça˘grısıyla kullanıcının gerçekten mü¸steri olup olmadı˘gı kontrol edilir. Mü¸sterinin gönderdi˘gi talepler veritabanından okunur: “SELECT * FROM talep_formu WHERE musteri = ’$tc’”. Sayfada mü¸steriye, talebi yolladı˘gı emlakçı, emlakçının TC kimlik numarası, talebin okunup okunmadı˘gı gösterilir. Bu i¸slemi gerçeklemek için gereken sql ifadesi: SELECT DISTINCT kullanicilar.ad FROM kullanicilar, talep_formu WHERE kullanicilar.tc = talep_formu.emlakci AND talep_formu.emlakci = ’$emlakci’. Ayrıca yolladı˘gı talebi görebilmesi için “talep_oku.php” ye link içerir. Bu link GET yöntemi ile “talep_oku.php” sayfasına talebin “id” numarasını ve talebi gönderdi˘gi emlakçının TC kimlik numarasını yollar.
gelen_talep.php Emlakçının, mü¸steriler tarafından gönderilen talepleri görmesi için hazırlanmı¸stır. Öncelikle emlakçının TC kimlik numarası daha önce kaydedilmi¸s olan sessiondan alınır ve “$tc” de˘gi¸skenine atanır. 66
Teknik Kılavuz
“kontrol_tip(1,2);” fonksiyon ça˘grısıyla kullanıcının gerçekten emlakçı olup olmadı˘gı kontrol edilir. Emlakçıya gelen talepler veritabanından okunur: “SELECT * FROM talep_formu WHERE talep_formu.emlakci=’$tc’”. Sayfada emlakçıya talebi gönderen mü¸sterinin adı, TC kimlik numarası gösterilir. Bu i¸slemi gerçeklemek için gereken sql ifadesi: “SELECT kullanicilar.ad FROM kullanicilar, talep_formu WHERE ( kullanicilar.tc = talep_formu.musteri AND talep_formu.musteri = ’$musteri’)”. Talebi gönderen ki¸siye, mesaj atabilmesi için “yeni_mesaj.php” sayfasına link içerir. Ayrıca gelen talebi görebilmesi için “talep_oku.php” ye link içerir. Bu link GET yöntemi ile “talep_oku.php” sayfasına talebin “id” numarasını gönderir.
talep_oku.php Bu sayfa “giden_talep.php” ve “gelen_talep.php” içerisindeki linkler üzerinden çalı¸sır. Öncelikle kullanıcının TC kimlik numarası daha önce kaydedilmi¸s olan sessiondan alınır ve “$tc” de˘gi¸skenine atanır. “kontrol_tip(0,1,2);” fonksiyon ça˘grısıyla ki¸sinin gerçekten kullanıcı olup olmadı˘gı kontrol edilir. GET yöntemi ile “giden_talep.php” sayfasından talebin “id” numarasını ve talebi gönderdi˘gi emlakçının TC kimlik numarasını, “gelen_talep.php” sayfasından sadece talebin “id” numarasını alır. Talebi göstermek için “SELECT * FROM talep_formu, ev WHERE talep_formu.ev_id = ev.id AND talep_formu.emlakci =’ $tc’ AND talep_formu.id = $talep_id” sql ifadesi kulanılır. Talebin emlakçı tarafından okundu˘gunu anlamak için if(!isset($_GET["emlakci"])){ $query = "UPDATE talep_formu SET okundu = 1 where id = $talep_id"; mysql_query($query); } ifadesi kullanılır. GET yöntemi kullanarak sadece mü¸steri emlakçının “id” sini gönderdi˘gi için. Mü¸steri talebi okudu˘gu zaman, talep okunmamı¸s durumunu korur.
ilangoster.php ilangoster.php dosyası o an online olan emlakçının vermi¸s oldu˘gu ilanları gösterir. Gösterilen ilanlar için aynı zamanda silinebilir veya ilanların ev bilgisi detaylarının da görüntülenebilece˘gi bir sayfaya geçilebilir. ˙Ilanların gösterilmesi için veritabanına ba˘glanılması, sayfa düzeni için menülerin görüntülenmesi ve sistemdeki duyuruların görüntülenebilmesi için a¸sa˘gıdaki php dosyaları eklenmi¸stir. include("config/config.php"); include("config/opendb.php"); include("config/duyuru.php"); include("menu/menu.php"); include("config/kontrol.php"); ˙Ilanların okunması için gerekli SQL sorgusu a¸sa˘gıdaki gibidir. $tc de˘gi¸skeni kullanıcı için açılan session sayesinde kontrol.php dosyasında elde edilir. $sorgu = mysql_query("select * from ilan where emlakci_id=$tc order by id"); $sira=0; $isim="temp"; $num_rows = mysql_num_rows($sorgu);
67
Teknik Kılavuz
Dosya üzerindeki form silme i¸slemi için POST metodunu kullanır. POST metoduyla veriler tekrar ilangoster.php dosyasına gönderilir. <form name="form1" method="post" action="ilangoster.php"> Gönderilen veri silinmesi istenen ilan için id bilgisidir (birden fazla ilan silinebilir). Listelenecek ilan bilgileri daha önce bir php koduyla veritabanından alınacaktır. Veritabanından okunan alanlar $ilan_no, $ev_no, $emlakci_id, $giris_tarih, $durum, $bitis_tarih de˘gi¸skenlerine aktarılır. if($num_rows == 0) echo" Kayıt yok"; else{ $class[0] = "satir"; $class[1] = "mesajTablo"; $sira = 0; while($num_rows>0){ $count = fmod($num_rows,2); $ilan_no=mysql_result($sorgu, $sira, ’id’); $ev_no=mysql_result($sorgu, $sira, ’ev_id’); $emlakci_id=mysql_result($sorgu, $sira, ’emlakci_id’); $giris_tarih=mysql_result($sorgu, $sira, ’giris_tarih’); $durum=mysql_result($sorgu, $sira, ’durum’); $bitis_tarih=mysql_result($sorgu, $sira, ’bitis_tarih’); ˙Ilanların gösterilmesi i¸sleminde her kayıt için bir satır, her özellik için bir sütun olu¸sturulması bulunan kayıtlar için while döngüsü içinde yapılır. ˙Ilan id bilgisi ilan detaylarının görüntülenece˘gi detay sayfasına id bilgisini gönderir. (üstteki kodun devamı): echo " <tr> <th align=\"center\" width=\"20\" height=\"20\" class=$class[$count]> <input type=\"checkbox\" name=\"sil[]\" value=$ilan_no></th> <th align=\"center\" width=\"20\" height=\"20\" class=$class[$count]>
<a href=\"detay.php?id=$ilan_no\">$ilan_no</a></th> <th align=\"center\" width=\"20\" height=\"20\" class=$class[$count]>$emlakci_id</ <th align=\"center\" width=\"20\" height=\"20\" class=$class[$count]>$ev_no</th> <th align=\"center\" width=\"20\" height=\"20\" class=$class[$count]>$durum</th> <th align=\"center\" class=$class[$count]>$giris_tarih</th> "; print("</tr>"); $sira++; $num_rows--; } } Silme i¸sleminin kontrolü sayfa ba¸sında POST metoduyla de˘gi¸sken gelip gelmedi˘gi kontrol edilerek yapılır. $_POST[“sil”] de˘gi¸skeni (dizisi) tanımlanmı¸ssa, her bir sil de˘geri için gelen ilan id de˘gerleri bulunup tablodan silinir. 68
Teknik Kılavuz
if(isset($_POST["sil"])) { $sira = 0; $sil = -1; for($sira=0;$sira<4;$sira++){ echo "for blogu<br>"; if(isset($_POST["sil"][$sira])){ $sil = $_POST["sil"][$sira]; mysql_query("DELETE FROM ilan WHERE id=$sil"); } } unset($_POST["sil"]); }
ilanekle.php ˙Ilan ekleme i¸slemini emlakçılar yapabilir. Bir ilanda en fazla 5 tane foto˘graf bulundurulabilir. Foto˘graflar data/ilan_adı/resim_no s¸eklinde saklanır. Olu¸sturulan form foto˘graf yüklenmesini içerdi˘gi için yapısı a¸sa˘gıdaki gibi olacaktır (enctype):
<form action="ilanekle.php" method="post" enctype="multipart/form-data" name="ekle"> Kullanıcının doldurması gereken alanlardan ilçe ve semt bilgileri birbirine ba˘glı oldu˘gundan, kullanıcı ilçe seçti˘ginde form onaylanır ve semt bilgileri seçili olan ilçeye göre yüklenir. Kullanıcı ilçe seçti˘ginde $global_ilce de˘gi¸skeni tanımlanır (insertcontrol.php içinde, POST metoduyla veri gelmi¸sse tanımlanır). Semtlerin eklenmesi i¸slemi ise semt.php dosyası $global_ilce de˘gi¸skeninin tanımlanma durumuna göre semtleri veritabanından almasıyla gerçekle¸sir.
insertcontrol.php Verilerden kat ve ücret bilgileri haricindekiler seçim olmasa bile -1 de˘geri getirecektir. bunun için kat ve ücret bilgileri doldurulma durumu göre ve di˘ger verilerin -1 olup olmaması kontrol edilip i¸slem blo˘guna girilir (kat ve ücret bilgileri mantıksal de˘ger olmaları için negatif olma durumuna göre kontrol edilirler). //insert record if(isset($_POST["kat"]) && isset($_POST["ucret"])){ //D˘ ger veriler default olarak -1 gelecektir, seçilme if( $_POST["odas"] >-1 && $_POST["salons"] >-1 && $_POST["kat"] >-1 && $_POST["semt"] >-1 && $_POST["ilce"] >-1 && $_POST["isitma"] >-1 && $_POST["ucret"] >-1 && $_POST["metrekare"] >-1 && $_POST["durum"] >-1){ POST metoduyla gelen veriler kendi isimlerindeki de˘gi¸skenlere atanıp sorgu çalı¸stırılır (strip_tags fonksiyonu ile html özel karakterleri filtrelenir). $odas = strip_tags($_POST["odas"]); $salons = strip_tags($_POST["salons"]); $kat = strip_tags($_POST["kat"]); $ebanyo = strip_tags($_POST["ebanyo"]); $ilce = strip_tags($_POST["ilce"]); 69
Teknik Kılavuz
$semt = strip_tags($_POST["semt"]); $isitma = strip_tags($_POST["isitma"]); $otopark = strip_tags($_POST["otopark"]); $ucret = strip_tags($_POST["ucret"]); $metrekare = strip_tags($_POST["metrekare"]); $durum = strip_tags($_POST["durum"]); ˙Ilan eklenmesi için ev tablosuna kaydın eklenmesi gerekti˘ginden önce ev tablosuna veri ekleme i¸slemi yapılır. //ismi bilinen semtin id bilgisinin alınması $querysemt = mysql_query( "select id from semt where semt =’$semt’"); $result = mysql_result ($querysemt,0,’id’);
//ev tablosuna ekleme $sql = "INSERT INTO ev (oda_sayisi, salon_sayisi, kat, semt_id, isitma, otopark,ucret,metrekare,ebe_banyo, satilik) VALUES ($odas, $salons, $kat, $result, ’$isitma’, $otopark, $ucret, $metrekare, $eb mysql_query($sql) or die(’ev eklenemedi’); Ev tablosuna eklenme i¸slemi için öncelikle sisteme eklenen evin id bilgisi alınmalıdır. ˙Ilan tablosuna online olan kullanıcının $tc numarası ile birlikte ekleme i¸slemi yapılır. $query = mysql_query("select max(id) from ev"); $ev_no = mysql_result($query,0); //ev_no = son eklenen evin id si
//eklenen evin id si
//ilan tablosuna ekleme $sql = "INSERT INTO ilan (ev_id, emlakci_id, giris_tarih, durum,bitis_tarih) VALUES ($ev_no,$tc,’$tarih’,$durum,NULL)"; mysql_query($sql) or die(’ilan eklenemedi’); ˙Ilan eklendikten sonra kullanıcının o anda veya daha sonra foto˘graf eklemesi durumu için ilana ait bir foto˘graf klasörü (data/ilan_id) olu¸sturulur: $query = mysql_query("select max(id) from ilan");
//eklenen ilanin id si
$path = mysql_result($query,0); //path = son eklenen ilanin id si // data altinda ilan için klasör olusturma if(!is_dir("data/".$path)) mkdir("data/".$path; Foto˘graf ekleme i¸slemi için FILES metoduyla veri gelip gelmedi˘gi kontrol edilir, gelen her veri (e˘ger resim dosyasıysa) orijinal ismiyle önceden belirlenmi¸s alana kaydedilir ve resim tablosuna veri giri¸si yapılır.
70
Teknik Kılavuz
if(isset($_FILES["pictures"])){ foreach ($_FILES["pictures"]["error"] as $key => $error){ $tip = substr($_FILES "<br>Tip: $tip"; if($tip == "image"){ if ($error == UPLOAD_ERR_OK) { $tmp_name = $_FILES["pictures"]["tmp_name"][$key]; $name = $_FILES["pictures"]["name"][$key]; move_uploaded_file($tmp_name, "data/$path/$name") or die ("cannot move!");
$query_ilan = mysql_query("select max(id) from ilan"); $ilan_id = mysql_result($query_ilan,0); mysql_query("insert into resim (ilan_id,konum) values($ilan_id,’data/$path/$na or die("hataa"); } } } unset($_FILES["pictures"]); }
duyuruoku.php Bu php dosyası herhangi bir duyurunun detaylarını (kullanıcının görmek istedi˘gi duyuru) görüntüler. Detaylar gönderen kullanıcının ismi, gönderilme tarihi ve duyurunun metin kısmından olu¸sur. Bu dosyaya veriler GET metoduyla gelir (adres çubu˘gunda görünen duyuru id bilgisidir). Duyuru id bilgisi alınıp gerekli sorgularla duyurular tablosundan metin ve tarih bilgileri ile, kullanicilar tablosundan kullanıcı id bilgisine denk gelen ad bilgisi sırasıyla $id, $metin, $tarih ve $gonderen_ad de˘gi¸skenlerine atanır. Dosyada a¸sa˘gıdaki kod bu i¸si yapar: if(isset($_GET["id"])){ $id = $_GET["id"]; //duyuru id bilgisi $query = mysql_query("select * from duyurular where id = $id"); $metin = mysql_result($query,0,’metin’); //duyuru metni $tarih = mysql_result($query,0,’tarih’); //duyuru tarihi $gonderen_id = mysql_result($query,0, ’gonderen’); //gonderen id $query = mysql_query("select ad from kullanicilar where tc=$gonderen_id "); $gonderen_ad = mysql_result($query,0); } else echo "Belirtti˘ giniz ilan bulunamıyor."; Duyurunun görüntülendi˘gi tablo yapısında Gönderen, Tarih ve Duyuru alanları için yaratılan (e˘ger geçerli bir duyuru id bilgisi alınmı¸ssa de˘gi¸skenler yaratılır) de˘gi¸sken de˘gerleri görüntülenir. <tr class="mesajTablo"> <td width="117">Gönderen : </td> <td width="215"><? if(isset($gonderen_ad)) echo $gonderen_ad; ?> </td> </tr> <tr class="ustmenu"> <td>Tarih : </td> 71
Teknik Kılavuz
<td><? if(isset($tarih)) echo $tarih; ?> </td> </tr> <tr class="mesajTablo"> <td>Duyuru : </td> <td><? if(isset($metin)) echo $metin; ?></td> </tr>
duyuruekle.php Duyuru ekleme i¸slemi sayfaya eklenen basit bir form yapısıyla gerçeklenecektir. <form name="form1" method="post" action="duyuruekle.php"> Form üzerinde bir textarea yapısı ve onaylama tu¸suyla gerekli bilgiler kullanıcıdan alınır. Form onaylandı˘gında POST metoduyla aktarılacak veriler kontrol edilip gerekli ekleme i¸slemleri a¸sa˘gıdaki gibi yapılır: if(isset($_POST["metin"])){ $metin = $_POST["metin"]; $query = "insert into duyurular (id, gonderen, tarih, metin) values(”,$tc,’$tarih’,’$metin’)"; mysql_query($query); }
duyurugoster.php Veritabanında bulunan güncel 4 duyurunun sabit bir s¸ekilde gösterilmesi i¸sinin yapılması sa˘glanır. Veritabanından güncel (en yeni) duyuruların okunması için yazılan sorguda limit 4 belirtilerek en fazla 4 kaydın alınması sa˘glanmı¸stır. Sonrasında kayıt yoksa exit() fonksiyonu yürütülür, kayıt varsa kayıt bilgileri tek tek okunur: $query = mysql_query("select * from duyurular order by id desc limit 4"); $num_rows_d = mysql_num_rows($query); if($num_rows_d == 0) exit(); //duyuru yok else{ for($i=0;$i<$num_rows_d;$i++){ //kayıtların okunması if($duyuru_id[$i]=mysql_result($query,$i,’id’)) $metin_d[$i] = mysql_result($query,$i,’metin’); } } Duyuruların gösterilmesi i¸slemi her de˘gi¸sken için tanımlanma durumu kontrol edilerek ekrana basma s¸eklindedir. Duyurular görüntülenirken hazır bir javascript yapısı kullanılmı¸stır. $i = 0; while($i<4){ //0,1,2 ve 3 indisleri kontrol edilir if(isset($duyuru_id[$i])){ echo" [’duyuruoku.php?id=$duyuru_id[$i]’, 72
Teknik Kılavuz
’<font class=menu>"; echo substr($metin_d[$i],0,10); echo "</font>’, ’_self’, ’<td valign=top></td><td valign=top ’]"; } $i++; }
duzenle.php ˙Ilan bilgilerinin (aynı zamanda ilana ait olan ev bilgileri) düzenlenmesi i¸slemini gerçekler. Bu i¸slemi ilanı ekleyen emlakçı yapabilir. Düzenlenecek (de˘gi¸stirilecek) ilanın id bilgisi GET metoduyla gönderilir. Düzenleme i¸slemi birden fazla php dosyası kullanılarak gerçeklenir. Yapılacak temel i¸slemler updatecontrol.php dosyası içerisinde gerçekle¸stirilir. ˙Ilana ait daha önce eklenmi¸s foto˘grafların gösterilmesi ise resim.php dosyası sayesinde yapılır.
resim.php Kullanıcının yüklemi¸s oldu˘gu foto˘graflar tablo halinde gösterilir, silme opsiyonu tanınır. Bunun Düzenleme sayfasına eklenmesi i¸sini resim.php yapar. resim.php eklenmeden önce $control de˘gi¸skeni 0 olarak atanmı¸stır. <? $query_resim = mysql_query("select * from resim where ilan_id=$id"); $num_rows = mysql_num_rows($query_resim); $resim_sayisi = $num_rows; $sira = 0; $class [0] = "orta_tablo"; //satırlar için farklı class kullanımı $class [1] = "mesajTablo"; if($resim_sayisi>0){ ............... ...............
//kaydın foto˘ grafı olması durumu
echo"<tr> //tablo yapısına ait satır <td height=\"195\"><p class=\"baslik\">Resimler : </p> <table width=\"389\" height=\"39\" border=\"0\">"; .................... .................... if($control == 0){ //düzenleme sayfası için görüntülenecek echo" <tr class=\"tablo\"> <td align=\"center\">Sil</td> <td width=\"76\" align=\"center\">Resim</td> </tr>"; } while($num_rows>0){ //tek tek foto˘ grafların gösterilmesi $count = fmod($num_rows,2); $konum = mysql_result($query_resim,$sira,’konum’); //konum bilgisi $resim_id = mysql_result($query_resim,$sira,’id’); //id bilgisi ...... 73
Teknik Kılavuz
...... if($control == 0){ //düzenleme i¸ slemi echo" <tr class = $class[$count]> <td><input type=\"checkbox\" name=\"sil[]\" value=$resim_id></td> <td><a href=$konum> <img src=$konum height=\"100\" width=\"100\"></a> </td> </tr>"; } $num_rows--; $sira ++; }
//while
echo"</table> </td> </tr>";
if($control == 0){ //foto˘ graf yükleme alanları while(5-$resim_sayisi>0){ echo "<tr><td><input name=\"pictures[]\" type=\"file\" size=\"40\" /></tr></td>"; $resim_sayisi++; } } }
updatecontrol.php Gönderilen ilan id bilgisinin o an online olan kullanıcıya ait olup olmadı˘gı da i¸slem yapılmadan önce kontrol edilir: if(isset($_GET["id"])){ $id = $_GET["id"]; //ilan id bilgisinin alınması //online olan kullanıcıya ait ilan kontrolü $query_kontrol = mysql_query("select emlakci_id from ilan where id=$id"); $emlakci_id = mysql_result($query_kontrol,0); //emlakci id sini kontrol et, yanlı¸ ssa detay sayfasına yönlendir if($emlakci_id != $tc){ echo "˙ Izinli degilsiniz!"; echo "<script> self.location.replace(\"detay.php?id=$id\"); </script> "; } else{ ........................ } }
74
Teknik Kılavuz
Düzenleme i¸slemi için geçerli bir ilan id bilgisi (kullanıcının de˘gi¸stirmeye izinli oldu˘gu) gelmesi durumunda öncelikli olarak ilana ait mevcut de˘gerler query_ilan ve query_ev sorgularıyla okunur. else{ $query_ilan = mysql_query("select * from ilan where id=$id"); if(mysql_num_rows($query_ilan)>0) $ev_id = mysql_result($query_ilan,0,’ev_id’); $query_ev = mysql_query("select * from ev where id=$ev_id"); } Bu sorgular duzenle.php içerisinde kullanılarak görüntülenmek istenen alan ekrana basılır: <tr> <td>Giris Tarihi : </td> <td><?php if($result = mysql_result($query_ilan,0,’giris_tarih’)) echo $result; ?> </td> </tr> Benzer s¸ekilde, veritabanında 1 veya 0 olarak saklanan Var–Yok bilgilerinin görüntülenmesinde fazladan bir if kontrolü vardır: <tr class="ictablo2"> <td>Durumu : </td> <td><?php if($result = mysql_result($query_ilan,0,’durum’)){ if($result == 0) echo "Kiralik"; else echo "Satilik"; ?> </td> </tr> Bu i¸slemler haricinde updatecontrol.php dosyasının yapaca˘gı i¸slemler yeni foto˘graf ekleme, ilana ait biti¸s_tarih bilgisinin girilmesi , eve ait ısıtma, otopark, metrekare, ebeveyn banyo ve ücret bilgilerinin de˘gi¸stirilmesini içerir. ˙Ilanı bitirme i¸slemi kiralanma veya satılma durumunda emlakçının ilanın geçersiz oldu˘gunu göstermesi amacıyla kullanılır. Düzenlenme ekranında e˘ger bir biti¸s tarihi sisteme girilmemi¸sse “˙Ilanı Bitir” seçene˘gi görüntülenip emlakçıya böle bir opsiyon sa˘glanır. Bunun kontrolü mevcut bilgiler veritabanından alınırken yaratılan $bitis_tarih de˘gi¸skeniyle sa˘glanır ( duzenle.php üzerinde ): <? ............. if(!$bitis_tarih){ echo" <tr> <td height=\"41\"><p> <input type=\"checkbox\" value=\"bitir\" name=\"bitir\"> ˙ Ilanı Bitir</td></tr>"; } ?> 75
Teknik Kılavuz
Buna kar¸sılık updatecontrol.php içinde bulunan kod parçası bitirme iste˘gi geldi˘ginde ilan bilgilerini günceller ($ev_id de˘geri daha önceden elde ediliyor): if(isset($_POST["bitir"])){ $query = "update ilan set bitis_tarih = ’$tarih’ where ev_id = $ev_id"; mysql_query($query); } duzenle.php dosyası içinde formun onaylanmasını kontrol için ev_id ve ilan_id bilgileri için iki tane gizli input kullanıldı. Bu de˘gerlerden alınacak veriler: if(isset($_POST["uid"])){ $id = $_POST["uid"]; //echo "<br>posttan gelen id : $id<br>"; } if(isset($_POST["ueid"])){ $ev_id = $_POST["ueid"]; //echo "<br>posttan gelen ev id : $ev_id<br>"; } Form onaylandı˘gında bu gizli de˘gerler tanımlanmı¸ssa girilen bilgiler kontrol edilip update i¸slemi gerçekle¸stirilir:
if(isset($_POST["uid"])){ if($_POST["isitma"]>-1 && $_POST["otopark"]>-1 && !empty(strip_tags($_POST["metreka && $_POST["ebanyo"]>-1 && !empty(strip_tags($_POST["ucret"]))){ //de˘ gerler dogru olarak doldurulmu¸ s .................... $ev_id = $_POST["ueid"]; $id = $_POST["uid"]; $isitma = $_POST["isitma"]; $otopark = $_POST["otopark"]; $metrekare = strip_tags($_POST["metrekare"]); $ebanyo = $_POST["ebanyo"]; $ucret = strip_tags($_POST["ucret"]); $query = "update ev set isitma=’$isitma’,otopark=$otopark,metrekare=$metrekare, ebe_banyo=$ebanyo,ucret=$ucret where id = $ev_id"; mysql_result($query) or die ("De˘ gi¸ stirme Yapılamadı."); } Foto˘graf silme i¸slemi hem dosyayı hem de veritabanında saklanan bilgisi silmekle gerçekle¸stirilir. Kullanıcı 5 foto˘grafa kadar yeni foto˘graf ekleyebilir (en fazla 5 foto˘graf tutulur). Kullanıcının yüklemi¸s oldu˘gu foto˘graflar ve limitini doldurmaya yetecek kadar yükleme menüsü daha önce eklenen resim.php dosyasıyla görüntülenmi¸stir.
detay.php
76
Teknik Kılavuz
˙Ilan gösterimi ekranında kullanıcı (emlakçı) ilanın detaylı bilgilerini görmek için kullanır. GET metoduyla (adres satırında okunur) gösterilecek ilanın id bilgisi alınır. Detay bilgileri görüntüleyen kullanıcı ilanı veren ki¸siyse bilgileri de˘gi¸stirme sayfasına da geçebilir. A¸sa˘gıdaki kod parçası GET metoduyla alınan id bilgisini kullanarak ilana ait detay bilgilerin veritabanından alınmasına yarayan sorguları yaratır: if(isset($_GET["id"])){ $id = $_GET["id"]; //Ilan Tablosunu okuyan sorgu $query_ilan = mysql_query("select * from ilan where id=$id"); if(mysql_num_rows($query_ilan)>0){ $ev_id = mysql_result($query_ilan,0,’ev_id’); $query_ev = mysql_query("select * from ev where id=$ev_id"); }else echo “˙ Ilan bulunamadı; } Detaylarda gösterilecek bilgiler : ilan no, ev no, giri¸s tarihi, biti¸s tarihi, ilçe, semt, oda sayısı, kat, ısıtma, ilan durumu, otopark, ebeveyn banyo, ücret, metrekare bilgileridir. Gerekli bilgilerin sorgular kullanılarak elde edilmesi a¸sa˘gıdakine benzer s¸ekildedir: <tr class="mesajTablo"> <td>Giris Tarihi : </td> <td><?php if($result = mysql_result($query_ilan,0,’giris_tarih’)) echo $result; ?></td> </tr> E˘ger ilan detayları görüntüleyen kullanıcı tarafından verilmi¸s ise kullanıcı bu detaylardan bir kısmını de˘gi¸stirebilecektir. Bunun için Düzenle sayfasına geçi¸s yapısı olu¸sturulan formun onaylanması durumunda duzenle.php sayfasına GET metoduyla ilan id bilgisi yollanarak yapılmı¸stır. Detayları görüntüleyen kullanıcının kontrol edilmesi : //ilanı veren kullanıcının id bilgisinin alınması $query_id = mysql_query("select emlakci_id from ilan where id = $id"); $kullanici_id = mysql_result($query_id,0); //sayfayı görüntüleyen kullanıcının id si ile ilan sahibinin //kar¸ sıla¸ stırılması
if($tc == $kullanici_id) { echo" <input type=\"submit\" value=\" Düzenle \"> <input type=\"hidden\" name=\"id\" value=$id> "; }
ilce.php 77
Teknik Kılavuz
Kullanıcı yeni ilan girece˘gi ilanekle.php dosyasındaki form üzerinde ilçe alanını seçebilmesi için olu¸sturulan select yapısına bu bilgilerin eklenmesi i¸sini yapar: $query_ilce = mysql_query("select distinct(ilce) from semt order by ilce");
$sira = 0; $rows = mysql_num_rows($query_ilce); while($rows>0){ $result = mysql_result($query_ilce,$sira); //daha önce seçilen ilçe olması durumu if($result == $global_ilce){ echo "<option value=\"$result\" selected=\"selected\">$result</option>"; } else{ //ilk kez seçiliyor olması echo "<option value=\"$result\" >$result</option>"; } $rows--; $sira++; }
semt.php Kullanıcı ilçe bilgisini seçtikten sonra form onaylanır, ve bu durumda seçilen ilçeye ait semtlerin select yapısına eklemesi i¸sini semt.php yapar. Daha önce tanımlanan ilce id bilgisini alarak bu ilçeye ait semtleri veritabanından okur.
ilan_ara.php Bu php dosyası fonksiyon olarak hazırlanmı¸stır. Bu sayede de˘gi¸sik sayfalardan ilan arama fonksiyonunun kolaylıkla ça˘gırılması sa˘glanmı¸stır. Sayfanın amacı kullanıcıya görmek istedi˘gi ilanları sunmaktır. Bu nedenle kullanıcıdan ilçe ve semt bilgisi istemektedir. Buna ek olarak aranan ilanların satılık mı yoksa kiralık mı oldu˘gu bilinmelidir. Bu nedenle evin durumu bilgisi de kullanıcıdan istenir. Daha sonra istenen bu 3 özelli˘gi ta¸sıyan ilanlar kullanıcıya gösterilmektedir. Bu tablodaki no kısmına basılarak gösterilen eve ait resim varsa görülebilir. ˙Ilçe ve semt kutuları combobox olarak hazırlanmı¸stır. Sayfa yüklendi˘ginde veritabanının semt tablosuna daha önceden yazılmı¸s olan ilçeler, ilçe kutucu˘guna atılır. ˙Ilçe kutucu˘gunda herhangi bir de˘gi¸siklik oldu˘gunda yani bir ilçe seçildi˘ginde ise semt kutusunda bu ilçeye ait semtler veritabanından çekilerek gösterilir. Sayfanın en altında ise en yüksek oya sahip emlakçının veya emlakçıların ilanları gözükmektedir. Bu ilanlar en fazla 10 adet olabilirler. Ayrıca sayfada gelismis_arama.php’ye bir link verilmi¸stir. Bu sayede daha detaylı arama yapmak isteyen kullanıcılar ilan_arama.php yerine gelismis_arama.php’yi kullanabilirler. Sayfada ilçe ve semt seçimi yapıldıktan sonra evin durumu da seçilmi¸s ise veritabanından istenen özellikleri ta¸sıyan ilanlar seçilerek kullanıcıya gösterilir. Bunun için daha önce ekranda bulunan en yüksek oya sahip emlakçıların 10 ilanını gösteren tablo ekrandan kaldırılır. Yerine istenen özelliklere sahip olan ilanlar konulur. 78
Teknik Kılavuz
gelismis_arama.php ˙Ilan aramalarını daha detaylı yapmak isteyen kullanıcılar için hazırlanmı¸stır. ilan_ara.php üzerinden ça˘gırılır. ˙Ilan aramadaki ilçe, semt ve ev bilgilerinin yanı sıra oda sayısı aralı˘gı, salon sayısı aralı˘gı, kat aralı˘gı, ısıtma sistemi, otopark durumu, ebeveyn banyosu durumu ve ücret aralı˘gı bilgileri de kullanıcıdan istenir. Aralı˘gın belirlenmesi için kullanıcı en az kutucu˘gunu ve en fazla kutucu˘gunu doldurur. Sayfanın amacı seçilen bu özelliklere sahip olan ilanları göstermektir. Ara tu¸suna basılmasıyla birlikte bir tablo halinde istenen özelliklere ait ilanlar kullanıcıya sunulur. Kullanıcı bu tablodaki ilanların no kısmına tıklayarak o ilanlara ait resimleri varsa görebilirler.
yonetici.php Bu sayfada her sayfada ortak olan ba¸slık, sa˘g ve sol menü kısımları bulunur. Ayrı olarak sayfaya özgü i¸slevlerin görüntülendi˘gi orta menüde herhangi bir i¸slem yapılmamaktadır. “Yönetici Ana Sayfası” yazısı ekrana basılmaktadır. Bu sayfa genel anlamda bir geçi¸s sayfası i¸slevi görmektedir. Sol menüde yönetici yapmak istedi˘gi i¸slemleri seçer. ˙Içerdi˘gi di˘ger php dosyaları config.php, opendb.php, kontrol.php, menu.php, closedb.php dosyalarıdır. kontrol.php’nin kontrol fonksiyonu ile bu sayfaya ula¸smaya çalı¸san ki¸sinin yönetici olup olmadı˘gına bakılır. ( kontrol_tip(3); ) Bu sayfa için bir i¸slev yapılmamasına ra˘gmen veritabanını açma ve kapama i¸slemlerini içeren dosyaların içerilmesinin sebebi sa˘g bloktaki gösterilen alt sayfalardır. Bu sayfalar için veritabanını açma ve kapama i¸slemlerinin gerçekle¸stirilmesi gerekmektedir ve bu i¸slemler bu alt sayfaların gösterildi˘gi sayfalarda yapılmaktadır. Yönetici sayfalarında ortak olarak kullanılan kod yapıları:
Kayıt Silme: ˙Ilgili sayfalarda kayıtlar tablolar s¸eklinde sunulmaktadır. Tabloların birinci sütunlarında checkbox bile¸seni bulunmaktadır. Bu bile¸senlerle çoklu seçmeler yapılabilir. Silme mekanizması a¸sa˘gıdaki basamaklarda gerçekle¸stirilmektedir. Kayıtları silmek için ayrı bir php sayfası kullanılmamaktadır. Aynı sayfa üzerinde silme i¸slemi gerçekle¸stirilmektedir. Ve sayfada yenilenmi¸s kayıtlar tekrar kullanıcıya gösterilmektedir. Seçilen checkbox’ların ilgili kayıtları temsil etmesi için bir s¸ekilde bu iki ö˘ge arasında bir ili¸ski kurmak gerekir. Bu da checkbox bile¸seninin isim özelli˘gi üzerinden gerçekle¸stirilmi¸stir. Her checkbox için isim “check(no)” s¸eklinde bir kalıp haline sokulmu¸stur. Burada “no” checkbox’ın ifade etti˘gi kayıt için birincil anahtar de˘geridir. SELECT (birincil anahtar) FROM (ilgili tablo) $result=mysql_query($query); while($row=mysql_fetch_array($result,MYSQL_ASSOC)){ //di˘ ger kodlar $name="check"; $name.="$row[(birincil anahtar)]"; // di˘ ger kodlar <td><INPUT type=checkbox name=$name></td> // di˘ ger kodlar } Kayıtları silmek için ilgili checkbox’ lar seçildikten sonra a¸sa˘gıdaki kod ile yaratılan sil dü˘gmesine basılır. // di˘ ger kodlar <td><INPUT type=submit value=sil name=(kayıttürü)sil style=’WIDTH: 64px; 79
Teknik Kılavuz
HEIGHT: 24px’></td> // di˘ ger kodlar “<form action=(ilgili php sayfası) method=get>” Yukarıdaki kod ile belirtilen form sil dü˘gmesine basıldıktan sonra submit edilir. Gerekli sayfalama parametreleri, checkbox de˘gerleri ve sil dü˘gmesinin de˘geri ile birlikte ilgili php sayfası üzerine dönülür. Sadece i¸saretlenen checkbox’lar form aktarıldıktan sonra GET parametreleri olarak bulunur. Ayrıca e˘ger sil tu¸suna basılmı¸ssa bunun aktarımı “(kayıttürü)sil=sil” s¸eklinde yansır. sil tu¸suna basılıp basılmadı˘gı kontrolü yapılmak zorundadır. if(isset($_GET[’(kayıttürü)sil’]) && $_GET[’(kayıttürü)sil’] = =’sil’) E˘ger sil tu¸suna basılmı¸ssa i¸saretlenmi¸s kayıtların silme i¸slemi yapılacaktır. Bunu için checkbox’ ların name özelli˘gi okunmalıdır. Zaten sadece i¸saretlenen checkbox’lar submit i¸sleminden sonra GET parametreleri olarak bulunacaktır. Sıra ile bütün kayıtların birincil anahtar de˘gerleri okunur ve bu de˘gerler “check(no)” isim kalıbına sokularak bu isimde bir checkbox ‘ın i¸saretlenip i¸saretlenmedi˘gi kontrol edilir. $query="SELECT (birincil anahtar) FROM (ilgili tablo)"; $result=mysql_query($query); while($row=mysql_fetch_array($result,MYSQL_ASSOC)){ $name="check"; $name.="$row[(birincil anahtar)]"; if(isset($_GET[$name])){ $query="DELETE FROM (ilgili tablo) WHERE (birincil anahtar)=’$row[(birincil anahtar)]’"; mysql_query($query) or die(’Silme i¸ sleminde hata olu¸ stu.’); } }
˘ Sayfalama Teknigi ˙Ilgili kayıtlar a¸sa˘gıdaki SQL komutuyla veritabanından seçilir: SELECT (istenen nitelikler) FROM (ilgili tablo) LIMIT $offset,$rowsperpage komutu ile $offset de˘gi¸skeni ile belirlenen kayıttan ba¸slanarak, $rowsperpage de˘gi¸skeninin belirtti˘gi sayı kadar kayıt ilgili tablodan okunur. $rowsperpage de˘gi¸skeninin de˘geri yönetici sayfaları için 20 kabul edilmi¸stir. Yani her sayfada en fazla 20 kayıt görüntülenebilecektir. Bulunulan sayfa $pagenum de˘gi¸skeni ile belirtilmektedir. Bu de˘gi¸skenin de˘geri adres satırındaki ilgili parametre ile aynı sayfa üzerine aktarılır. Sayfa numarasının varsayılan de˘geri 1’dir. $pagenum de˘gerinin adres satırından okunması a¸sa˘gıdaki php kodu ile gerçeklenir. if(isset($_GET[’page’])) { $pagenum = $_GET[’page’]; } // GET yöntemi ile aktarım $offset de˘ gerinin sayfa numarasına göre atanması a¸ sa˘ gıdaki kod ile yapılır.
80
Teknik Kılavuz
$offset = ($pagenum - 1) * $rowsperpage; Sayfalama ba˘glantıları a¸sa˘gıdaki s¸ekilde gerçeklenir: 1. Öncelikle o anda ilgili tabloda bulunan kayıtların toplam sayısı a¸sa˘gıdaki SQL komut ile bulunur. SELECT COUNT (tablo için birincil anahtar) AS numrows FROM (ilgili tablo) 2. Kayıtların kaç sayfa halinde ekrana basılaca˘gı a¸sa˘gıdaki kod ile bulunur.
$maxpage = ceil($numrows/$rowsperpage); (ceil bir kesrili sayıyının kendisinden büyük olan 3. Her sayfa için ekrana yazılacak linkler olu¸sturulur. Bulunulan sayfa için link olu¸sturmaya gerek yoktur. Sayfa 1’den ba¸slayarak $maxpage de˘gerine kadar bir döngü ile bu i¸slem yapılır. for($page = 1; $page <= $maxpage; $page++) { if ($page == $pagenum) { $nav .= " $page "; // bulunulan sayfa } else{ $nav .= " <a href=\"$self?page=$page\">$page</a> "; } } 4. Bazı kısa yol ba˘glantıları kurmak özellikle üzerinde çalı¸sılan fazla sayıda kayıtlar için yerinde olacaktır. Bu ba˘glantılar ilk sayfa, bir önceki sayfa, son sayfa ve bir sonraki sayfa s¸eklinde olu¸sturulmu¸stur. E˘ger bulunulan sayfa numarası 1’den büyükse ilk sayfa ve önceki sayfa ba˘glantıları koymak mantıklı olacaktır. if ($pagenum > 1) { $page = $pagenum - 1; $prev = " <a href=\"$self?page=$page\">[Önceki]</a> "; $first = " <a href=\"$self?page=1\">[˙ Ilk Sayfa]</a> "; } else { $prev = ’&nbsp;’; link $first = ’&nbsp;’; } E˘ger bulunulan sayfa numarası son sayfa numarasından küçük ise son sayfa ve sonraki sayfa ba˘glantıları koymak mantıklı olacaktır. if ($pagenum < $maxpage) { $page = $pagenum + 1; $next = " <a href=\"$self?page=$page\">[Sonraki]</a> "; $last = " <a href=\"$self?page=$maxpage\">[Son Sayfa]</a> "; } else { 81
Teknik Kılavuz
$next = ’&nbsp;’; $last = ’&nbsp;’; } 5. Son olarak sayfaların en alt kısmında bu linkler uygun bir s¸ekilde yazılmaktadır. echo $first . $prev . $nav . $next . $last
Görüntüleme mekanizması: ˙Istenen kayıtlar ilgili tablodan çekilir. Kayıt olup olmadı˘gı kontrolü yapılır ve kayıtlar ekrana tablolar halinde yazdırılır. $query="SELECT (istenen nitelikler) FROM (ilgili tablo) LIMIT $offset,$rowsperpage"; $result=mysql_query($query); if(!($row=mysql_fetch_array($result))){ echo "Sisteme dahil herhangi bir (kayıttürü) kayıtı bulunamadı."; } else{ echo "<table>"; echo "(Ba¸ slıklar)"; do { //nitelik de˘ gerleri ve gerekli ba˘ glantılar yazdırılır }while($row=mysql_fetch_array($result)); // di˘ ger kodlar }
˙Içerilen Dosyalar config.php opendb.php closedb.php kontrol.php kontrol_tip(3) menu.php
// temel konfigürasyon bilgileri // veritabanının açılması // veritabanının kapatılması // eri¸ sim kontrollerinin yapılması // bu sayfaya eri¸ smek isteyen yönetici tipinden bir kullanıcı mı? // sayfada gerekli menülerin olu¸ sturulması
y_uyeler.php Bu sayfada üyelerin yönetimi i¸slemi gerçekle¸stirilir. Bu sayfada üyelerin görüntülenmesi, üyelerin silinmesi i¸slemleri yapılmaktadır. Tabloda, üyelerin yanındaki linklerle üyeler hakkında ayrıntılı bilgi edinmek ve üyelerin s¸ifresini de˘gi¸stirmek için y_uyebilgi.php sayfasına uygun ba˘glantı kurulur. Bu sayfa için genel bir inceleme yapılırsa yine her sayfa için ortak menüler gözümüze çarpar. Bu sayfaya özgü i¸slevler ise orta menüde gerçekle¸sir. Daha önce açıklanan kayıt silme ve sayfalama mekanizmaları ile i¸slemler gerçekle¸stirilmektedir. Bu mekanizmalardaki ilgili tablo kullanicilar tablosu; birincil anahtar tc niteli˘gi; kayıt türü ise üye olmaktadır. 82
Teknik Kılavuz
Kayıtları görüntülemek için bahsi geçen görüntüleme mekanizması kullanılmı¸stır. ˙Ilgili tablo kullanicilar ve istenen nitelikler de tc ,tip ve ad nitelikleridir. Kayıtları ekrana listelerken listelenen üyenin tipi de ekrana yazılmı¸stır. tip niteli˘ginin de˘gerinden faydalanılarak ilgili katar bulunmu¸stur. $state=”; switch($row[’tip’]) { case 0: $state="Mü¸ steri"; break; case 1: $state="Emlakçı"; break; case 2: $state="Üst Düzey Emlakçı"; break; case 3: $state="Yönetici"; break; } Ayrıca her listelenen üye kaydının yanına üyelerin bilgilerinin görüntülenece˘gi y_uyebilgi.php sayfasına bir ba˘glantı koyulmalıdır ve gerekli parametreler bu ba˘glantı da belirtilmelidir. // di˘ ger kodlar <td><a href=’y_uyebilgi.php?uyeid=$row[tc]&uyetipi=$row[tip]’><font color=\"#993300\">$row[tc]</a></td> // di˘ ger kodlar y_uyebilgi.php sayfası için gerekli olan parametreler kullanıcı tipi ve tc kimlik numarasıdır.
y_uyebilgi.php Üyelerin bilgileri bu sayfada görüntülenir ve üyelere ait s¸ifreler de˘gi¸stirilebilir. Bu sayfaya iki s¸ekilde gelinebilir: y_uyeler.php ve kendisi üzerinden. Sayfanın submit edildikten sonra kendi üzerine dönmesi s¸ifre de˘gi¸stirme i¸slemi ile olmaktadır. Önemli olan iki önemli nitelik vardır: tc kimlik numarası ve üye tipi. Üye tipi ve bu tipe ili¸skin ilgili katar de˘geri gereklidir. Üye tipi de˘geri veritabanı sorgulamalarında, üye tip adı da ekrana bilgi yazdırılmasında kullanılmaktadır. Bu iki de˘ger gerekli yerlerde birbirlerine dönü¸stürülmü¸stür. Üye tipi ve tc kimlik numarası de˘gerleri iki farklı yerden y_uyebilgi.php sayfası üzerine aktarılmaktadır: y_uyeler.php üzerinden ya da y_uyebilgi.php üzerinden ilgili textbox’lar üzerinden. if(isset($_GET[’uyeid’])&&isset($_GET[’uyetipi’])) { // y_uyeler.php’den $uyeid = $_GET[’uyeid’]; $uyetipi= $_GET[’uyetipi’]; switch($uyetipi) { case 0: $uyetipadi="Mü¸ steri"; break; case 1: $uyetipadi="Emlakçı"; break; case 2: $uyetipadi="Üst Düzey Emlakçı"; break; case 3: $uyetipadi="Yönetici"; break; } 83
Teknik Kılavuz
} else if(isset($_GET[’sifredegistir’]) && $_GET[’sifredegistir’]==’¸ Sifre De˘ gi¸ stir’) { { //kendisinden $uyeid=$_GET[’TC’]; $uyetipadi=$_GET[’tip’]; switch($uyetipadi) { case ’Mü¸ steri’: $uyetipi=0; break; case ’Emlakçı’: $uyetipi=1; break; case ’Üst Düzey Emlakçı’: $uyetipi=2; break; case ’Yönetici’: $uyetipi=3; break; } // güncelleme } E˘ger bu sayfaya y_uyeler.php üzerinden geliniyorsa tc kimlik numarası ve üye tipi de˘gerleri uyeid ve uyetipi adres satırı parametreleri üzerinden alınır. E˘ger y_uyebilgi.php üzerinden geliniyorsa TC ve tip isimli textbox’lar üzerinden alınmaktadır. Sifre ¸ de˘gi¸stirilmesi i¸slemi Sifre ¸ De˘gi¸stir tu¸suna basılarak yapılmaktadır. Bunun sonucunda form submit edilerek aynı sayfa üzerine döndürülür. Tu¸s “Sifre ¸ De˘gi¸stir = sifredegistir” s¸eklinde submit edilir. Bunun kontrolü kodun ba¸sında yapılır. Ve e˘ger girilen yeni s¸ifre de˘geri bo¸s de˘gilse güncelleme i¸slemi yapılır. if($_GET[’sifre’]!=”){ $query="UPDATE kullanicilar SET sifre=’$_GET[sifre]’ WHERE tc=’$uyeid’"; mysql_query($query) or die("¸ Sifre de˘ gi¸ stirilemedi"); } Bilgilerin yazdırılması da üye tipine göre farklılık gösterecektir. 3 ana üye için de˘gerler (ba¸slık)+(de˘ger) s¸eklinde alt alta tabloda yazdırılacaktır. Üç farklı üye tipi için veritabanı sorgulamaları a¸sa˘gıdaki gibi olacaktır.
//Mü¸ steri için(de˘ ger 0): SELECT ad,sifre,meslek,tel_no,adres,email,yas FROM kullanicilar,musteri WHERE (mu
//Emlakçı için(de˘ ger 1,2): SELECT ad,sifre,firma,tel_no,adres,email FROM kullanicilar,emlakci WHERE (emlakci.
//Yönetici için(de˘ ger 3): SELECT ad,sifre FROM kullanicilar WHERE tc=’$uyeid’
84
Teknik Kılavuz
y_mesajlar.php Sistemde üyelerin birbirine gönderdi˘gi mesajlar ve bu mesajların içerikleri görüntülenir. Uygun görülmeyen mesajlar yönetici tarafından silinir. Daha önce açıklanan kayıt silme, görüntüleme ve sayfalama mekanizmaları kullanılmı¸stır. Bu sayfa için ilgili tablo mesaj, kayıttürü mesaj ve birincil anahtar id ’dir. Görüntüleme için istenen nitelikler id, gonderen, alan, konu, tarih nitelikleridir. Mesajı alan ve gönderen kullanıcıların isimleri a¸sa˘gıdaki basit sorgu ile bulunur. $query="SELECT ad FROM kullanicilar WHERE tc=’$row[gonderen]’"; $gonderen=mysql_fetch_array(mysql_query($query),MYSQL_ASSOC); $query="SELECT ad FROM kullanicilar WHERE tc=’$row[alan]’"; $alan=mysql_fetch_array(mysql_query($query),MYSQL_ASSOC); Bu sayfa için bir mesaj içeri˘gi görüntüleme mekanizması vardır. Mesajın içeri˘gi a¸sa˘gıda belirtilen textarea bile¸seni yardımıyla görüntülenir. echo "<tr><td><TEXTAREA name=Textarea1 readonly=true rows=4 cols=20 class = \"yazi_kutusu\"> $mesaj </TEXTAREA></td></tr>"; Kayıt listesinde mesaj konusu ile yine y_mesajlar.php üzerine dönen ba˘glantılar yaratılır. Tıklanan kayıt ile ilgili birincil anahtar de˘geri adres satırı parametresi ile aktarılır. Böylece ba˘glantı açıldı˘gında mesaj içeri˘gini ta¸sıyan $mesaj de˘gi¸skenine ilgili parametreye ait mesajın içeri˘gi atanır. Bu da sayfanın altında kalan textarea bile¸seninde yazdırılır. else if(isset($_GET[’mesajid’])) { $query="SELECT mesaj from mesaj WHERE id=’$_GET[mesajid]’"; $result=mysql_query($query); $row=mysql_fetch_array($result,MYSQL_ASSOC); $mesaj=$row[’mesaj’]; }
y_talepformu.php Sistemde bulunan talep formlarının listesi görüntülenir, istenen formlar silinebilir. Ayrıca talep formunda belirtilen ev ile ilgili özellikler y_evbilgi.php sayfasına gerekli parametreler aktarılarak ö˘grenilebilir. Daha önce de açıklanan kayıt silme, görüntüleme ve sayfalama mekanizmaları bu sayfada da kullanılmı¸stır. Bu sayfa için ilgili tablo talep_formu, kayıttürü talep ve birincil anahtar id’dir. Ayrıca görüntüleme için istenen nitelikler id, emlakci, musteri, ev_id nitelikleridir. Tabloda listelemek üzere emlakçı ve mü¸steriye ait isimler bulunmalıdır. Bunun için a¸sa˘gıdaki basit sorgular yazılır. $query="SELECT ad FROM kullanicilar WHERE tc=’$row[emlakci]’"; $emlakci=mysql_fetch_array(mysql_query($query),MYSQL_ASSOC); $query="SELECT ad FROM kullanicilar WHERE tc=’$row[musteri]’"; $musteri=mysql_fetch_array(mysql_query($query),MYSQL_ASSOC); Ayrıca olu¸sturulan tabloda y_evbilgi.php sayfasına ula¸san ba˘glantılar olu¸sturulmalıdır. Bunun için evle ilgili birincil anahtarı içerecek biçimde bir ba˘glantı kurulur. Bu sayfa için silme mekanizmasında ek olarak forma ait evin silinmesi gerekmektedir. Bunun için ek kod eklemek gerekmektedir
85
Teknik Kılavuz
$query="DELETE FROM ev WHERE id=’SELECT ev_id FROM talep_formu WHERE id=’$row[id]”"; mysql_query($query) or die(’Silme i¸ sleminde hata olu¸ stu.’);
y_evbilgi.php ˙Ilan ya da talep verilmek üzere sistemde olu¸sturulan evlerin salt bilgilerinin görüntülendi˘gi php sayfasıdır. Belirtildi˘gi gibi bu sayfaya y_ilanlar.php ya da y_talepformu.php sayfaları üzerinden eri¸silebilir. Bu sayfalar bir evno parametresi ile bu sayfaya ula¸sırlar. Böylece istenen eve ait özellikler ba¸sarılı bir sorgu ile yazdırılabilir. SELECT oda_sayisi, salon_sayisi, kat, isitma, otopark, ucret, metrekare, ebe_banyo, satilik, semt, ilce FROM semt,ev WHERE ((ev.id=’$evno’) AND (semt.id=semt_id)). Veritabanından çekilen bilgiler (ba¸ slık)+(de˘ ger) olacak ¸ sekilde alt alta sıralanır.
y_ilanlar.php Sistemde emlakçıların verdi˘gi ilanlar listelenir, bu ilanlardan uygun görülmeyenler silinebilir. ˙Ilanlara ait ev özellikleri ve resimler gerekli ba˘glantılar kurularak görüntülenir. Daha önce açıklanan kayıt silme, görüntüleme ve sayfalama mekanizmaları bu sayfa için de kullanılır. Bu sayfa için ilgili tablo ilan, kayıttürü ilan ve birincil anahtar id’dir. Görüntüleme için istenen nitelikler ad, giris_tarih, bitis_tarih, emlakci_id, durum, ev_id, ilan.id, satilik nitelikleridir. Bu niteliklerden bir grubun de˘geri ekrana yazdırılır, di˘gerleri ise gerekli ba˘glantıların kurulmasında kullanılır. ˙Ilanda bahsi geçen ev ile ilgili son durum satilik niteli˘ginin de˘geri ile anla¸sılır. Bu de˘ger ile ilgili mesajları uygun biçimde ekrana yazmak gereklidir. if($row[’satilik’]==1){ $state1=($row[’durum’]==1) ? "Ev satildi":"Ev satilmadi"; } else{ $state1=($row[’durum’]==1) ? "Ev kiralandi":"Ev kiralanmadi"; } Her kayda ait $state1 de˘geri tabloda yazılır. ˙Ilanda belirtilen ev ile ilgili bilgi yine y_talepformu.php sayfasında oldu˘gu gibi y_evbilgi.php sayfasına evno ile ilgili parametre aktarılarak yapılır. Bunun için tablonun her satırında olu¸sturulan link a¸sa˘gıdaki gibidir.
// di˘ ger kodlar <td><a href=’y_evbilgi.php?evno=$row[ev_id]’><font color=\"#993300\">Ev Özelli˘ gi</a> // di˘ ger kodlar Ayrıca ilanda belirtilen ev ile ilgili resimlere ula¸smak için de tablonun her satırında uygun ba˘glantılar olu¸sturmak gerekir. Bunun için ilan ile ilgili birincil anahtar bilgisi y_resimbilgi.php sayfasına aktarılır. // di˘ ger kodlar <td><a href=’y_resimbilgi.php?ilanno=$row[ilanid]’> 86
Teknik Kılavuz
<font color=\"#993300\">˙ Ilan Resimleri</a></td> // di˘ ger kodlar Bu sayfa için silme mekanizmasında ek olarak ilana ait evin silinmesi gerekmektedir. DELETE FROM ev WHERE id=’$row[ev_id] sorgusu ile bu i¸slem gerçekle¸stirilir.
y_resimbilgi.php Sistemdeki ilanlara ait resimlerin görüntülendi˘gi ve uygun görülmeyen resimlerin silindi˘gi sayfadır. Bu sayfa için di˘ger yönetici sayfalarından farklı bir silme ve görüntüleme mekanizması kullanılmı¸stır. ˙Ilanlara ait resimler her satırda en fazla 3 resim olacak s¸ekilde alt alta listelenmektedir. Bunun için döngünün her basama˘gında SELECT id,konum,ilan_id FROM resim WHERE ilan_id=’$ilanno’ LIMIT $offset,3 sorgusu yapılmaktadır. $offset de˘geri her basamak için 3 arttırılır. SELECT sorgusunun sonucu kontrol edilir. E˘ger bir de˘ger dönmüyorsa sonsuz döngüden çıkılır. $result=mysql_query($query); if(!($row=mysql_fetch_array($result,MYSQL_ASSOC))) break; E˘ger dönen de˘ger uygunsa tekrar bir sorgu sonucu alınır ve resimler bir satıra basılır. Bu resimlere ait birincil anahtar de˘gerleri $resimid dizisinde toplanır. $result=mysql_query($query); while($row=mysql_fetch_array($result,MYSQL_ASSOC)){ echo "<td><IMG style=’WIDTH: 150px; HEIGHT: 150px’ src=$row[konum]></td>"; $resimid[$i]=$row[’id’]; $i++; } Resimlerin hemen altına her bir resim için o resmin silinmesi için ilgili de˘gerleri içeren linkler olu¸sturulur. Burada resimle ilgili id de˘gerine ula¸smak için $resimid dizisi kullanılır. for($j=$offset;$j<$i;$j++) echo "<td> <center> <ahref= ’y_resimbilgi.php? ilanno= $ilanno & resimno= $resimid[$j]’> Resmi si l</a> </center> </td>"; echo "</tr>"; Resmi silmek üzere sayfa kendi üzerine ilan numarası ve resim numarası parametreleri ile döner. E˘ger resim silinecekse resimno parametresinin kurulmu¸s olması gerekir. Kurulmu¸ssa gerekli silme i¸slemleri yapılır. Resim dosyasını silmek için de unlink() fonksiyonu kullanılır. if(isset($_GET[’resimno’])) { $query="SELECT konum FROM resim WHERE id=’$_GET[resimno]’"; $result=mysql_query($query); $row= mysql_fetch_array($result,MYSQL_ASSOC); if(file_exists($row[’konum’])) 87
Teknik Kılavuz
unlink($row[’konum’]); $query="DELETE FROM resim WHERE id=’$_GET[resimno]’"; mysql_query($query) or die("Resim silinemedi"); }
y_anket.php Sistemde yönetici tarafından girilmi¸s olan anketlerin kontrolü yapılır. Bir anket varsayılan olarak atanıp sürekli sitede bu anketin ilk olarak görünmesi sa˘glanabilir. ˙Istenen anketler silinebilir. Anketleri silmek için yönetici sayfaları için geçerli olan silme mekanizması; ilgili tablo anket, kayıttürü anket ve birincil anahtar id olmak üzere kullanılmı¸stır. Anket tablosundan id, soru ve goster nitelikleri alınıp tabloda gösterilecektir. Varsayılan anket için soru farklı bir renkte ekranda gösterilecektir. Varsayılan anket de˘gerini de˘gi¸stirmek için radiobox bile¸senleri kullanılır. Hepsinin isim de˘geri aynı tutularak bu grup içinden yalnızca birinin i¸saretlenmesi garanti edilmi¸s olur. Bu radiobox’ ların id özelli˘gine kayıtlarla ilgili birincil anahtar de˘gerleri ba˘glanarak iki ö˘ge birbiriyle ili¸skilendirilmi¸stir. Varsayılan tu¸suna basıldı˘gında form submit edilerek kendi üzerine döner ve bu bile¸sen varsayilan = Varsayılan parametresi s¸eklinde aktarılır. Böylelikle tu¸sa basılıp basılmadı˘gı kontrolü yapılır ve basılmı¸s ise güncelleme i¸slemleri yapılır. if(isset($_GET[’varsayilan’]) && $_GET[’varsayilan’]==’Varsayılan’){ $val=$_GET["radio"]; $query="UPDATE anket SET goster=’0’ WHERE goster=1"; mysql_query($query) or die(’Güncelleme i¸ sleminde hatalar olu¸ stu.’); $query="UPDATE anket SET goster=’1’ WHERE id=’$val’"; mysql_query($query) or die(’Güncelleme i¸ sleminde hatalar olu¸ stu.’); }
anket_ekle.php Sisteme yönetici tarafından anket kaydı yapılır. Bu kayıt aynı sayfa üzerinde POST yöntemi ile parametre aktarımları ile basamak basamak yapılır. POST yöntemi ile aktarılan parametreler form üzerindeki textarea bile¸senlerinin aldıkları de˘gerlerdir Anket ekleme ilgili kısıtlamalar kullanıcıya devam ve kaydet dü˘gmelerinin bazı basamaklarda olup olmamasıyla sa˘glanmaktadır. Bir anketin kaydedilmesi için en az iki cevap de˘geri yazmak gerekmektedir. Ayrıca bir anket için en çok on adet cevap olabilmektedir. Bu basamaktan sonra sadece kaydet dü˘gmesine ula¸sılabilinmektedir. Bir tane anket sorusu en fazla da on adet cevap s¸ıkkı olabilir. Formun her basama˘gında kaçıncı cevap s¸ıkkının yazıldı˘gının bulunması için kurulu POST de˘gi¸skenleri sayılır ve bu sonuç $cevap_no de˘gi¸skenine atanır. E˘ger $cevap_no 0 ise henüz ekrana bir s¸ey yazılmamı¸stır. Ve bu basamak için sadece anket sorusunun alınaca˘gı textarea bile¸seni ekrana çıkarılır. E˘ger bu de˘ger sıfırdan büyükse o zaman daha önce yazılmı¸s cevapları ekrana çıkartmak için 1’den $cevap_no de˘gerine kadar sadece okunabilir textarea bile¸senleri alt alta yaratılır. Son olarak da o anki
88
Teknik Kılavuz
basamakta de˘geri girilecek bile¸sen yaratılır. Programda textarea bile¸senlerinin isimleri için “kutu+(sayı)” kalıbı kullanılmı¸stır. E˘ger kaydet dü˘gmesine basılmı¸ssa ilk basamaktan itibaren girilen bütün verilerin ilgili tablolara girilme sırası gelmi¸stir. Öncelikle anket sorusu ile birlikte bir, anket kaydı ilgili tabloda olu¸sturulur. $query="INSERT INTO anket (id,soru,goster) VALUES (”,’$val’,’0’)"; mysql_query($query) or die("*Ekleme i¸ sleminde hata"); Daha sonra cevap kayıtları ilgili anketle ili¸skilendirilerek cevap tablosunda yerlerini alırlar.
anketformu.php Sitede sa˘g çerçevede sistemde bulunan anketler kullanıcıya sunulacaktır. Bunu yapmak için ilgili çerçeveye projedeki bütün sayfalar için <? include ‘anketformu.php’; ?> php ifadesi yazılır. Bütün anketler bir arada gösterilemeyece˘ginden gösterilecek bir ankete karar vermek gereklidir. Bunun için farklı yolar vardır. E˘ger varsayılan bir anket tanımlanmı¸ssa bu gösterilir. E˘ger varsayılan bir anket yoksa bulunan anketler içinden rasgele bir anket seçilir. E˘ger kullanıcı combobox bile¸senini kullanarak di˘ger anketleri görüntülemek istemi¸sse o anket ekrana gelir. Ekranda gösterilecek anketin numarası $id de˘gi¸skeninde tutulur. Anket sorusu ilgili tablodan çekilip ekrana basılır. Daha sonra her cevap kaydı için birer radiobox bile¸seni yaratılır. $name="radio".$row["id"]; // id: cevap kaydı için birincil anahtar <INPUT type=radio name=radio value=$name onclick=\"return radio_tikla(’$name’)\"> radiobox olayını i¸sleyecek script a¸sa˘gıdaki gibidir. Bu; kullanılan oyun i¸slenece˘gi ve anket için son durumun grafiksel olarak gösterilece˘gi grafik.php’ye bir yönlendirmedir. Hangi cevap seçene˘ginin i¸saretlendi˘gi adres satırı parametresi olarak gönderilmektedir.
<script language=\"javascript\" type=\"text/javascript\"> function radio_tikla(param) { window.open(’grafik.php?radio=’+param,’jav’,’width=350,height=350,resizable=no } </script> Di˘ger anketlerin görüntülenmesi için de bir combobox olu¸sturmak uygun gelmektedir. Bu bile¸sende seçilen de˘ger bul dü˘gmesine basılarak submit edilir. Bu bile¸senin her bir seçene˘gin ilgili anketi ifade etmesini sa˘glamak için seçeneklerin value özellikleri, anket kayıtlarının birincil anahtar de˘gerlerine atanmı¸stır.
grafik.php Anket ile ilgili istatistiksel de˘gerler grafiksel olarak ekrana yansıtılır. Hangi anket ile ilgili istatistiklerin yapılaca˘gı GET parametresi olarak bu dosyada alınır. Bu parametrenin ilgili yerleri okunarak hangi cevap s¸ıkkına tıklandı˘gı bulunur. Basit bir sorgu yapılarak bu cevap s¸ıkkının hangi ankete ait oldu˘gu bulunur. Kötü kullanımları engellemek için her kullanıcının anket ba¸sına bir oy kullanması sistemde belirlenmi¸stir. Oyu veren kullanıcının daha önce bu anket için oy kullanıp kullanmadı˘gını ö˘grenmek için SELECT * FROM oy_kullananlar WHERE ip=’$ip’ AND anket_id=’$val’ sorgusu yapılır. 89
Teknik Kılavuz
Sonuçta bir de˘ger dönmezse kullanılan oy geçerlidir. Tersi için ise kullanılan oy geçersiz sayılır. Kullanılan oy geçerli ise bu kullanıcının oy verdi˘gini belirtmek için oy_kullananlar tablosuna kullanıcının kaydı yapılır. Daha sonra ise i¸saretlenen cevap s¸ıkkı için oy niteli˘gi ilgili tablodan çekilir ve bu de˘ger bir arttırılarak kayıt güncellenir. $query="SELECT oy_sayisi,anket_id FROM cevap WHERE id=’$id’"; $result=mysql_query($query); $row=mysql_fetch_array($result,MYSQL_ASSOC); $yenioy=($row["oy_sayisi"]+1); $query="UPDATE cevap SET oy_sayisi=’$yenioy’ WHERE id=’$id’"; mysql_query($query) or die("Güncelleme yapılamadı."); Oy güncelleme i¸sleminden sonra anketle ilgili cevap s¸ıklarının oylanma yüzdesini gösterecek grafiksel bir gösterilim olu¸sturulmu¸stur. Bunun için öncelikle o anket için verilen toplam oy seçilir. Daha sonra ankete ait her cevap s¸ıkkı için kullanılan oy sayısı belli katsayılarla toplam oy sayısına oranlanarak, bu cevap s¸ıkkına ait grafik sütunu için bir büyüklük elde edilir. Farklı renklerdeki birim uzunluklu grafik sütunu parçaları cevap s¸ıkkı için belirtilen büyüklük kadar yan yana getirilerek istenen grafik bütünü olu¸sturulmu¸s olur.
90