Уеб дизайн и оптимизация за търсачки. Форма за обратна връзка на PHP с изпращане на имейл

Обновено на 12.12.2015 г

Въпреки факта, че темата за изпращане на пощенски съобщения директно от страниците на сайта вече е доста изтръпнала, но съдейки по писмата, които получавам от посетителите на моя сайт, заключавам, че мнозина все още имат пропуски в знанията си по тези въпроси.

И така, в този урок ще научим как да го правим форма за изпращане на имейл съобщения от страниците на сайта с проверка за правилно въвеждане на данни... Тези. ако някое поле на формуляр не е попълнено, скриптът ще генерира грешка и ще информира посетителя за това. Можете да видите пример как работи този формуляр. Ако попълните този формуляр и щракнете върху бутона: изпрати съобщениетогава ще получа вашето съобщение.

Предимствата на изпращането на съобщения като това са очевидни:

1. Не е нужно да "блестите в Интернет" вашия пощенски адрес, което означава, че няма да стигне до спамърите.

2. Ако посетител иска да ви зададе въпрос или не трябва да пита нещо, копирайте имейл адреса, отворете неговия пощенски клиент, напишете съобщение и т.н. Посетителят бързо ще попълни необходимите данни във формата и ще ви изпрати съобщение.

3. При такава организация на обратна връзка с посетителите, вероятността да ви достави съобщение е почти 100%, особено ако пощенският адрес е свързан с вашия домейн. В крайна сметка междинните възли са изключени от дълга пощенска верига. Това означава, че надеждността на доставката на поща се увеличава драстично.

Как да създадете формуляр за изпращане на съобщения?

По правило такива скриптове се състоят от две части и кодът се намира в два различни файла:

  • Първи файл- това е самата форма, в която се попълват данните на съобщението.
  • Втори файле манипулатор на файлове, който получава данни от формата (първия файл) и ги изпраща на имейл адреса, посочен в скрипта. Но тези части от сценария винаги работят по двойки.

Преместваме първата част от скрипта в отделен файл и го именуваме: mail.php... Този файл ще съдържа формуляра за въвеждане на данни. Име на файл mail.phpВзех го условно, можете да назовете този файл както искате. Този файл може да има друго разширение, например .html.

За да препратят посетителите на сайта към този файл, те обикновено правят проста връзка: Пишете на автора на сайта, Изпратете съобщение или нещо подобно. Когато посетител щракне върху такъв линк, той отива на отделна страница с формуляр, в който трябва да въведете данни (информация), за да изпратите съобщение.

Така че, създайте нов файл, дайте му име: mail.phpили mail.htmlи поставете кода в него Списък 1.

Списък 1









За да изпратите съобщение до автора на сайта, използвайте следната форма:



Твоето име:


Твоят имейл:


Твоето съобщение:




Това е най-простият формуляр, състоящ се само от 3 полета за въвеждане на данни. Нарекох тези полета: Твоето име, Твоят имейл, твоето съобщение... Броят на полетата може да бъде увеличен, ако е необходимо.

Първите две полета: Твоето име, Твоят имейлса описани с тагове:

Твоето име:

но на всеки от тях е присвоено собствено име, което извиква идентификатор: име = "име"и име = "имейл"съответно.

Третото поле за въвеждане на съобщение се описва с тагове:

Твоето съобщение:

Това поле има идентификатор: име = "бъркотия".

И разбира се има два бутона: изпрати съобщениеи Чиста форма.

На данните (информацията), които посетителят въвежда във формуляра, се присвояват съответните идентификатори: име, електронна пощаи бъркотия, запомнете - това е важно!

За удобство на дизайна, цялата форма е поставена в обикновена маса, външният вид, с който може да бъде украсен, имам този клас: клас = "td_border", не го давам тук, ако е необходимо, добавете го сами, по ваш вкус.

Манипулатор на файлове.

Втората част на скрипта се състои от файл с манипулатор: mail2.php, по кой метод ПУБЛИКАЦИЯвсички данни със съответните идентификатори се прехвърлят: име, електронна пощаи бъркотия... Тук тези данни се поставят в променливи: $ име, $ имейл, $ бъркотия.

Създайте файл mail2.phpи напишете кода в него Списък 2:

Списък 2

$ име = $ _POST ["име"];
$ email = $ _POST ["имейл"];
$ бъркотия = $ _POST ["бъркотия"];

$ REMOTE_ADDR = $ _POST ["REMOTE_ADDR"];

if (набор ($ име))
{
$ име = substr ($ име, 0,20); // Не може да бъде повече от 20 знака
if (празен ($ име))
{
ехо"

Името не е посочено!!!

";
ехо "";
изход;
}
}
друго
{
$ name = "не е посочено";
}

if (isset ($ имейл))
{
$ email = substr ($ имейл, 0,20); // Не може да бъде повече от 20 знака
ако (празен ($ имейл))
{
ехо"

Имейл не е посочен !!!

";
ехо" Върнете се и попълнете формуляра правилно.";
изход;
}
}
друго
{
$ email = "не е посочено";
}

if (isset ($ бъркотия))
{
$ mess = substr ($ mess, 0,1000); // Не може да бъде повече от 1000 знака
ако (празен ($ бъркотия))
{
ехо"

Съобщението не е написано!!!

";
ехо" Върнете се и попълнете формуляра правилно.";
изход;
}
}
друго
{
$ mess = "не е посочено";
}

$ i = "не е посочено";
if ($ име == $ i И $ имейл == $ i И $ бъркотия == $ i)
{
echo "Внимание! Възникна грешка! Не попълнихте полетата за съобщение!";
изход;
}

$ до = " [защитен с имейл]сайт“;
$ тема = " Съобщение от сайта на сайта";
$ message = "Името на подателя: $ име. \ nИмейл адрес: $ email \ nСъобщение: $ mess. \ nIP-адрес: $ _SERVER";
поща ($ до, $ тема, $ съобщение, "Тип съдържание: текст / обикновен; charset = windows-1251") или отпечатайте "Не мога да изпратя имейл !!!";
ехо"

Благодарим ви, че изпратихте вашето съобщение.

За мен е много важно!

Със сигурност ще получите отговор в близко бъдеще.";
изход;
?>

Този файл проверява данните, въведени от посетителя на сайта във формуляра, и след това изпраща съобщение до посочения имейл адрес.

Ако полетата са празни или попълнени неправилно, скриптът ще върне съобщение на посетителя, посочващо конкретна причина.

Моля, имайте предвид, че файлът: mail2.php трябва да има разширение .php , от съобщението се изпраща с помощта на функцията поща PHP.

И разбира се вашият хостинг трябва да поддържа PHP. Това се отнася основно за безплатния хостинг, въпреки че напоследък, дори и на безплатен хостинг, PHP се инсталира почти навсякъде.

В код Списък 2всичко е просто, коригирайте всички стойности, маркирани в червено, за да отговарят на вашите изисквания, а именно:

  • напиши своя Имейл адресдо които ще се изпращат съобщенията (променлива $ до);
  • коригирайте темата на съобщението (променлива $ предмет);
  • обърнете внимание на кодирането ( charset = windows-1251). Напишете кодирането, което се използва на вашия сайт. В рускоезичния интернет кодирането може да бъде: "utf-8"или "windows-1251"... Ако направите грешка с кодирането, текстът в писмото ще се покаже неправилно (krakozyabrami).

Това всъщност е всичко, сега остава да качите файловете: mail.phpи mail2.phpи на сайта ви ще се появи удобна форма за изпращане на съобщения.



Коментари към тази статия (урок):

Благодаря за урока. Вярно е, че казват, че всичко идва навреме. Днес щях да потърся в интернет как да направя контактна форма за сайта, и то независима. Разбирам, че това ще стане.

Добър урок! Благодаря!

Благодаря Андрей, добър урок.

Благодаря, мисля че ще ми е от полза

Дмитрий Александрович Савин (SAVIN DMITRY ALEXANDROVICH) ви пише, искам да науча повече за формулярите в CSS, не знам много за това: повече подробности за свойството action, тъй като знам, action е връзка към документ, където data заявка се изпраща или данните от самата форма, или нещо подобно метод = "публикуване" обработка на данни в по-голям размер от get и т.н. Моля, повече подробности за формулярите имам в тях почти бъг.

Здравей Андрей! С най-добри пожелания за теб Ахмад. Така че аз също искам да създам "Добавете своя коментар" на сайта, така че посетителите да могат да оставят своите коментари. Какъв код трябва да напиша? Благодаря ти, хареса ми Ахмад

Красив! много полезна информация!

Полезно, понякога полезно, но неизпълнимо. След попълване на формуляра се показва списъкът mail2.php

Полезно, понякога полезно, но няма да започне. След попълване на формуляра се показва списъкът mail2.php

Всичко работи добре, само бутоните не се оказват обемни като на автора. Някой може ли да ми каже как се правят обемни бутони? Благодаря на автора!

но не ми върши работа. по-точно работи наполовина. писмото е изпратено, но празно. данните от mail1 не отиват в mail2

Пощата не идва. Каква е уловката? Не разбирам как ще изпрати нещо без потребителско име и парола. Това пощенски сървър ли е? Проста форма и това е

Благодаря за формата! Върши работа! Който не работи - следвайте внимателно всяка стъпка. Аз също не успях веднага. Андрей, благодаря отново!

Помощ, моля, формуляра е вмъкнал всичко изглежда е наред, но съобщението, което посочих, не достига до пощата, въпреки че съобщението е изпратено ...

Кажете ми, но как да се уверя, че след изпращане / неуспешно изпращане на писмото не се отваря нов прозорец и писането е в стария?

Андрей. Разбирам, че се извиква манипулаторът. Все още не съм много по php. Но ето какво бих искал да постигна: има само една страница с пощенска форма, т.е. след натискане на "Изпрати съобщение" нов прозорец не се отваря, но текущата страница се променя. Т.е., както разбирам, той е динамичен. Не мога да разбера как да направя това сам, затова моля за съвет.

Андрей, кажи моля те, формата работи чудесно в хром, но има проблем с експлоъра. Имейлите не се доставят и не се показват съобщения за грешка или подаване. Какво има тук? Благодаря ви предварително

Готин урок! Благодаря!

Благодаря. Всичко работи добре)

в кода няма затварящи /p тагове. Защо?

Предупреждение: mail (): "sendmail_from" не е зададен в php.ini или персонализиран заглавка "From:" липсва в E: Roomsu362571transport-online.netwwwmail.php на ред 66 Не мога да изпращам поща !!! В - как се оказва Как да бъде ??

не мога да разбера кодирането. Ако предпишете windows-1251 - текстът на скрипта в съобщението е нормален, текстът на самото съобщение се изпраща по пощата от крокодил. и ако сложиш utf-8 - текста на скрипта в съобщението на пощата - въпросителни, а текста на съобщението от формата е нормален. как да се уверя, че и това, и това ще е нормално?

не ми върши работа, но сайтът още не е хостван, кога ще го поставя?

Всичко работи, благодаря за скрипта! Моля, кажете ми как да се уверя, че когато щракнете върху бутона за изпращане, не се отваря нова страница с манипулатор. Че сайтът ще остане на страницата, където е бил преди да щракне върху бутона за изпращане?

но как да направя полето за въвеждане на поща по-горе?

Ако трябва да изпратите писма до няколко адреса, просто добавете необходимите адреси, разделени със запетаи, както следва: $ to = " [защитен с имейл]сайт, [защитен с имейл], [защитен с имейл]";

И как да се уверите, че след изпращане на съобщение има пренасочване към друга страница?

има $ до = " [защитен с имейл]сайт "; въпрос: ако трябва да изпратите до 2 адреса! един от адресите под формата на $ до =" $ имейл "; с други думи, функционалността "препоръчайте на приятел" с дублиращи се съобщения до посочената от мен поща. Благодаря ти.

По някаква причина формата за обратна връзка не работи за мен, освен това никой от тях не работи. Преструва се, че съобщението е изпратено, но не пристига по пощата.

Здравейте! Моля, обяснете защо не работи на хостинга, пише: "Не мога да изпратя писмо." И на lockalhost в Денвър работи добре. Какъв е проблемът?...

защо нямам една форманеа оран пише

Много благодаря. Всичко е много просто и достъпно. Използвах вашия пример в gosdogovor.ru. Просто леко прецизирах дизайна за себе си и състава на полетата: http://www.gosdogovor.ru/easuzcon.html. Благодаря отново.

Момчета, ако се опитвате да изпратите съобщение от вашия локален сървър, да го направите от сайт, който все още не е публикуван в интернет, няма да успеете. Поставете на някакъв хостинг и ще бъдете доволни)

Андрей, но как се прави това?Когато щракнеш върху бутона се изпрати съобщение с конкретен текст на конкретен адрес? Помогнете ми моля: [защитен с имейл]

Здравейте приятели! Бих искал да представя на вашето внимание един универсален скрипт за изпращане на данни от формуляри към имейл... Скриптът е идеален за сайтове като Целева страница, сайтове за визитки и др. Нашите Скрипт за формуляр за обратна връзкасе откроява сред масата други скриптове в Интернет с това, че има способността свързване на неограничен брой формис различни полета на една страница и е в състояние да изпращане на имейли до множество получатели.

Така. Да започваме. Нека започнем с възможностите на скрипта.

  1. Свързване на неограничен брой формуляри на една страница.
  2. Проверка на коректността на попълване на полетата.
  3. Конфигуриране на известия.
  4. Възможността за използване на букви за всяка форма.
  5. Тип буква - (ако се използват html тагове)
  6. Изпращане до неограничен брой адреси.
  7. Индивидуално персонализиране на всяка форма.
  8. Скриптът работи, без презареждане на страницата.
  9. Защита срещу спам ботове.

Първоначалната настройка.


Скриптработи на базата на библиотека, така че първото нещо, което трябва да направим, е да го свържем. За да направите това, препоръчвам да използвате хоствани от Google библиотеки.

Нека разгледаме по-отблизо останалите файлове:

обратна връзка.js- основният скриптов файл, отговорен за Подаване на формуляр AJAX.
jquery.arcticmodal.js,
jquery.arcticmodal.
- предоставят възможност за показване на формуляри в модален прозорец.
jquery.jgrowl.js,
jquery.jgrowl.css
- позволяват показване на известия на страницата (блокове в горния ъгъл на страницата).

HTML и задължителни атрибути.


Задължителен атрибут за всички елементи на формуляр е атрибутът име = ""- се изисква за последващо персонализиране на формуляра.
За бутон (type = "button") трябва да посочите клас = "обратна връзка"... Бих искал също така да обърна вниманието ви към факта, че всеки html таг с клас "feedback" може да действа като бутон.

Извикване на формуляр в модален прозорец

За да извикате формуляр в модален прозорец, първо трябва да дефинирате действие, като щракнете върху който и да е маркер, например div с класа modal_btn

Тъй като формулярът трябва да се вижда само в модалния прозорец, трябва да го скриете, като го поставите в div с атрибута style = "display: none;" и го увиете в няколко стандартни divs, за да стилизирате модалния прозорец.

Така че разбрахме основните настройки за свързване на нашия скрипт за изпращане на формуляри до електронна поща. Нека сега да погледнем вътре и да разберем настройката на полета, известия и всичко останало, което е там.

Пример за настройки за една форма

Всички настройки на формуляра се съхраняват във файл обратна връзка \ index.php
$ form ["form-1"] = масив ("fields" => масив ("name" => array ("title" => "Name", "validate" => array ("preg" => "%%) "," minlength "=>" 3 "," maxlength "=>" 35 ",)," съобщения "=> масив (" preg "=>" Поле [% 1 $ s] може да съдържа грешка "," minlength " => "Минималната дължина на полето [% 1 $ s] е по-малка от разрешената дължина -% 2 $ s", "maxlength" => "Максималната дължина на полето [% 1 $ s] е по-дълга от разрешената дължина -% 2 $ s",)), "кажи "=> масив (" заглавие "=>" Телефон "," валидиране "=> масив (" preg "=>" / ^ ((8 | \ + ) [\ -]?)? (\ (? \ d ( 3) \)? [\ -]?)? [\ D \ -] (5,10) $ / "," minlength "=>" 5 " ,)," съобщения "=> масив (" preg "=> "Поле [% 1 $ s] може да съдържа грешка", "minlength" => "Минималната дължина на полето [% 1 $ s] е по-малка от разрешената дължина -% 2 $ s",)), "cfg" => масив (" charset "=>" utf-8 "," тема "=>" Тема "," заглавие "=>" Заглавие в тялото на съобщението "," ajax "=> вярно," валидиране "=> вярно," from_email "= > " [защитен с имейл]"," from_name "=>" noreply "," to_email "=>" [защитен с имейл], [защитен с имейл]"," to_name "=>" noreply1, noreply2 "," geoip "=> true," referer "=> true," type "=>" html "," tpl "=> true," antispam "=>" email77 "," antispamjs "=>" адрес77 "," добре "=>" Съобщението е изпратено - OK "," fuck "=>" Съобщението е изпратено - ГРЕШКА "," спам "=>" Спам робот "," уведоми "=> "color-modal-textbox", "usepresuf" => false)); // Следваща форма $ form ["form-2"] = array ("fields" => array (.....
За да добавите настройки за нов формуляр, трябва да създадете нов масив $ form [""], следвайки примера на масива $ form ["form-1"]

Не забравяйте, че говорих за необходимия атрибут име = ""?

Задължителният атрибут за всички елементи на формуляра е атрибутът name = "" - изисква се за последващото конфигуриране на формуляра.
Така че дойде време да ви кажа защо все още е необходимо.
име = ""- това е буквено-цифров ключ за масива, трябва да бъде уникален за формата $ на масива [""]

Примерен html код за яснота

Сега нека да разгледаме масивите и за какво са те.

$ форма ["форма-1"] = масив ();
$ form ["form-2"] = масив ();и т.н.
Това са основните масиви за всеки нов формуляр, те съдържат:

  1. "fields" => масив ();- Масив от настройки за елементи на формуляр.
    • "име" => масив ();- Масив от настройки за елементи на формуляр (напр входно име = "име" тип = "текст"), който има редица настройки.
      • "title" => "Вашето име"- името на елемента на формуляра, ще се показва в случай на грешки или в шаблона
      • "validate" => масив ();- масив, съдържащ правилата за валидиране на елемента на формата
        • "preg" => "%%"- регулярен израз
        • "minlength" => "3"- минимален размер на полето
        • "maxlength" => "35"- максимален размер на полето
        • "substr" => "35"- винаги изрязвайте до N знака
      • "messages" => масив ();- масив, съдържа съобщения за валидиране, а именно:
        • "preg" => "Елементът на формуляра не съответства на регулярен израз"
        • "minlength" => "Минималната дължина на полето [% 1 $ s] е по-малка от позволената дължина -% 2 $ s"- грешка при валидиране, ключът (preg) не съвпада с ключа за валидиране
        • "maxlength" => "Максималната дължина на полето [% 1 $ s] надвишава позволената дължина -% 2 $ s"- грешка при валидиране, ключът (preg) не съвпада с ключа за валидиране
  2. "cfg" => масив ();- Масив от настройки на формуляра.
    • "charset" => "utf-8"- кодиране
    • "subject" => "Тема на имейла",- Тема на писмото
    • "title" => "Заглавие в тялото на писмото",- Заглавие в тялото на писмото
    • "ajax" => вярно,- това е ajax формата TODO (ако не е необходима, поставете - false)
    • "validate" => вярно,- (true) ако искаме да потвърдим формуляра на сървъра, заменя валидирането на js с "ajax" => true. Когато е изключено (false), можете да оставите полетата за проверка ненастроени. ДА НАПРАВЯ
    • "from_email" => "myemail",- изпращач, посочете името на полето (име = "myemail") и ако не се нуждаете от имейл от потребителя, тогава мъниче [защитен с имейл].com
    • "from_name" => "моето име",- изпращач, посочете името на полето (име = "моето име") и ако не се нуждаете от потребителско име, тогава мъничето без отговор
    • "to_email" => " [защитен с имейл]", - имейл на получател. За да изпратите до няколко адреса, ги избройте, разделени със запетаи. Пример ("to_email" => " [защитен с имейл], [защитен с имейл], [защитен с имейл]",)
    • "to_name" => "noreply1",- Име на приемника. Когато изпращате до няколко адреса, избройте имената на получателите, разделени със запетаи. Пример ("to_name" => "noreply1, noreply2, noreply3",)
    • "geoip" => вярно,- разберете местоположението по тип TODO
    • "referer" => false,- добавете URL адреса на страницата, от която е изпратен формулярът
    • "тип" => "обикновен",- тип буква - обикновена, html (ако се използват html тагове)
    • "tpl" => невярно,- използвайте шаблон за писмо. Ако е истина, тогава шаблонният файл ще бъде свързан в съответствие с името на формуляра (име = "form-1") от папката и файлът (feedback / tpl / form-1.tpl) ще бъде обработен, в противен случай всичко ще бъде изпратено както е, всяко поле на нов ред
    • "antispam" => "email77",- Анти спам, методът се основава на скрито (дисплей: няма) поле, което само роботът попълва автоматично, като по този начин се представя за себе си.
    • "antispamjs" => "адрес77",- Анти спам, методът се основава на скрито (display: none) поле, първоначално попълнено, което автоматично изчиства javascript при зареждане на страницата, дори интелигентен робот не може да предвиди това и след това се блокира.
    • "okay" => "Съобщение до потребителя",- Показва се съобщение до потребителя, ако формулярът е изпратен успешно, можете да използвате html тагове.
    • "fuck" => "Съобщение до потребителя",- Съобщение до потребителя, което се показва, когато възникне грешка при подаване на формуляр, можете да използвате html тагове.
    • "spam" => "Съобщение до потребителя",- Съобщение до потребителя, което се показва, ако робот е заподозрян в спам, можете да използвате html тагове.
    • "notify" => "color-modal",- какъв тип известия да се показват, текстово поле - блокове в горния ъгъл на страницата, цвят - цветно подчертаване във формата, модално - модален прозорец в центъра на страницата, няма - деактивиране. Може да се комбинира, например: цветно-модален - грешки при попълването на полетата с подчертаване и състоянието на подаване на текст в модалния прозорец TODO
    • "usepresuf" => false- Независимо дали се използва персонализирано допълнение към темата или към заглавката на буквата, в случай на малка промяна можете да посочите, например, %% cfg.title.suffix %%, за това трябва да има скрито поле в формуляр, за повече подробности вижте функцията presuf ().

Персонализиране на шаблони за имейли

Така. Нека сега да се заемем с тематиката на нашите съобщения.
Първо, за да бъде изпратен формулярът в шаблона, трябва да активирате използването на файла с шаблона в настройките на формуляра - "tpl" => вярно,
Второ, трябва да създадете шаблонен файл с разширение * .tpl в папката ( обратна връзка / tpl /), според името на формуляра ( име = "форма-1").

Пример: ( обратна връзка / tpl / форма-1.tpl)

Заглавие в тялото на имейла
%% name.title %% %% name.value %%
%% tell.title %% %% tell.value %%

име, казвами т.н. - Това са атрибутите (име = "") на полетата, които потребителят попълва.
заглавие- Името на елемента на формуляра, който е зададен в масива от настройки на елемента на формуляра.
стойност- Стойността на елемента на формуляра.

Това е всичко за днес, но скриптът със сигурност не е перфектен, така че коментарите и описанията на грешки са добре дошли и ще бъдат коригирани в следващите версии.

P.S. Сценарият е разработен от екипа

Публикувана дата: 2011-12-01



Нека разгледаме пример за изпращане на съобщение от сайт до вашия имейл адрес. Защо е необходимо това? Да предположим, че имате поле за коментар на страницата си и трябва бързо да разберете, че някой е оставил коментар. Няма да посещавате сайта си всяка минута и да проверявате за нови коментари.

Самият процес на създаване на формуляр и изпращане на писмо е прост. Но има някои неща, които могат да развалят настроението ви за целия ден.

Първата трудност е глупавият и остарял стандарт за писма на руски език. Заради него в пощенската ви станция може да идват писма с "кракозябрами". Този проблем е особено забележим при пощенски клиенти като Windows Mail, Outlook Express и др. Ако четете писма през уеб интерфейса, проблемът не е толкова спешен. Много пощенски сървъри са достатъчно интелигентни, за да покажат имейла правилно.

Вторият проблем са нежеланите имейли. Някои "алтернативни" надарени индивиди могат безкрайно да натискат бутона за изпращане на писма (flood). Те могат да включват и ботове - специално написани програми, които сами натискат бутони.

Третият проблем е защитата от уязвимости. Ако можете да въведете нещо в сайта, тогава има възможност за хакване. Например, вие искате да въведете имейл адрес за регистрация в поле, а хакер да въведе специално подготвен злонамерен скрипт, който може да развали вашия сайт.

Ако описаните трудности не са ви възпрепятствали и искате да получавате съобщения от сайта, тогава ние ще продължим ...

Нека започнем с най-простия пример без звънци и свирки.

Нека създадем файл forms.php, който ще съдържа формуляр за изпращане на съобщение.

Твоето име:

Съобщение:


"; ?>

Току-що създадохме формуляр с две текстови полета и бутон. Моля, обърнете внимание, че сме дефинирали метода за публикуване за формуляра и сме посочили в параметъра действиепът до манипулатора на формуляра - mail.php. Естествено, можете да посочите свой собствен адрес и друго име за файла.

Сега нека създадем файл mail.php (в нашия пример той трябва да бъде в същата папка).

$ len) (изход ("Грешка. Съобщението не трябва да надвишава". $ len. "знаци.");) // тук трябва да посочите своя имейл адрес, за да получавате имейли $ to = " [защитен с имейл]"; $ subject =" Писмо от ". $ name; // конвертиране от windows-1251 в koi8-r $ subject = convert_cyr_string ($ subject," w "," k "); // това е самата буква $ съобщение ="

Нов коментар:

". $ message_text."

"; // конвертиране от windows-1251 в koi8-r $ message = convert_cyr_string ($ message," w "," k "); // заглавки на съобщението $ headers =" Content-Type: text / html; charset = KOI8-R \ r \ n "; // от кого е $ заглавки. =" От: сървър \ r \ n \ r \ n "; if (mail ($ до, $ тема, $ съобщение, $ заглавки) ) (echo "Имейлът е изпратен успешно.";) else (echo "Грешка. Имейлът не е изпратен.";)?>

По принцип това е достатъчно, за да изпратите писмо. Основното нещо е да се уверите, че ви е позволено да използвате функцията mail () на вашия сайт, тъй като някои хостери я деактивират или въвеждат различни ограничения за броя на изпратените писма.

Укрепване на защитните сили

В описания пример има минимална защита под формата на функция htmlspecialchars... Друга форма на защита може да бъде използването на сесии.

В самото начало на първия файл въведете следното.

// инициализира сесията session_start ();// отпечатване на съобщения echo $ er; // образуване на ехо "

Твоето име:
... и т.н

Първият ред код инициализира сесията, като по този начин предотвратява наводняването на нашия формуляр. Няма да е възможно да изпратите съобщение от формуляра, като го копирате на вашия локален хост (по-точно можете, но трябва да се поправите с него). Уверете се, че редът? Php започва във вашия документ веднага без интервали или отстъпи, последвано от функцията session_start () (коментарът не се брои). В противен случай ще бъде изведена грешка.

Забележете етикета за въвеждане с типа скритпод името сесиен идентификатор... Този скрит формуляр изпраща идентификатора на текущата сесия чрез метода POST до манипулатора (mail.php), за да го провери спрямо текущата сесия на страницата на манипулатора. Това е част от кода, която защитава формуляра със сесия от спам или наводняване.

Сега трябва да добавите чек към mail.php:

Стартирахме нашия код, като инициализирахме сесия за скрипта за изпращане на съобщение. Вторият ред код просто проверява идентификатора, изпратен от метода POST от страницата на формуляра, като идентификаторът е инициализиран от тази страница и ако са равни, се изпълнява допълнителен код, в противен случай функцията exit () спира изпълнението на скрипта за изпраща съобщения от сайта и показва съобщението: Можете да използвате изпращане на съобщения само на уебсайта.

Можете също да поставите captcha и други методи за защита. Но повече за това следващия път.

Една от най-често срещаните задачи на практика е прилагането на формата за обратна връзка. Пишете неговия HTML код, декорирате го в CSS, създавате PHP скрипт, който ще обработва получените от потребителя данни и ги изпраща на нашата поща, пишете JS скрипт, който ще проверява формата за адекватност на входните данни, защитава нашите идея от спам, така че нашата пощенска кутия да не се срине от атаки на ботове.

Всички горепосочени точки ще бъдат разгледани в нашия преглед и ще бъдат коментирани подробно.

И така, нека започнем да създаваме формуляр за обратна връзка:

HTML

На първо място, ние пишем HTML код, той задава полетата, които потребителят ще попълни. Те ще бъдат издадени в бъдеще. Кодът на формуляра изглежда така:

< form method= "post" action= "mail.php" > < div class = "left" > < label for = "name" >име: < input maxlength= "30" type= "text" name= "name" /> < label for = "phone" >Телефон: < input maxlength= "30" type= "text" name= "phone" /> < label for = "mail" >Електронна поща: < input maxlength= "30" type= "text" name= "mail" /> < div class = "right" > < label for = "message" >Съобщение: < textarea rows= "7" cols= "50" name= "message" > < input type= "submit" value= "изпрати" />

И визуално сега изглежда така:

Съгласен съм, засега всичко е грозно и нищо не е ясно, но ние току-що започнахме.

Разгледайте горния код подробно:

  • < form method= "post" action= "mail.php" > …


    за да създадете формуляр, трябва да използвате маркера за формуляр. Той е този, който определя началото и края на формуляра за интерпретатора на код. Той, като всеки маркер, има цял набор от атрибути, но има само два, необходими за работата на формуляра, това са метод (метод за изпращане на заявка до сървъра, за формуляри те използват post като стандарт) и действие ( посочва пътя към манипулатора на файла на формуляра, точно в този файл ще се съдържа скрипт на PHP, който след това ще изпрати въведените от потребителя стойности до нашата поща, в нашия случай виждаме, че този файл се нарича mail .php и се намира в същата директория на сайта като страницата, която разглеждаме).
  • < input maxlength= "30" type= "text" name= "name" />


    След това имаме входове. Това са действителните полета на формуляра, в които потребителите ще въвеждат необходимата ни информация (type = "text" означава, че ще бъде текст). Атрибутът maxlength указва колко знака може да въведе потребителят в дадено поле на формуляр. Най-важният атрибут е име – той определя името на определено поле. Именно с тези имена в бъдеще PHP скриптът ще обработва въведената в него информация. Ако желаете, можете също да зададете атрибута placeholder, който показва текст в полето, който изчезва, когато курсорът се постави в него. Един от проблемите с заместителя е, че той не се поддържа от някои по-стари браузъри.
  • < label for = "name" >име:


    Използва се в случай, че сме изоставили заместители. Обичайният подпис на поле, атрибутът for, казва към кое конкретно поле принадлежи този подпис. Стойността определя името на полето от интерес.
  • < textarea rows= "7" cols= "50" name= "message" >


    Точно както въвеждането е предназначено за въвеждане на информация от потребителя, само този път полето се изостря за дълги съобщения. Редове показва размера на полето в редове, колони в знаци. Като цяло те задават височината и ширината на нашата кутия.
  • < input type= "submit" value= "изпрати" />


    Type = "submit" ни казва, че това е бутон за подаване на формуляр, а value задава текста, който ще бъде вътре в този бутон.
  • < div class = "right" >


    използва се само за по-нататъшно визуално проектиране на формата.

CSS

За да изглежда нашият формуляр за обратна връзка представителен, трябва да го подредите. За да получите следния резултат:

Използвахме дадения код:

форма (фон: # f4f5f7; допълване: 20px;) форма. вляво, форма. дясно (дисплей: вграден блок; вертикално подравняване: отгоре; ширина: 458 пиксела;) форма. десен (отстъп-ляво: 20px;) етикет (дисплей: блок; размер на шрифта: 18px; подравняване на текст: център; поле: 10px 0px 0px 0px;) въвеждане, текстово поле (граница: 1px плътно # 82858D; подреждане: 10px; размер на шрифта: 16px; ширина: 436px;) текстово поле (височина: 98px; margin-долу: 32px;) вход [type = "submit"] (ширина: 200px; float: вдясно; граница: няма; фон: # 595B5F; цвят: #fff; преобразуване на текст: главни букви;)

Не виждам смисъл да описвам подробно CSS, ще насоча вниманието ви само към ключовите точки:

  1. Не трябва да пишете дизайн за всеки етикет във формуляра. Опитайте се да изградите своите селектори, така че да можете да стилизирате всички елементи, от които се нуждаете, с няколко реда код.
  2. Не използвайте допълнителни тагове по тип за прекъсвания на редове и отстъпи < br>, < p> и така нататък, CSS върши страхотна работа с дисплея: свойство на блокиране и поле с допълване. Повече за това защо да не използвате < br> в оформлението по принцип можете да прочетете тага br в статията, но наистина ли е необходим? ...
  3. Не използвайте оформления на таблични форми. Това противоречи на семантиката на този маркер и търсачките обичат семантичния код. За да оформим визуалната структура на документа, ни трябват само div таговете и настройването на свойствата display: inline-block (подрежда блоковете в ред) и vertical-align: top (предотвратява разпръскването им по екрана) от тях в CSS, задайте им необходимата височина и воала, нищо повече и всичко е разположено така, както ни трябва.

За тези, които искат да спестят времето си за дизайна на уебсайтове, мога да ви посъветвам да използвате CSS рамки при създаване на уебсайтове, особено самостоятелно написани. Моят избор за този план е Twitter Bootstrap. Можете да гледате урок за проектиране на формуляри с него.

PHP

Е, сега е време да направим нашата форма работеща.

Отиваме в главната директория на нашия сайт и създаваме там файл mail.php, към който преди това посочихме пътя в атрибута action на маркера на form.

В крайна сметка неговият код ще изглежда така:

Съобщението беше изпратено успешно. \ "javascript: history.back () \"> Върнете се назад

" ; ако (! празно ($ _POST ["име"]) и! празно ($ _POST ["телефон"]) и! празно ($ _POST ["поща"]) и! празно ($ _POST ["съобщение"])) ($ name = trim (strip_tags ($ _POST ["name"])); $ phone = trim (strip_tags ($ _POST ["phone"])); $ mail = trim (strip_tags ($ _POST ["mail"]) ); $ message = trim (strip_tags ($ _POST ["message"])); mail (,, "Написах ви:". $ name. "
Номерът му е ". $ Телефон."
Неговата поща: ". $ Mail. "
Неговото послание: "
... $ съобщение,); ехо "Съобщението Ви беше изпратено успешно!
Скоро ще получите отговор.
$ обратно "
; изход; ) else (ехо; изход;)?>

Обсъждането на HTML и CSS частта на този документ може да бъде пропуснато. По своята същност това е обикновена страница на сайта, която можете да проектирате както желаете и имате нужда. Нека разгледаме най-важната част от него - PHP скрипта за обработка на формуляра:

$ назад = "

\ "javascript: history.back () \"> Върнете се назад

" ;

С този ред създаваме връзка за връщане към предишната страница. Тъй като не знаем предварително от коя страница потребителят ще стигне до тази, това се прави с помощта на малка JS функция. В бъдеще просто ще се позоваваме на тази променлива, за да я покажем на местата, от които се нуждаем.

ако (! празно ($ _POST ["име"]) и! празно ($ _POST ["телефон"]) и! празно ($ _POST ["поща"]) и! празно ($ _POST ["съобщение"])) ( // вътрешна част на манипулатора) друго (ехо "Моля, попълнете всички полета, за да изпратите вашето съобщение! $ Назад"; изход; )

Тук прилагаме проверката на формуляра за пълнота на полетата. Както може би се досещате, в частта $ _POST ["name"], в кавички, ние записваме стойността на атрибута name на нашите входове.

Ако всички полета са попълнени, тогава скриптът ще започне да обработва данни във вътрешната си част, ако поне едно поле не е попълнено, тогава на екрана на потребителя ще се покаже съобщение с искане за попълване на всички полета на формуляра ехо "За да изпратите съобщение, попълнете всички полета! $ Назад" и връзка за връщане към предишната страница, която създадохме на първия ред.

След това вмъкваме във вътрешната част на манипулатора на формуляра:

$ name = trim (strip_tags ($ _POST ["name"])); $ phone = trim (strip_tags ($ _POST ["телефон"])); $ mail = trim (strip_tags ($ _POST ["mail"])); $ message = trim (strip_tags ($ _POST ["message"]));

По този начин изчистихме въвеждането на потребителя от html тагове и допълнителни интервали. Това ни позволява да се предпазим от получаване на злонамерен код в съобщения, изпратени до нас.

Проверките могат да бъдат сложни, но това вече е по ваше желание. Вече сме инсталирали минималната защита от страна на сървъра. По-нататък ще направим от страна на клиента, използвайки JS.

Не препоръчвам напълно да изоставите защитата на формуляри от страна на сървъра в полза на JS, защото, въпреки че е изключително рядко, има уникални такива с деактивиран JS в браузъра.

След почистване на таговете, добавете изпращане на съобщение:

поща ( "[email protected]", "Писмо от адрес_ваш_сайт", "Написах ти:" $ име. "
Номерът му е ". $ Телефон."
Неговата поща: ". $ Mail. "
Неговото послание: "
... $ съобщение, "Тип съдържание: текст / html; набор от символи = windows-1251") ;

Именно тази линия се занимава с формирането и изпращането на съобщение до нас. Попълва се както следва:

  1. "[email protected]" - вмъкнете вашата поща тук между кавичките
  2. „Писмо от адрес_ваш_сайт“ е темата на съобщението, което ще пристигне по пощата. Тук можете да напишете всичко.
  3. "Писах ви:". $ Име. " < br /> Номерът му е ". $ Телефон." < br /> Неговата поща: ". $ Mail." < br /> Неговото съобщение: ". $ Message - формираме текста на самото съобщение. $ Name - вмъкваме информацията, попълнена от потребителя чрез препратка към полетата от предишната стъпка, в кавички описваме какво означава това поле, с етикет < br /> правим прекъсване на ред, така че съобщението като цяло да се чете.
  4. Content-type: text / html; charset = windows-1251 - в края има изрична индикация за типа данни, предавани в съобщението и неговото кодиране.

ВАЖНО!

Кодирането, посочено в "главата" на документа ( < meta http- equiv= "Content-Type" content= "текст / html; набор от символи = windows-1251" /> ), кодирането от съобщението Content-type: text / html; charset = windows-1251 и като цяло кодирането на PHP файла трябва да съвпада, в противен случай съобщенията, получени по пощата, ще показват "krakozyabry" вместо руски или английски писма.

Много от тях не посочват изрично кодирането на изпратеното съобщение, но при някои пощенски клиенти това може да причини проблеми в бъдеще (в пощата идват нечетими писма), така че препоръчвам да го посочите все пак.

Проверка на формуляра за адекватност на въведените данни

За да не пропуснат потребителите по невнимание и да попълнят всичко правилно, си струва да проверите въведените данни.

Това може да се направи както в PHP от страна на сървъра, така и в JS от страна на клиента. Използвам втория вариант, защото така човек може веднага да разбере какво е сгрешил и да коригира грешката, без да прави допълнителни преходи през страниците.

Поставете кода на скрипта в същия файл, където се намира HTML частта на формуляра. За нашия случай това ще изглежда така:

< script>функция checkForm (форма) (var name = форма. име. стойност; var n = име. съвпадение (/ ^ [A- Za- zA- Ya- z] * [A- Za- zA- Ya- z] + $ / ); ако (! n) (предупреждение ( „Името е въведено неправилно, моля, поправете грешката.“); върне false; ) var phone = форма. телефон. стойност; var p = телефон. съвпадение (/ ^ [0 - 9 +] [0 - 9 -] * [0 - 9 -] + $ /); ако (! p) (предупреждение ( „Телефонът е въведен неправилно“); върне false; ) var mail = форма. поща. стойност; var m = поща. съвпадение (/ ^ [A- Za- z0- 9] [A- Za- z0- 9 \. _-] * [A- Za- z0- 9 _] * @ ([A- Za- z0- 9] + ([A- Za- z0- 9 -] * [A- Za- z0- 9] +) * \.) + [A- Za- z] + $ /); ако (! m) (предупреждение ( "Имейл е въведен неправилно, моля, коригирайте грешката"); върне false; ) върне true; )

Е, сега обичайният анализ:

За, така че когато щракнете върху бутона за изпращане на формуляра, ще го проверимзакачваме стартирането на нашия скрипт на етикета на формата:

< form method= "post" action= "mail.php" onSubmit= "return checkForm(this)" >

Сега, точка по точка, вземаме състава на проверката:


Както виждате, такава мини проверка е написана за всяко от нашите полета. Откроих проверката за едно поле на екранната снимка с червен квадрат, за други полета има подобна структура и ако има нужда да добавите поле или да го премахнете, вече можете лесно да го направите.

В този урок ще се запознаем с функцията поща (), използвайки примера за създаване PHP формуляри за обратна връзкас последващо изпращане на получените данни по пощата.

За това ще създадем два файла - forma.phpи mail.php... Първият файл ще съдържа само формуляр с полета за въвеждане на данни от потребителя. Вътре в етикета форма- бутон "изпрати"и атрибут действиекоето се отнася до манипулатора - mail.php, именно до него се осъществява достъп до данните от формата при натискане на бутона "изпрати"... В нашия пример данните от формуляра се изпращат на уеб страница с име "/Mail.php"... Тази страница съдържа скрипт за PHPкойто обработва данните от формуляра:


Данните от формуляра се изпращат по метод ПУБЛИКАЦИЯ(обработено като $ _POST). $ _POSTе масив от променливи, предавани на текущия скрипт чрез метода ПУБЛИКАЦИЯ.

По-долу можете да видите съдържанието на файла forma.php, чиито полета се попълват от самия потребител на някой уебсайт. Всички полета за въвеждане на данни трябва да имат атрибута име, ние сами предписваме стойностите въз основа на логиката.




Форма за обратна връзка в PHP с изпращане по пощата


Формуляр за обратна връзка в PHP







Остави съобщение:
Твоето име:



Електронна поща:

Телефонен номер:

Съобщение:

Текстовата област може да съдържа неограничен брой знаци ->









Ето как формата изглежда визуално в браузъра.

След това пишем кода за файла mail.php... Измисляме имената на променливите. V PHPпроменливата започва със знак $ и след това името на променливата. Текстовата стойност на променливата е затворена в кавички. С помощта на променливи съдържанието на формуляра се изпраща на имейла на администратора, като просто се замества името на елемента на формуляра в квадратни скоби - стойността име.

$ до = " [защитен с имейл]"; // имейл на получателя на данните от формуляра
$ tema = "PHP Формуляр за обратна връзка"; // тема на получения имейл
$ message = "Вашето име:". $ _ POST ["име"]. "
"; // присвоява на променливата стойността, получена от формата име = име
$ message. = "E-mail:". $ _ POST ["email"]. "
"; // получено от формата име = имейл
$ message. = "Телефонен номер:". $ _ POST ["телефон"]. "
"; // получено от формата name = phone
$ message. = "Съобщение:". $ _ POST ["съобщение"]. "
"; // получено от формата име = съобщение
$ headers = "MIME-версия: 1.0". "\ r \ n"; // заглавката съвпада с формата плюс символ за подаване на ред
$ headers. = "Тип съдържание: текст / html; набор от символи = utf-8". "\ r \ n"; // показва типа на съдържанието, което се изпраща
поща ($ до, $ тема, $ съобщение, $ заглавки); // изпращане на променливи стойности на получателя по имейл
?>

По този начин данните от масива $ _POSTще бъде предаден на съответните променливи и изпратен по пощата с помощта на функцията поща... Нека попълним нашия формуляр и натиснете бутона за изпращане. Не забравяйте да включите своя имейл. Писмото пристигна моментално.