PHP'de bir geri bildirim formu oluşturuyoruz. Kalite kontrol departmanı Formun modal pencerede çağrılması

Merhaba arkadaşlar! Formlardan e-postaya veri göndermek için evrensel bir komut dosyasını dikkatinize sunmak istiyorum. Komut dosyası, Açılış Sayfası, kartvizit siteleri vb. siteler için idealdir. Geribildirim Formları komut dosyamız, sınırsız sayıda formu farklı alanlarla tek bir sayfada bağlama ve birden fazla alıcıya mektup gönderebilme yeteneğiyle İnternet'teki diğer komut dosyaları arasında öne çıkıyor.

Bu yüzden. Başlayalım. Komut dosyasının yetenekleriyle başlayalım.

  • Sınırsız sayıda formu tek bir sayfaya bağlayın.
  • Alanların doğru doldurulup doldurulmadığı kontrol ediliyor.
  • Bildirimleri ayarlama.
  • Her form için harf kullanma yeteneği.
  • Harf türü - (html etiketleri kullanılıyorsa)
  • Sınırsız sayıda adrese gönderim.
  • Her formun bireysel olarak kişiselleştirilmesi.
  • Komut dosyası, sayfayı yeniden yüklemeden çalışır.
  • Spam botlara karşı koruma.
  • İlk kurulum.
    Betik kütüphaneye dayalı olarak çalışıyor, bu yüzden yapmamız gereken ilk şey onu bağlamak. Bunu yapmak için Google Tarafından Barındırılan Kütüphaneleri kullanmanızı öneririm.

    Kalan dosyalar hakkında daha ayrıntılı olarak konuşalım:

    Feedback.js, AJAX formunun gönderilmesinden sorumlu olan ana komut dosyasıdır.
    jquery.arcticmodal.js,
    jquery.arcticmodal. - formları kalıcı bir pencerede görüntüleme olanağı sağlar.
    jquery.jgrowl.js,
    jquery.jgrowl.css - sayfada bildirimleri görüntülemenize olanak tanır (sayfanın üst köşesindeki bloklar).

    HTML ve gerekli özellikler.
    Tüm form öğeleri için gerekli bir özellik, sonraki form özelleştirmesi için gerekli olan name = "" özelliğidir.
    Bir düğme için (type='button'') class='feedback' belirtmeniz gerekir. Ayrıca “feedback” sınıfına sahip herhangi bir HTML etiketinin buton görevi görebileceğine de dikkatinizi çekmek isterim: Kalıcı pencerede form çağırmak Kalıcı pencerede form çağırmak için öncelikle bir eylem tanımlamanız gerekir. herhangi bir etikete tıklamak için, örneğin modal_btn sınıfına sahip bir div
    Kalıcı pencerede bir form çağırma $(document).ready(function() ( $(document).on("click", ".modal_btn", function())( $("#small-modal").arcticmodal (); )); ));
    Formun yalnızca kalıcı pencerede görünmesi gerektiğinden, onu style='display: none;' özniteliğine sahip bir div'e yerleştirerek gizlenmesi ve ayrıca kalıcı pencereyi biçimlendirmek için birkaç standart div'e sarılması gerekir.
    X

    Böylece formları E-postaya göndermek için komut dosyamızı bağlamaya yönelik temel ayarları bulduk. Şimdi içeriye bir göz atalım ve alanları, bildirimleri ve diğer her şeyi nasıl yapılandıracağımızı bulalım.

    Bir form için ayar örneği Tüm formların ayarları, geribildirim\index.php dosyasında saklanır
    $form["form-1"] = array("fields" => array("name" => array("title" => "Name", "validate" => array("preg" => "%% ", "minlength" => "3", "maxlength" => "35",), "mesajlar" => array("preg" => "[ %1$s ] alanı bir hata içerebilir", "minlength " => "Minimum alan uzunluğu [ %1$s ] izin verilenden daha az - %2$s", "maxlength" => "Maksimum alan uzunluğu [ %1$s ] izin verilenden daha büyük - %2$s", ))), "tell " => array("başlık" => "Telefon", "validate" => array("preg" => "/^((8|\+)[\- ]?)?(\ (?\d( 3)\)?[\- ]?)?[\d\- ](5,10)$/", "minimum uzunluk" => "5",), "mesajlar" => dizi( "preg" => "[ %1$s ] alanı bir hata içerebilir", "minlength" => "[ %1$s ] alanının minimum uzunluğu izin verilen uzunluktan - %2$s daha az",) ), "cfg" => array(" charset" => "utf-8", "subject" => "E-postanın konusu", "title" => "E-postanın gövdesindeki başlık", " ajax" => true, "doğrula" => true, "from_email" = > " [e-posta korumalı]", "from_name" => "noreply", "to_email" => " [e-posta korumalı], [e-posta korumalı]", "to_name" => "noreply1, noreply2", "geoip" => true, "referer" => true, "type" => "html", "tpl" => true, "antispam" => "email77 ", "antispamjs" => "address77", "tamam" => "Mesaj gönderildi - tamam", "fuck" => "Mesaj gönderildi - HATA", "spam" => "Spam robotu", "bildir" => "renk-modal-metin kutusu", "usepresuf" => false)); // Sonraki form $form["form-2"] = dizi("alanlar" => dizi(.....
    Yeni bir formun ayarlarını eklemek için, yeni bir $form[""] dizisi oluşturmak üzere $form["form-1"] dizisinin örneğini izlemeniz gerekir.

    Gerekli name="" özelliği hakkında söylediklerimi hatırlıyor musunuz?

    Tüm form öğeleri için gerekli bir özellik, sonraki form özelleştirmesi için gerekli olan name = "" özelliğidir.
    Bu yüzden size neden hala ihtiyaç duyulduğunu söylemenin zamanı geldi.
    name="" dizinin alfasayısal anahtarıdır, $form[""] dizisi için benzersiz olmalıdır

    Anlaşılırlık için örnek html kodu

    Şimdi dizileri ve ne için gerekli olduklarını anlayalım.

    $form["form-1"] = dizi();
    $form["form-2"] = dizi(); vesaire.
    Bunlar her yeni form için aşağıdakileri içeren ana dizilerdir:

  • "alanlar" => dizi(); - Form öğeleri için bir dizi ayar.
    • "isim" => dizi(); - Bir dizi ayar içeren form öğesi ayarları dizisi (örneğin giriş adı = "ad" türü = "metin").
      • "title" => "Adınız" - form öğesinin adı, hata durumunda veya şablonda görüntülenecektir
      • "doğrula" => dizi(); - dizi, form öğesi doğrulama kurallarını içerir
        • "preg" => "%%" - normal ifade
        • "minlength" => "3" - minimum alan boyutu
        • "maxlength" => "35" - maksimum alan boyutu
        • "substr" => "35" - her zaman N karaktere kes
      • "mesajlar" => dizi(); - doğrulama mesajlarını içeren bir dizi, yani:
        • "preg" => "Form öğesi normal ifadeyle eşleşmiyor"
        • "minlength" => "[ %1$s ] alanının minimum uzunluğu kabul edilebilir değerden daha az - %2$s" - doğrulama hatası, anahtar (preg) doğrulama anahtarıyla eşleşmiyor
        • "maxlength" => "[ %1$s ] alanının maksimum uzunluğu izin verilen sınırı aşıyor - %2$s" - doğrulama hatası, anahtar (preg) doğrulama anahtarıyla eşleşmiyor
  • "cfg" => dizi(); - Bir dizi form ayarı.
    • "karakter kümesi" => "utf-8" - kodlama
    • "konu" => "Mektubun konusu", - Mektubun konusu
    • "title" => "Başlık mektubun gövdesindedir", - Başlık mektubun gövdesindedir
    • "ajax" => true, - bu Ajax TODO formudur (gerekmiyorsa false olarak ayarlayın)
    • "validate" => true, - (true) eğer sunucudaki formu doğrulamak istiyorsak, js doğrulamasını "ajax" => true ile değiştirir. Kapalıyken (yanlış), doğrulama alanı ayarlarını yapmanız gerekmez. YAPMAK
    • "from_email" => "myemail", - gönderen, alan adını belirtin (isim = "myemail") ve kullanıcıdan bir e-postaya ihtiyacınız yoksa, o zaman bir taslak [e-posta korumalı]
    • "from_name" => "myname", - gönderen, alan adını belirtin (name=myname") ve bir kullanıcı adına ihtiyacınız yoksa Yanıt yok koçanı
    • "to_email" => " [e-posta korumalı]", - alıcının e-posta adresi. Birden fazla adrese göndermek için bunları virgülle ayırarak listeleyin. Örnek ("to_email" => " [e-posta korumalı], [e-posta korumalı], [e-posta korumalı]",)
    • "to_name" => "noreply1", - Alıcı adı. Birden fazla adrese gönderirken alıcıların adlarını virgülle ayırarak listeleyin. Örnek ("to_name" => "noreply1, noreply2, noreply3",)
    • "geoip" => true, - TODO türünü kullanarak konumu bulun
    • "referer" => false, - formun gönderildiği sayfanın URL'sini ekleyin
    • "type" => "plain", - letter type - plain, html (html etiketleri kullanılıyorsa)
    • "tpl" => false, - bir harf şablonu kullanın. Doğruysa, şablon dosyası klasördeki form adına (isim = "form-1") uygun olarak bağlanacak ve dosya (feedback/tpl/form-1.tpl) işlenecektir, aksi takdirde her şey olduğu gibi gönderilir, her alan yeni bir satırdadır
    • "antispam" => "email77", - Anti spam, yöntem gizli (display:none) bir alanı temel alır ve bu alanı yalnızca robot otomatik olarak doldurarak kendini ele verir.
    • "antispamjs" => "address77", - Anti spam yöntemi, başlangıçta doldurulmuş, sayfa yüklendiğinde javascript'i otomatik olarak temizleyen gizli (display:none) bir alanı temel alır, akıllı bir robot bile bunu tahmin edemez ve sonra açılır. engellendi.
    • "tamam" => "Kullanıcıya mesaj", - Form başarıyla gönderildiyse kullanıcıya mesaj görüntülenir, html etiketlerini kullanabilirsiniz.
    • "fuck" => "Kullanıcıya mesaj", - Formu gönderirken bir hata oluştuğunda kullanıcıya gösterilen mesaj, html etiketlerini kullanabilirsiniz.
    • "spam" => "Kullanıcıya mesaj", - Kullanıcıya mesaj, eğer bir spam robotundan şüpheleniliyorsa görüntülenir, html etiketlerini kullanabilirsiniz.
    • "notify" => "renk-modal", - ne tür bildirimlerin gösterileceği, metin kutusu - sayfanın üst köşesinde bloklar, formda renk - renk vurgulaması, modal - sayfanın ortasında kalıcı pencere, yok - devre dışı bırakmak. Örnek olarak şunları birleştirebilirsiniz: color-modal - alanları vurgulamayla doldurmadaki hatalar ve TODO kalıcı penceresindeki metin gönderme durumu
    • "usepresuf" => false - Mektubun konusuna veya başlığına özel bir ekleme kullanılıp kullanılmadığı, küçük bir değişiklik durumunda örneğin %%cfg.title.suffix%% belirtebilirsiniz, bunun için şunun olması gerekir: formda gizli bir alan; daha fazla ayrıntı için bkz. f -qiu presuf()
  • Mektup şablonlarının ayarlanması Yani. Şimdi mesajlarımızın konusuna bakalım.
    Öncelikle formun şablon olarak gönderilebilmesi için form ayarlarında şablon dosyasının kullanımını etkinleştirmeniz gerekir - "tpl" => true,
    İkinci olarak, formun ismine (name=”form-1”) uygun olarak klasör içerisinde (feedback/tpl/) *.tpl uzantılı bir şablon dosyası oluşturmanız gerekmektedir.

    Örnek: (geribildirim/tpl/form-1.tpl)

    E-postanın gövdesindeki başlık
    %%isim başlığı%% %%isim.değer%%
    %%tell.title%% %%tell.value%%

    isim, söyle, vb. - Bunlar, kullanıcının doldurduğu alanların özellikleridir (name="").
    başlık - Form öğesi ayarları dizisinde ayarlanan form öğesinin adı.
    değer - Form öğesinin değeri.

    Bugünlük bu kadar, ancak senaryo kesinlikle mükemmel değil, bu nedenle hataların yorumlarını ve açıklamalarını memnuniyetle karşılıyoruz ve gelecek sürümlerde düzeltilecektir.

    Not: Senaryo ekip tarafından geliştirildi

    Bir web projesinin geliştirilmesi için ziyaretçilerden geri bildirim almak çok önemlidir. Ne yazık ki birçok web sitesinde geliştiricilere mesaj gönderme yeteneği ya hiç sağlanmıyor ya da oldukça ciddi zorluklarla ilişkilendiriliyor.

    Bugün bu soruna basit bir çözüm yapacağız. JQuery, PHP ve PHPMailer sınıfını kullanan form, kullanıcının teklifini doğrudan gelen kutunuza gönderir.

    HTML

    HTML işaretlemesiyle başlayalım. Stiller belgenin üst kısmında, JavaScript dosyaları ise alt kısmında bulunur. Bu, sayfa yükleme sürecini optimize eder, böylece komut dosyaları en son yüklenir ve kullanıcının sayfa içeriğini görmesine olanak tanır.

    demo.html

    PHP ve jQuery kullanarak geri bildirim formu | Web sitesi web sitesi için demo

    Yanıt almak istiyorsanız lütfen iletişim bilgilerinizi ekleyin.

    Göndermek

    İçeri vücut bulunan div#geri bildirim. Eğitimin CSS bölümünde görüleceği gibi, sabit bir konumlandırma kullanılarak pencerenin sağ alt kısmına yerleştirilir.

    Bunun içinde div beş renkli öğe yerleştirildi açıklık. Her biri %20 genişliğe sahiptir ve sola kaydırılmıştır. Bu şekilde tam olarak tüm genişliğe yerleştirilirler. div#geri bildirim.

    Daha sonra başlığı, metin alanını ve düğmeyi içeren .section kapsayıcısı gelir.

    CSS

    Formun stillerini ayarlamaya geçelim. Öncelikle stil sayfasının yapısının nelerden oluştuğuna dair birkaç söz söyleyelim. Aşağıdaki CSS tanımlarına bakarsanız her kuralın #feedback ile başladığını fark edeceksiniz. Bu, CSS'de benzer bir ad alanı oluşturarak mevcut bir web sitesine çakışma olmadan kod eklemeyi kolaylaştırır.

    stiller.css - Bölüm 1

    #feedback( arka plan rengi:#9db09f; genişlik:310px; yükseklik:330px; konum:sabit; alt:0; sağ:120px; kenar boşluğu-alt:-270px; z-index:10000; ) #feedback .section( arka plan :url("img/bg.png") tekrar-x üst sol; border:1px katı #808f81; border-bottom:none; dolgu:10px 25px 25px; ) #feedback .color( float:left; height:4px; genişlik:20%; taşma:gizli; ) #feedback .color-1( arka plan rengi:#d3b112;) #feedback .color-2( arka plan rengi:#12b6d3;) #feedback .color-3( arka plan rengi :#8fd317;) #feedback .color-4( arka plan rengi:#ca57df;) #feedback .color-5( arka plan rengi:#8ecbe7;) #feedback h6( arka plan:url("img/feedback.png" ) tekrar yok; yükseklik:38px; kenar boşluğu:5px 0 12px; metin girintisi:-99999px; imleç:işaretçi; ) #feedback textarea( arka plan rengi:#fff; kenarlık:yok; renk:#666666; yazı tipi:13px "Lucida Sans", Arial, sans-serif; yükseklik:100px; dolgu:10px; genişlik:236px; yeniden boyutlandırma:yok; taslak:yok; taşma:otomatik; -moz-box-shadow:4px 4px 0 #8a9b8c; -webkit -kutu-gölge:4px 4px 0 #8a9b8c; kutu gölgesi:4px 4px 0 #8a9b8c; )

    Stillendirilecek ilk öğe div#geri bildirim. Sabit bir konum atanır ve tarayıcı penceresine sabitlenir. Bundan sonra tanımı gelir div .bölüm ve beş renkli element açıklık. Bu öğeler yalnızca her sınıf için ayrı ayrı atanan arka plan renginde farklılık gösterir.

    CSS dosyasının sunulan kısmının en altında metin alanının görüntülenmesine ilişkin kurallar tanımlanmıştır.

    stiller.css - Bölüm 2

    #feedback a.submit( arka plan:url("img/submit.png") tekrarlama yok; kenarlık: yok; ekran: blok; yükseklik: 34 piksel; kenar boşluğu: 20 piksel otomatik 0; metin dekorasyonu: yok; metin girintisi: -99999px; genişlik:91px; ) #feedback a.submit:hover( arka plan konumu:sol alt; ) #feedback a.submit.working( arka plan konumu:sağ üst !important; imleç:varsayılan; ) #feedback .message ( font-family:Corbel,Arial,sans-serif; color:#5a665b; text-shadow:1px 1px 0 #b3c2b5; marj-bottom:20px; ) #feedback .arrow( arka plan:url("img/arrows.png) ") tekrarlama yok; kayan nokta:sağ; genişlik:23 piksel; yükseklik:18 piksel; konum:göreli; üst:10 piksel; ) #feedback .arrow.down( arka plan konumu:sol üst;) #feedback h6:hover .down( arka plan konumu:sol alt;) #feedback .arrow.up( arka plan konumu:sağ üst;) #feedback h6:hover .up( arka plan konumu:sağ alt;) #feedback .response( font-size:21px; kenar boşluğu:70 piksel; metin hizalama: merkez; metin gölgesi:2px 2px 0 #889889; renk:#FCFCFC; görüntüleme:blok; )

    Stil sayfasının ikinci kısmı gönder düğmesinin görünümünü tanımlar. Arka plan görüntüsü için görüntülerin tek bir dosyada yer aldığı üç düğme durumu bulunduğunu unutmayın - gönder.png. Yalnızca gerektiğinde görüntülenirler.

    jQuery

    Geri bildirim formunun iki durumu vardır: simge durumuna küçültülmüş ve maksimum. Önyükleme sırasında varsayılan durum, ekranın sağ alt kısmında simge durumuna küçültülmüş duruma ayarlanır. Ve jQuery, kullanıcı başlığa tıkladığında formu maksimum durumuna getirir. Bu işlevsellik, bir olayı bağlayarak ve basit animasyonlar gerçekleştirerek gerçekleştirilir.

    script.js - Bölüm 1

    $(document).ready(function())( // submit.php betiğinin ilgili URL'si. // Muhtemelen değiştirmeniz gerekecektir. var submitURL = "submit.php"; // Geri bildirim nesnesini önbelleğe alın: var geribildirim = $( "#feedback"); $("#feedback h6").click(function())( // Animasyon özelliği değerleri // ayrı bir nesnede saklanır: var anim = ( mb: 0, // Alt kenar boşluğu pt: 25 // Üst dolgu); var el = $(this).find(".arrow"); if(el.hasClass("down"))( anim = ( mb: -270, pt) : 10); ) // İlk animasyon formu yukarı veya aşağı hareket ettirir ve ikincisi, // başlığını küçültülmüş versiyona hizalanacak şekilde hareket ettirir Feedback.stop().animate((marginBottom: anim.mb)); geribildirim.find(".section").stop() .animate((paddingTop:anim.pt),function())( el.toggleClass("aşağı yukarı"); )); ));

    Kodu basit ve anlaşılır tutmak için en üstte animasyona ilişkin değerleri içeren bir anim nesnesi oluşturulur ve operatör yerleştirilir. eğer. Sınıfın varlığına bağlı olarak aşağı' Ok üzerinde şekli genişletir veya daraltırız.

    İkinci kısım script.js AJAX'ın çalışmasını yönetir gönder.php.

    script.js - Bölüm 2

    $("#feedback a.submit").live("tıklayın",function())( var butonu = $(bu); var textarea = geribildirim.find("textarea"); // İşçi sınıfını kullanmıyoruz yalnızca veri gönderme düğmesi için stilleri ayarlamak için, // aynı zamanda formun birden fazla oluşturulmasını önlemek için bir tür kilit olarak da kullanılır. if(button.hasClass("working") || textarea.val().length< 5){ return false; } // Запираем форму и изменяем стиль кнопки: button.addClass("working"); $.ajax({ url: submitURL, type: "post", data: { message: textarea.val()}, complete: function(xhr){ var text = xhr.responseText; // Данная операция помогает пользователю определить ошибку: if(xhr.status == 404){ text = "Путь к скрипту submit.php неверный."; } // Прячем кнопку и область текста, после которой // мы показывали полученный ответ из submit.php button.fadeOut(); textarea.fadeOut(function(){ var span = $("",{ className: "response", html: text }) .hide() .appendTo(feedback.find(".section")) .show(); }).val(""); } }); return false; }); });

    Etkileşim için jQuery'nin AJAX $.ajax() yöntemini kullanıyoruz. gönder.php. Bu yöntem, bağlantı üzerinde $.get() ve $.post() yöntemlerinden biraz daha fazla kontrol sağlar.

    Yöntemin avantajlarından biri, nesnenin özelliklerinin "tüm" geri çağırma işlevi boyunca görünür olmasıdır. Burada uyumluluk için yanıtın durumunu kontrol ediyoruz Hata 404 - Sayfa Bulunamadı) ve kullanıcıya yolu kontrol etmesini isteyen bir mesaj görüntüleyin URL'yi gönder.

    Şimdi son kısma – PHP'ye geçme zamanı.

    PHP

    PHP, AJAX'tan gönderilen verileri işler, doğrular ve belirtilen adrese bir e-posta mesajı gönderir.

    gönder.php

    // Buraya adresinizi girmeniz gerekiyor $emailAddress = " [e-posta korumalı]"; // Taşmayı önlemek için oturumu kullanın: session_name("quickFeedback"); session_start(); // Son form 10 saniyeden daha kısa bir süre önce gönderildiyse, // veya kullanıcı zaten son saat içinde 10 mesaj gönderdiyse if($_SESSION[ "lastSubmit"] && (time() - $_SESSION["lastSubmit"]< 10 || $_SESSION["submitsLastHour"] >10))( die("Mesajı tekrar göndermeden önce lütfen birkaç dakika bekleyin."); ) $_SESSION["lastSubmit"] = time(); $_SESSION["sonsaati gönderir"]++; "phpmailer/class.phpmailer.php" gerektirir; if(ini_get("magic_quotes_gpc"))( $_POST["mesaj"] = stripslashes($_POST["mesaj"]); ) if(mb_strlen($_POST["mesaj"],"utf-8")< 5){ die("Ваше сообщение слишком короткое."); } $msg = nl2br(strip_tags($_POST["message"])); // Используем класс PHPMailer $mail = new PHPMailer(); $mail->IsMail(); // Alıcının adresini ekleyin $mail->AddAddress($emailAddress); $mail->Subject = "Geri bildirim formundan yeni e-posta"; $mail->MsgHTML($msg); $mail->AddReplyTo("noreply@".$_SERVER["HTTP_HOST"], "Demo sayfasında geri bildirim formu"); $mail->SetFrom("noreply@".$_SERVER["HTTP_HOST"], "Demo sayfasında geri bildirim formu"); $mail->Gönder(); echo "Teşekkür ederim!";

    Oturum yönetimini öncelikle bir kullanıcının son bir saat içinde bir form gönderimini ne sıklıkta kullandığını belirlemek ve ayrıca son gönderimden bu yana geçen süreyi belirlemek için kullanırız. Son göndermenin üzerinden 10 saniyeden az bir süre geçmişse veya kullanıcı zaten son saat içinde 10'dan fazla mesaj göndermişse bir hata mesajı görüntülenir.

    E-posta PHPMailer sınıfı kullanılarak gönderilir. Dikkat! Yalnızca PHP5 ile çalışır.

    Çoklu Yöntemler PHPMailer Giden e-postayı yapılandırmak için kullanılır. IsMail() yöntemi sınıfa dahili bir PHP işlevi kullanmasını söyler posta(). AddAddress() yöntemi, alıcının adresini ekler (bu yönteme ek çağrılarla birden fazla alıcı ekleyebilirsiniz). Mektubun konusu ve metni eklendikten sonra cevapların adresi belirtilir ve mesaj gönderilir.

    Hazır!

    Çözüm

    Site ziyaretçinizden hızlı geri bildirim almak için bu formu kullanabilirsiniz. Gönderimin önündeki çok düşük bir engel (sadece bir metin alanını doldurmanız ve bir düğmeye tıklamanız yeterlidir), sayfalarınızı ziyaret eden ziyaretçilerin fikirlerini paylaşmaya başlamaları için harika bir ortam yaratacaktır. Komut dosyası aynı zamanda iyi yapılandırılmıştır ve özelleştirilmesi kolaydır; bu, onu web sitenizde minimum çabayla kullanmanıza yardımcı olacaktır.

    Bu derste, PHP'de bir geri bildirim formu oluşturma ve ardından alınan verileri e-postayla gönderme örneğini kullanarak mail() işlevini tanıyacağız.

    Bunu yapmak için iki dosya oluşturacağız - forma.php ve mail.php. İlk dosya yalnızca kullanıcının veri girebileceği alanları içeren bir form içerecektir. Form etiketinin içinde bir düğme var "Göndermek" ve eylem özniteliği, düğme tıklandığında formdaki verilere erişilen mail.php işleyicisini ifade eder. "Göndermek". Örneğimizde form verileri "/mail.php" adlı bir web sayfasına gönderilmektedir. Bu sayfa form verilerini işleyen bir PHP betiği içerir:


    Form verileri POST yöntemi kullanılarak gönderilir ($_POST olarak işlenir). $_POST, geçerli betiğe POST yöntemi aracılığıyla aktarılan bir değişkenler dizisidir.

    Aşağıda, bazı web sitelerinde alanları kullanıcının kendisi tarafından doldurulan forma.php dosyasının içeriğini görüyorsunuz. Veri girişi yapılacak tüm alanların name niteliği olması gerekir, mantığa dayalı olarak değerleri kendimiz yazıyoruz.




    PHP'de e-postayla gönderilen geri bildirim formu


    PHP'de geri bildirim formu





    Mesaj bırakın:
    Adınız:



    E-posta:

    Telefon numarası:

    İleti:

    Metin alanı sınırsız sayıda karakter içerebilir-->







    Form tarayıcıda görsel olarak bu şekilde görünür.

    Daha sonra mail.php dosyasının kodunu yazıyoruz. Değişkenler için kendi isimlerimizi buluyoruz. PHP'de bir değişken $ işaretiyle ve ardından değişken adıyla başlar. Değişkenin metin değeri tırnak işaretleri içine alınır. Değişkenler kullanılarak, form öğesinin adı köşeli parantez içine (ad değeri) yerleştirilerek formun içeriği yöneticinin e-postasına gönderilir.

    Böylece $_POST dizisindeki veriler ilgili değişkenlere aktarılacak ve mail fonksiyonu kullanılarak mail'e gönderilecektir. Formumuzu doldurup gönder butonuna basalım. E-postanızı eklemeyi unutmayın. Mektup anında geldi.


    Bu makalede web siteniz için PHP'de nasıl geri bildirim formu oluşturulacağını öğreneceksiniz. Komut dosyası, kullanıcı tarafından girilen verileri işleyecek ve sonucu ihtiyacınız olan e-postaya gönderecektir. Geri bildirim formu çalıştığında PHP'de bir seçenek sunacağız ancak mektubu gönderirken bir hata oluşuyor. Bu durumda girilen tüm bilgileri bir dosyaya yazacağız.

    Öyleyse başlayalım, öncelikle sayfayı işaretleyeceğiz ve bunun için stiller yazacağız. İşaretleme, fikrimize göre kullanıcının mesajını gireceği iki giriş (telefon, posta) ve bir metin alanı içeren düzenli bir geri bildirim formu içerecektir. Form işleyicisini ayrı bir sayfaya yerleştireceğiz.

    Geri bildirim formu

    Telefonu girin:

    Mail adresiniz:

    Senin sorun:


    Stilleri yazalım:

    Html, gövde( yükseklik: %100; kenar boşluğu: 0; ) html( arka plan rengi: #fff; renk: #333; yazı tipi: 12px/14px Verdana, Tahoma, sans-serif; imleç: varsayılan; ) #feedback-form ( arka plan rengi: #ececec; kenar boşluğu: 50 piksel otomatik 0; metin hizalama: orta; genişlik: 430 piksel; dolgu: 15 piksel; ) #feedback-form h2( kenar boşluğu: 25 piksel; ) #feedback-form girişi, #feedback -form textarea( arka plan rengi: #fff; kenarlık: 1px katı #A9A9A9; dolgu: 1px 5px; genişlik: %90; ) #feedback-form girişi( yükseklik: 26px; ) #feedback-form textarea( yükseklik: 75px; dolgu-top: 5 piksel; ) #feedback-form girişi (üst kenar boşluğu: 15 piksel; arka plan rengi: #0B7BB5; kenarlık: 1 piksel katı #CCCCCC; renk: #FFFFFF; yazı tipi ağırlığı: kalın; yükseklik: 40 piksel; satır- yükseklik: 40 piksel; metin dönüşümü: büyük harf; genişlik: 225 piksel; imleç: işaretçi;)

    Tüm bu eylemlerin sonucunda şu formu alacaksınız:


    Artık sunucuyu ele almanın zamanı geldi. Komut dosyamız birkaç bölüm içerecektir:

    • Ayar;
    • İkincil işlevler;
    • Gelen verilerin işlenmesi;
    • Mesaj çıkışı.

    Elbette tüm bu parçalar koşulludur, çünkü hiç kimse bizi kodu karıştırmaktan veya tam tersine önemli parçaları başka dosyalara taşımaktan alıkoyamaz. Ancak işleyiciyi tek bir dosyada yapmanın daha iyi olduğunu düşünüyorum, böylece onu diğer projelere bağlamak daha kolay olur.

    Ayarlar

    Bu aşamada üç değişken oluşturacağız: $my_email (verilerin gönderildiği posta kutusu), $path_log (log dosyasının yolu) ve $time_back (kullanıcının siteye döndüğü saat).

    // Posta kutunuzu belirtin $my_email = " [e-posta korumalı]"; // Günlüklerin nerede saklanacağını belirtin $path_log = "log.txt"; // Kullanıcının siteye dönme süresi (sn) $time_back = 3;

    İkincil işlevler

    Burada veri işlemeyi basitleştirecek beş işlevi açıklıyoruz.

    Mesaj çıktı şablonları:

    Function error_msg($mesaj)( $message = "".$message.""; return $message; ) function başarı_msg($mesaj)( $message = "".$message.""; return $message; )

    Formdan alınan verilerin temizlenmesi:

    Function clear_data($var)( return trim(strip_tags($var)); )

    Mektup gönderiliyor:

    Function send_mail($email, $subj, $text, $from)( $headers = "Gönderen: ".$from." \r\n"; $headers .= "MIME Sürümü: 1.0\r\n"; $headers .= "Content-Type: text/html; charset=utf-8 \r\n"; $result = mail($email, $subj, $text, $headers); if(!$result)( return yanlış; ) doğruyu döndür; )

    Ve telefonu ve postayı formatlarının doğru kaydedilip kaydedilmediğini kontrol edecek son işlev.

    Function check_format($data, $type)( switch($type)( case "email": $pattern = "/^*@(+(*+)*\.)++$/i"; if(preg_match( $model, $veri))( return true; ) break; case "telefon": $model = "/^(\+?\d+)?\s*(\(\d+\))?[\s-] *([\d-]*)$/"; if(preg_match($pattern, $data))( return true; ) break; ) return false; )

    Gördüğünüz gibi yazdığımız tüm fonksiyonlar küçük boyutludur. Bunları veri işleme alanının dışında bırakabilirsiniz, ancak check_format() gibi bir şeyi değiştirmeniz veya genişletmeniz gerektiğinde, bu çok daha basit ve kullanışlı olacaktır.

    Gelen verilerin işlenmesi

    Öncelikle kullanıcının hangi sayfadan geldiğini öğreniyoruz. Daha sonra mesajlarımızın saklanacağı değişkenleri ve mektubun gönderilme durumunu tanımlıyoruz.

    // Önceki sayfayı bulun $prev_page = $_SERVER["HTTP_REFERER"]; // Mesajlarımız $msg = ""; // E-posta durumu $status_email = "";

    Şimdi kodlamayla ilgili sorunlardan kaçınmak için bunu başlığı kullanarak belirtiyoruz.

    Header("Content-Type: text/html; charset=utf-8");

    If($_SERVER["REQUEST_METHOD"] == "POST")( if(isset($_POST["number"], $_POST["e-posta"], $_POST["soru"]))( $number = clear_data ($_POST["sayı"]); $email = clear_data($_POST["e-posta"]); $soru = clear_data($_POST["soru"]); if(check_format($number, "telefon") && check_format($e-posta, "e-posta") && !empty($soru))( // Bir harf oluştur $e_title = "Yeni mesaj"; $e_body = ""; $e_body .= ""; $e_body .= "Телефон: ".$number; $e_body .= "!}
    "; $e_body .= "Posta: ".$e-posta; $e_body .= "
    "; $e_body .= "Soru: ".$soru; $e_body .= ""; $e_body .= ""; // END Bir mektup oluştur if(send_mail($my_email, $e_title, $e_body, $prev_page) ) ( $status_email = "başarılı"; $msg = başarı_msg("Sorunuz için teşekkür ederiz.
    Size en kısa sürede cevap vereceğiz."); )else( $status_email = "hata"; $msg = error_msg("E-posta gönderilirken bir hata oluştu."); ) // Dosyaya yaz $str = " Time: ".date ("d-m-Y G:i:s")."\n\r"; $str .= "Telefon: ".$numarası."\n\r"; $str .= "Posta: " .$email." \n\r"; $str .= "Soru: ".$soru."\n\r"; $str .= "E-posta: ".$status_email."\n\r"; $ str .= "= =======================================\n\r"; file_put_contents ($path_log, $str, FILE_APPEND); )else( $msg = error_msg( "Formu doğru şekilde doldurun!"); ) )else( $msg = error_msg("Bir hata oluştu!"); ) )else( çıkış ;)

    Yazılı kodda formun gönderilip gönderilmediğini belirliyoruz, aksi halde çıkış fonksiyonunu kullanarak bu dosyayı kapatıyoruz. Daha sonra POST dizisindeki verilerimizle hücrelerin varlığını kontrol ediyoruz, eğer gelirlerse onları olası çöplerden temizliyoruz. Temizledikten sonra posta ve telefon formatlarını ve soru değişkeninde metin olup olmadığını kontrol ediyoruz. Daha sonra bir mektup oluşturuyoruz, gönderiyoruz ve günlükler yazıyoruz; burada verilere ek olarak mektubun gönderilme durumunu da kaydediyoruz. Bu şekilde mail() fonksiyonunun çalışmasını takip edebiliriz ve aynı zamanda veri kaybı yaşamayız.

    Mesaj çıkışı

    Tek yapmamız gereken, işlemin başarılı ya da "başarısız" tamamlandığını kullanıcıyı bilgilendirmek ve formla birlikte siteye geri göndermektir. Bunu yapmak için PHP betiği içeren işaretlemeyi kullanırız.

    Kullanıcıyı siteye geri yönlendirmek için, önceden oluşturulmuş değişkenlerle birlikte PHP kodunu eklediğimiz yenileme meta etiketini kullanacağız. Ayrıca sayfayı biraz daha dinamik hale getirmek için biraz JavaScript kullanmamız gerekecek. Yeniden yönlendirmeden önceki saniyeleri ters sırada sayacak timeBack() fonksiyonunu yazıyoruz.

    Fok
    Konunun devamı:
    Yönlendiriciler

    Okuma süresi: 5 dakika Bu yazıda Android telefonlar için en iyi 5 adım ölçeri inceleyeceğiz: uygulamaların artılarını ve eksilerini belirleyeceğiz. Hepsi senkronize edilebilir...