folder Tahribat.com Forumları
linefolder Html - CSS - XML - JavaScript - Ajax
linefolder PHP Ve Jquery İle AJAX Tabanlı İletişim Formu



PHP Ve Jquery İle AJAX Tabanlı İletişim Formu

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    JohnD
    JohnD's avatar
    Banlanmış Üye
    Kayıt Tarihi: 19/Ekim/2008
    Erkek

    Bir formun aynı sayfada nasıl yollanacağını ve gönderi sonucunun bir kaç şık efektle nasıl gösterileceğini mi merak ediyorsunuz? Bu anlatımda bu işlemleri jQuery kullanarak nasıl yapabileceğiniz anlatılacak. Üstelik kullanıcının javascript desteği açık olmasa bile, form gönderim yapabilecek.

    AJAX teknolojisinin güzelliklerinin nasıl olsa biliyorsunuz. O halde formumuzu nasıl kodlayacağımıza geçelim.
    Oluşturacağımız form, kullanıcı gönderilerini kabul edecek, gönderileri işleyecek ve verileri process.php adlı bir dosyaya gönderecek. PHP betiği ise alıcıya bir uyarı postası gönderecek. Formu kullanacak olan kullanıcının javascript desteğinin kapalı olması ihtimali de göz önüne alınarak, form klasik yolla da işlenebilecek.

    1.HTML
    Bu bölümde iletişim formumuzun görünür kısmını oluşturuyoruz.

    <div class="block">
    <div class="done">
    <b>Teşekkür ederiz !</b> Mesajınız tarafımızdan alınmıştır.
    </div>
    <div class="form">
    <form method="post" action="process.php">
    <div class="element">
    <label>Adınız</label>
    <input type="text" name="name" class="text" />
    </div>
    <div class="element">
    <label>E-Posta</label>
    <input type="text" name="email" class="text" />
    </div>
    <div class="element">
    <label>Websiteniz</label>
    <input type="text" name="website" class="text" />
    </div>
    <div class="element">
    <label>Mesajınız</label>
    <textarea name="comment" class="text textarea" /></textarea>
    </div>
    <div class="element">
    		<input type="submit" id="submit"/>
    <div class="loading"></div>
    </div>
    </form>
    </div>
    </div>
    <div class="clear"></div>
     
    2.CSS
    Formumuzu 2 kolonlu olarak oluşturmak için CSS’ten faydalanıyoruz.
    body{text-align:center;}
     
    .clear {clear:both}
     
    .block {
    width:400px;
    margin:0 auto;
    text-align:left;
    }
    .element * {
    padding:5px;
    margin:2px;
    font-family:arial;
    font-size:12px;
    }
    .element label {
    float:left;
    width:75px;
    font-weight:700
    }
    .element input.text {
    float:left;
    width:270px;
    padding-left:20px;
    }
    .element .textarea {
    height:120px;
    width:270px;
    padding-left:20px;
    }
    .element .hightlight {
    border:2px solid #9F1319;
    background:url(iconCaution.gif) no-repeat 2px
    }
    .element #submit {
    float:right;
    margin-right:10px;
    }
    .loading {
    float:right;
    background:url(ajax-loader.gif) no-repeat 1px;
    height:28px;
    width:28px;
    display:none;
    }
    .done {
    background:url(iconIdea.gif) no-repeat 2px;
    padding-left:20px;
    font-family:arial;
    font-size:12px;
    width:70%;
    margin:20px auto;
    	display:none
    }

     

    3.JAVASCRIPT
    En sonunda işin sihirli kısmı olan Javascript kodumuz. Kodun hangi kısmının ne işe yaradığını göstermek için kodlara yorum satırları eklenmiştir.
    Bu bölümümzde Javascript kullanarak e-posta, isim ve uzunluk onayları gibi işlemlerimizi yapıyoruz.
    Kodun yaptıklarını kısaca açıklayacak olursak:

    • Kullanıcı girdilerini alır
    • Girdileri kontrol eder, hata varsa ekrana bastırır ve işlemi durdurur
    • Hiçbir hata yoksa, giriş kısımları pasifleştirilir ve veri jQuery’nin AJAX metoduyla yollanır
    • jQuery veriyi process.php adlı dosyamıza GET metoduyla yollar
    • process.php 1 ve 0 olmak üzere 2 sonuç döndürür. Sonuç 1 ise posta başarıyla gönderilmiş, 0 ise gönderilememiş demektir
    • Başarılı olunması durumunda form gizlenilir ve bir uyarı mesajı ekrana yazdırılır

     

     

    $(document).ready(function() {
     
    //gönder butonu tıklanmışsa
    $('#submit').click(function () {
     
    //Tüm alanlardan verileri al
    var name = $('input[name=name]');
    var email = $('input[name=email]');
    var website = $('input[name=website]');
    var comment = $('textarea[name=comment]');
     
    //Kullanıcının birşeyler girip girmediği kontrol ediliyor
    //Hata bulunursa girdi alanına uyarı verdir
    if (name.val()=='') {
    name.addClass('hightlight');
    return false;
    } else name.removeClass('hightlight');
     
    if (email.val()=='') {
    email.addClass('hightlight');
    return false;
    } else email.removeClass('hightlight');
     
    if (comment.val()=='') {
    comment.addClass('hightlight');
    return false;
    } else comment.removeClass('hightlight');
     
    //veriyi düzgünce organize et
    var data = 'name=' + name.val() + '&email=' + email.val() + '&website='
    + website.val() + '&comment=' + encodeURIComponent(comment.val());
     
    //tüm girdi alanlarını pasifleştir
    $('.text').attr('disabled','true');
     
    //yükleniyor işaretini göster
    $('.loading').show();
     
    //ajax işlemini başlat
    $.ajax({
    //veriyi işleyen ve postayı gönderecek olan php dosyası
    url: "process.php",
     
    //GET metodu kullanılıyor
    type: "GET",
     
    //veriyi yolla
    data: data,
     
    //sayfayı önbelleğe alma
    cache: false,
     
    //işlem başarılı
    success: function (html) {
    //eğer process.php 1/true değerini döndürmüşse (mail gönderimi başarılı)
    if (html==1) {
    //formu gizle
    $('.form').fadeOut('slow');
     
    //başarılı mesajını göster
    $('.done').fadeIn('slow');
     
    //eğer process.php 0/false değerini döndürmüşse (posta gönderiminde hata)
    } else alert('Üzgünüz, beklenmeyen bir hata oluştu. Lütfen daha sonra tekrar deneyiniz.');
    }
    });
     
     		//gönder butonunu iptal et
    return false;
    });
    });
    4.PHP

    Bu PHP dosyamız farklı türdeki gönderileri işleyebilir (POST ve GET).
    Eğer kullanıcı formu jQuery aracılığı ile göndermişse process.php
    verileri GET metodunu kullanarak alacaktır. Eğer kullanıcının javascript deteği kapalıysa, veriler POST metoduyla alınacaktır.
    <?php
     
    //Form verilerini al.
    //GET - kullanıcı veriyi AJAX kullanarak gönderdi
    //POST - kullanıcının javascript deteğinin olmadığınıda göz önüne alarak POST metodunu da kullanıyoruz
    $name = ($_GET['name']) ? $_GET['name'] : $_POST['name'];
    $email = ($_GET['email']) ?$_GET['email'] : $_POST['email'];
    $website = ($_GET['website']) ?$_GET['website'] : $_POST['website'];
    $comment = ($_GET['comment']) ?$_GET['comment'] : $_POST['comment'];
     
    //hangi metodun kullanıldığına dair belirteç. Eğer POST kullanılmış ise değeri 1 yap
    if ($_POST) $post=1;
     
    //Sunucu taraflı veri kontrolü
    //E-Posta adresi kontrolü
    if (!$name) $errors[count($errors)] = 'Lutfen adinizi giriniz.';
    if (!$email) $errors[count($errors)] = 'Lutfen e-posta adresinizi giriniz.';
    if (!$comment) $errors[count($errors)] = 'Lutfen mesajinizi giriniz.';
     
    //eğer hata dizisi boş ise postayı gönder
    if (!$errors) {
     
    //alıcı - bu bölümü kendi adınız ve posta adresiniz ile değiştirin
    $to = 'Your Name <your@email.com>';
    //Gönderen
    $from = $name . ' <' . $email . '>';
     
    //Başlık ve mesaj
    $subject = $name . ' adlı kullanıcıdan bir mesaj var';
    $message = '
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head></head>
    <body>
    <table>
    <tr><td>Ad</td><td>'
    . $name . '</td></tr>
    <tr><td>E-Posta</td><td>'
    . $email . '</td></tr>
    <tr><td>Websitesi</td><td>'
    . $website . '</td></tr>
    <tr><td>Mesaj</td><td>'
    . nl2br($comment) . '</td></tr>
    </table>
    </body>
    </html>'
    ;
     
    //postayı gönder
    $result = sendmail($to, $subject, $message, $from);
     
    //POST metodu kullanılmışsa, mesajı göster
    if ($_POST) {
    if ($result) echo 'Teşekkür ederiz! Mesajınız tarafımızdan alınmıştır.';
    else echo 'Üzgünüz, beklenmeyen bir hata oluştu. Lütfen daha sonra tekrar deneyiniz.';
     
    //GET metodu kullanılmışsa, gerekli değeri döndür
    //1 başarılı, 0 ise başarısız anlamına gelir
    } else {
    echo $result;
    }
     
    //Hata dizisi boş değil ise
    } else {
    //hata mesajlarını göster
    for ($i=0; $i<count($errors); $i++) echo $errors[$i] . '<br/>';
    echo '<a href="form.php">Geri dön</a>';
    exit;
    }
     
     
    //HTML başlıklarıyla basit bir mail fonksiyonu
    function sendmail($to, $subject, $message, $from) {
    $headers = "MIME-Version: 1.0" . "\r\n";
    $headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n";
    $headers .= 'From: ' . $from . "\r\n";
     
    $result = mail($to,$subject,$message,$headers);
     
    if ($result) return 1;
    else return 0;
    }
    ?>
     
    Kodları indirmek için buraya, makalenin aslını okumak için şuraya tıklayabilirsiniz. 
     

    DOM..
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    JohnD
    JohnD's avatar
    Banlanmış Üye
    Kayıt Tarihi: 19/Ekim/2008
    Erkek

    örnek:

    http://www.queness.com/resources/html/ajaxform/jquery-ajaxform.php


    DOM..
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    emnimax
    emnimax's avatar
    Kayıt Tarihi: 29/Eylül/2009
    Erkek
    eline saglık yararlı paylasım.
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    GusFring
    GusFring's avatar
    Kayıt Tarihi: 24/Haziran/2009
    Erkek
    Teşekkürler.Göze hoş gözüküyor.

    Bundan 2300 yıl kadar önce Çinli filozof Chuang Tzu, rüyasında bir kelebek olduğunu görmüş ve uyandıktan sonra şu soru üzerine düşünmüştü: Chuang Tzu kimliğimle, kendimi rüyamda bir kelebek olarak mı görmüş olduğumu, yoksa aslında şu anki kelebek kimliğimle kendimi rüyamda Chuang Tzu adlı bir adam olarak mı görmekte olduğumu nasıl ayırt edebilirim?
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    camarade
    ontedi
    ontedi's avatar
    Kayıt Tarihi: 04/Eylül/2005
    Erkek
    Teşekkürler. Asp olanını da bir ara ben yayınlarım :).

    Matematikçi ve Yazılımcı. http://www.ontedi.com ve http://www.cizgi.site Siteme beklerim herkesi.
Toplam Hit: 2835 Toplam Mesaj: 5