CodeIgniter İle İletişim Formu Uygulaması

CodeIgniter İle İletişim Formu Uygulaması

İletişim formları site yöneticileri ile ziyaretçileri arasındaki bağlantıyı sağlayan internet sitelerinin en önemli bölümlerinden biridir. Bu yazımızda CodeIgniter çatısını kullanarak iletişim formu oluşturacağız.

Uygulamada CodeIgniter içerisinde gelen Email ve Form_validation kütühaneleri ile form yardımcısından(helper) faydalanacağız.

application/controller dizinine uygulamamızın controller dosyası olacak olan iletisim.php’yi oluşturarak aşağıdaki kodları yazalım.


<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

class Iletisim extends Controller {
    function __construct() {
        parent::__construct();
        /*
        * Controller ve view dosyalarında kullanacağımız form yardımcısını(helper) ve Form_validation  kütüphanesini(library) yüklüyoruz.
        */
        $this->load->helper('form');
        $this->load->library('form_validation');
    }

    function index() {
        /*
        * Formdan veri gelip gelmediğini Form_validation kütüphanesinin yardımı ile kontrol edeceğiz.
        * Bunun için gerekli doğrulama kurallarını tanımlıyoruz.
        * Form_validation kütüphanesi hakkında daha fazla bilgi için : http://codeigniter.com/user_guide/libraries/form_validation.html
        */
        $this->form_validation->set_rules('email', 'E-Posta', 'trim|required|valid_email');
        $this->form_validation->set_rules('name', 'İsim', 'trim|required');
        $this->form_validation->set_rules('message', 'Mesaj', 'trim|required');
        $data['errors'] = array();
        /*
        * Formdan veri gelmişmi kontrol ediyoruz.
        */
        if ($this->form_validation->run()) {
            $edata = array(
                'name' => $this->form_validation->set_value('name'),
                'email'  => $this->form_validation->set_value('email'),
                'message' => $this->form_validation->set_value('message')
                );
            /*
            * Formdan gelen verileri edata isimli bir dizide toplayarak _send_email fonksiyonunu çağırıyoruz.
            * Aşağıda göreceğimiz bu fonksiyon e-posta başarıyla gönderilirse TRUE, gönderilemezse FALSE döndürüyor.
            * Bizde dönen değere göre kullanıcının göreceği mesajı ekrana yazdırıyoruz.
            */
            if($this->_send_email($edata)) {
                echo  '<div class="success">Mesajınız başarıyla gönderildi. Görüş ve önerileriniz için teşekkürler.</div>';
                return;
            } else {
                echo '<div class="error">Teknik bir hatadan dolayı mesajınız <b>gönderilemedi</b>.</div>';
                return;
            }
        }
        /*
        * Formdan herhangi bir veri gelmemişse veya gelen veriler eksik/hatalıysa view dosyamızı yüklüyoruz.
        */
        $this->load->view('iletisim', $data);
    }

    function _send_email($data) {
        /*
        * CodeIgniter Email kütüphanesini yüklüyoruz.
        * Bu kütüphane hakkında daha fazla bilgi için : http://codeigniter.com/user_guide/libraries/email.html
        */
        $this->load->library('email');
        /*
        * E-posta hangi protokolle gönderilecek? mail smtp veya sendmail
        */
        $config['protocol'] = 'mail';
        /*
        * Gönderilecek E-posta tipi. text veya html
        * Mesajın biraz daha hoş gözükmesi için html olarak göndereceğiz.
        */
        $config['mailtype'] = 'html';
        /*
        * Eğer protocol'ü smtp olarak belirlediyseniz alttaki gerekli ayarları yapmalısınız.
        * $config['smtp_host'] = 'smtp_sunucusu';
        * $config['smtp_user'] = 'smtp_kullanici_adi';
        * $config['smtp_pass'] = 'smtp_sifresi';
        * $config['smtp_port'] = smtp_portu;
        *
        * Belirlediğimiz ayarlarla e-posta gönderimine başlıyoruz.
        */
        $this->email->initialize($config);
        /*
        * Kimden
        */
        $this->email->from($data['email'], $data['name']);
        /*
        * Kime
        */
        $this->email->to('gonderilecek@adres.com');
        /*
        * E-posta konusu
        */
        $this->email->subject('İletişim Formundan Yeni Mesaj');
        /*
        * E-posta içeriği.
        * Html kodlarını buraya yazmak yerine iletisim-html.php dosyasına yazıyoruz ki kodlarımız fazla karışık olmasın.
        */
        $this->email->message($this->load->view('iletisim-html', $data, TRUE));
        /*
        * send() fonksiyonuyla e-postayı gönderiyoruz.
        */
        if($this->email->send()) {
            return TRUE;
        } else {
            return FALSE;
        }
    }
}

Buradaki index metodunda Form_validation kütüphanesinden faydalanarak gerekli kontrolleri yapıyoruz.  Formdan gelen bilgiler eksiksiz ve hatasız ise _send_email fonksiyonu ile e-postayı gönderiyoruz. Aksi bir durumda ise view dosyamızı görüntülüyoruz.

_send_email fonksiyonunda Email kütüphanesini yükledikten sonra bu kütüphaneyi kullanmak için gerekli olan ayarları $config dizisinde tanımlayarak işleme devam ediyoruz. $data dizisinden gelen verilerle gerekli atamaları yaptıktan sonra e-postayı gönderiyoruz. Kodların daha düzenli durması için application/views dizinine iletisim-html.php isimli bir dosya oluşturarak  gönderilecek mesajın sabit html kodlarını buraya kaydediyoruz. Bu fonksiyon e-posta gönderimi başarılı olursa TRUE, başarısız olursa ise FALSE döndürüyor. Bizde dönen değere göre kullanıcıya gönderildi veya gönderilemedi bilgisini veriyoruz.

İletişim formumuzun bulunacağı iletisim.php dosyamızı aşağıdaki gibi hazırlayıp application/views dizinine kaydediyoruz.


<?php
// Form alanlarını oluşturmak için form yardımcısını kullanacağız. Bu alanlar için kullanacağımız özellikleri tanımlıyoruz.
$email = array(
    'name'    => 'email',
    'id'    => 'email',
    'value'    => set_value('email'),
    'maxlength'    => 80,
    'size'    => 30,
);
$name = array(
    'name'    => 'name',
    'id'    => 'name',
    'value'    => set_value('name'),
    'maxlength'    => 50,
    'size'    => 30,
);
$message = array(
    'name'    => 'message',
    'id'    => 'message',
    'value' => set_value('message'),
    'rows'    => 10,
    'cols'    => 30,
);?>
<html>
<head>
<title>CodeIgniter İletişim Formu</title>
<style type="text/css">
body { background-color: #fff; margin: 40px; font-family: Lucida Grande, Verdana, Sans-serif; font-size: 14px; color: #4F5155;}
a { color: #003399; background-color: transparent; font-weight: normal;}
h1 { color: #444; background-color: transparent; border-bottom: 1px solid #D0D0D0; font-size: 16px; font-weight: bold; margin: 24px 0 2px 0; padding: 5px 0 6px 0;}
form {width:600px;}
form label { width:28%; display:block; float:left; margin:2px; cursor:pointer;}
form input[type="text"],
form textarea{ width:70%; display:block; float:left; margin:2px;}
form input[type="submit"]{margin:2px 2px 2px 28%;}
</style>
</head>
<body>
<?php echo form_open($this->uri->uri_string()); ?>
<?php echo form_fieldset('İletişim Formu'); ?>
<div class="type-text">
    <?php echo form_label('İsim', $name['id']); ?>
    <?php echo form_input($name); ?>
    <?php echo form_error($name['name']); ?>
</div>
<div class="type-text">
    <?php echo form_label('E-Posta Adresi', $email['id']); ?>
    <?php echo form_input($email); ?>
    <?php echo form_error($email['name']); ?>
</div>

<div class="type-text">
    <?php echo form_label('Mesajınız', $message['id']); ?>
    <?php echo form_textarea($message); ?>
    <?php echo form_error($message['name']); ?>
</div>

<?php echo form_submit('send', 'Gönder'); ?>
<?php echo form_fieldset_close();?>
<?php echo form_close(); ?>
</body>
</html>

Görüldüğü gibi bu dosya iletişim formumuz için gerekli olan html kodlarını barındırıyor.

Son olarak gönderilen e-postanın sabit html kodlarını içeren iletisim-html.php dosyasını application/views dizinine aşağıdaki kodları ekleyerek kaydediyoruz.


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><title>İletişim Formu'ndan Mesaj Var!</title></head>
<body>
<div style="max-width: 800px; margin: 0; padding: 30px 0;">
<table width="80%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="5%"></td>
<td align="left" width="95%" style="font: 13px/18px Arial, Helvetica, sans-serif;">
<h2 style="font: normal 20px/23px Arial, Helvetica, sans-serif; margin: 0; padding: 0 0 18px; color: black;">
İletişim Formu üzerinden yeni mesaj aldınız!</h2>
    <b>Gönderen : </b> <?php echo $name;?><br>
    <b>E-Posta Adresi : </b> <?php echo $email;?><br>
    <b>Tarih : </b> <?php echo date('d-M-Y',time());?><br>
    <b>Mesaj : </b>
    <?php echo $message;?>
</td>
</tr>
</table>
</div>
</body>
</html>

İletişim Formu uygulamasının kodlarını indirmek için tıklayın.

Bu yazı en son 18 Şubat 2011 tarihinde düzenlenmiştir ve güncelliğini yitirmiş olabilir.

  • Nihat Gürsoy

    Teşekkürler güzel bir ders olmuş. Webteders'in kurucusu İbrahim hızlıoğlu da codeigniter eğitim seti çıkarmış oldukça faydalı.

  • Problem

    Elimde aynı mantıkla oluşturulmuş bir form var. Form maile giderken sadece tek bir sunucu üzerindeki mailler çalışıyor. Farklı bir maile görmüyor. Yani navruz@navruz.net mailin de çalışıyor ya da n@navruz.net mailin de çalıyor. Fakat n@deneme.com mailinde çalışmıyor. Bu sorunu nasıl düzeltebilirim ?

blog comments powered by Disqus

© Mustafa Navruz 2011 0.0192 sn.

^ Başa Dön