Красивая форма обратной связи на основе AJAX

Предоставление посетителям сайта простого и надежного средства обратной связи – это важнейшая часть любого веб-проекта. Наиболее простым и часто используемым каналом обратной связи – являются контактные формы. Посмотреть результат можно здесь.

В сегодняшней статье, мы создадим форму обратной связи на аяксе, с использованием современных техник веб-разработки. Для этого мы будем использовать PHP, CSS и jQuery в виде нескольких плагинов. Плагин formValidator будем использовать для проверки введенных значений, а с помощью плагина jQTransform, будем стилизовать текстовые поля и кнопки нашей формы. В дополнение, мы будем использовать класс PHPMailer для отправки на почту введенных данных.

Кроме того, наша форма будет прекрасно работать даже с выключенным JS.

*Для нормальной работы примера, вам понадобится PHP5

Шаг 1 – XHTML

Сначала нам понадобится XHTML-разметка для формы.

demo.php

[html]
<div id="main-container"> <!– The main container element –>

<div id="form-container"> <!– The form container –>

<h1>Fancy Contact Form</h1> <!– Headings –>
<h2>Drop us a line and we will get back to you</h2>

<form id="contact-form" name="contact-form" method="post" action="submit.php"> <!– The form, sent to submit.php –>

<table width="100%" border="0" cellspacing="0" cellpadding="5">

<tr>
<td width="18%"><label for="name">Name</label></td> <!– Text label for the input field –>
<td width="45%"><input type="text" class="validate[required,custom[onlyLetter]]" name="name" id="name" value="<?=$_SESSION[‘post’][‘name’]?>" /></td>
<!– We are using session to prevent losing data between page redirects –>

<td width="37%" id="errOffset">&nbsp;</td>
</tr>

<tr>
<td><label for="email">Email</label></td>
<td><input type="text" class="validate[required,custom[email]]" name="email" id="email" value="<?=$_SESSION[‘post’][’email’]?>" /></td>
<td>&nbsp;</td>
</tr>

<tr>
<td><label for="subject">Subject</label></td>

<!– This select is being replaced entirely by the jqtransorm plugin –>

<td><select name="subject" id="subject">
<option value="" selected="selected"> – Choose -</option>
<option value="Question">Question</option>
<option value="Business proposal">Business proposal</option>
<option value="Advertisement">Advertising</option>
<option value="Complaint">Complaint</option>
</select> </td>
<td>&nbsp;</td>
</tr>

<tr>
<td valign="top"><label for="message">Message</label></td>
<td><textarea name="message" id="message" class="validate[required]" cols="35" rows="5"><?=$_SESSION[‘post’][‘message’]?></textarea></td>
<td valign="top">&nbsp;</td>
</tr>

<tr>
<td><label for="captcha"><?=$_SESSION[‘n1’]?> + <?=$_SESSION[‘n2’]?> =</label></td>

<!– A simple captcha math problem –>

<td><input type="text" class="validate[required,custom[onlyNumber]]" name="captcha" id="captcha" /></td>
<td valign="top">&nbsp;</td>
</tr>

<tr>
<td valign="top">&nbsp;</td>
<!– These input buttons are being replaced with button elements –>
<td colspan="2"><input type="submit" name="button" id="button" value="Submit" />
<input type="reset" name="button2" id="button2" value="Reset" />
<?=$str?>

<!– $str contains the error string if the form is used with JS disabled –>

<img id="loading" src="img/ajax-load.gif" width="16" height="16" alt="loading" />
<!– the rotating gif animation, hidden by default –>
</td></tr>

</table>
</form>

<?=$success?>
<!– The $success variable contains the message that is shown if JS is disabled and the form is submitted successfully –>

</div>
</div> <!– closing the containers –>
[/html]

Как вы могли заметить в строке 8, обрабатывать нашу форму будет файл submit.php. Мы будем использовать этот файл в обоих случаях – как для обычной отправки формы (для посетителей с выключенным JS), так и для аяксовой отправки формы. Это позволит легко обновлять код, без необходимости объединять изменения между файлами.

Далее, мы можете видеть, что мы используем массив $_SESSION для заполнения текстовых полей значениями. Это делается для того, чтобы данные не потерялись во время перенаправления страницы, которое происходит во время отправки формы в submit.php.

Другой важный аспект – это классы, назначенный текстовым полям – classs=”validate[required,custom[onlyLetter]]”. Эти классы используются плагином валидации для определения правил проверки введенных значений для каждого текстового поля. В нашем примере, мы указываем, что поле обязательное, и разрешено вводить только буквы.

Существует множество доступных правил валидации, вы можете узнать о них на домашней странице плагина.

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

1

Шаг 2 – jQuery

МЫ используем два плагина jQuery – jQtransform для стилизации элементов формы, и formValidator для проверки введенных значений на клиентской стороне.

Очень важно помнить, что кроме клиентской стороны, введенные данные всегда нужно проверять на серверной стороне.

Итак, для начала нам нужно подключить все необходимые библиотеки.

demo.php

[php]
<link rel="stylesheet" type="text/css" href="jqtransformplugin/jqtransform.css" />
<link rel="stylesheet" type="text/css" href="formValidator/validationEngine.jquery.css" />
<link rel="stylesheet" type="text/css" href="demo.css" />

<?=$css?> <!– Special CSS rules, created by PHP –>

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript" src="jqtransformplugin/jquery.jqtransform.js"></script>
<script type="text/javascript" src="formValidator/jquery.validationEngine.js"></script>
<script type="text/javascript" src="script.js"></script>
[/php]

Указанный выше код расположен в секции head, файла demo.php. Сначала мы подключаем CSS-файлы, используемые обоими плагинами, а затем уже библиотеку JQuery и плагины. Возможно, вас заинтересовала строка 5 – это специальный набор CSS-правил, который мы создадим с помощью PHP, для отображения подтверждающего сообщения, как вы увидите в дальнейшем.

Теперь, давайте посмотрим на наш файл script.js.

script.js

[javascript]
$(document).ready(function(){
/* after the page has finished loading */

$(‘#contact-form’).jqTransform();
/* transform the form using the jqtransform plugin */

$("button").click(function(){

$(".formError").hide();
/* hide all the error tooltips */
});

var use_ajax=true;
$.validationEngine.settings={};
/* initialize the settings object for the formValidation plugin */

$("#contact-form").validationEngine({ /* create the form validation */
inlineValidation: false,
promptPosition: "centerRight",
success : function(){use_ajax=true}, /* if everything is OK enable AJAX */
failure : function(){use_ajax=false} /* in case of validation failure disable AJAX */
})

$("#contact-form").submit(function(e){

if(!$(‘#subject’).val().length)
{
$.validationEngine.buildPrompt(".jqTransformSelectWrapper","* This field is required","error")
/* a custom validation tooltip, using the buildPrompt method */

return false;
}

if(use_ajax)
{
$(‘#loading’).css(‘visibility’,’visible’);
/* show the rotating gif */

$.post(‘submit.php’,$(this).serialize()+’&ajax=1′,
/* using jQuery’s post method to send data */

function(data){
if(parseInt(data)==-1)
$.validationEngine.buildPrompt("#captcha","* Wrong verification number!","error");
/* if there is an error, build a custom error tooltip for the captcha */
else
{
$("#contact-form").hide(‘slow’).after(‘<h1>Thank you!</h1>’);
/* show the confirmation message */
}

$(‘#loading’).css(‘visibility’,’hidden’);
/* hide the rotating gif */
});
}

e.preventDefault(); /* stop the default form submit */
})

});
[/javascript]

Весь блок скрипта выполняется внутри метода $(document).ready, который гарантирует нам, свое исполнение, только после окончания загрузки страницы.

Далее, мы используем метод jqTransform(), который определен в плагине jqtransform. Он переделывает и стилизует все элементы формы (тестовые поля, кнопки и др.)

Элемент select заменяется набором дивов и ссылок. Это выглядит здорово, однако влечет за собой некоторые проблемы с плагином валидации, в связи с чем, тултип для селекта нам придется сделать вручную.

После этого, в строке 7, вешаем обработчик событий на нажатие кнопки в нижней части формы, с одной строкой кода, которая прячет отображаемые тултипы с сообщениями об ошибках. Это для того, чтобы страница правильно обновлялась, и подсказки не оставались на странице, если пользователь ввел правильные данные.

Далее, мы инициализируем плагин formValidation, с помощью метода validationEngine() и в строке 24 описываем событие формы onsubmit. Пара моментов, на которые стоит обратить внимание здесь – отдельный тултип в строке 28, и дополнительный параметр ajax=1, в строке 39. Этот параметр использует файл submit.php, для того чтобы определить, передан ли запрос с помощью аякса или получен непосредственно через отправку формы.

Также, обратите внимание, что мы используем специальную переменную use_ajax, для предотвращения работы аякса, если форма не прошла проверку.

2

Шаг 3 – CSS

Все наши CSS-правила описаны в файле demo.css

demo.css

[css]
body,h1,h2,h3,p,quote,small,form,input,ul,li,ol,label{
/* reset some of the page elements */
margin:0px;
padding:0px;
}

body{
color:#555555;
font-size:13px;
background: url(img/dark_wood_texture.jpg) #282828;
font-family:Arial, Helvetica, sans-serif;
}

.clear{
clear:both;
}

#main-container{
width:400px;
margin:30px auto;
}

#form-container{
background-color:#f5f5f5;
padding:15px;

/* rounded corners */
-moz-border-radius:12px;
-khtml-border-radius: 12px;
-webkit-border-radius: 12px;
border-radius:12px;
}

td{
/* prevent multiline text */
white-space:nowrap;
}

a, a:visited {
color:#00BBFF;
text-decoration:none;
outline:none;
}

a:hover{
text-decoration:underline;
}

h1{
color:#777777;
font-size:22px;
font-weight:normal;
text-transform:uppercase;
margin-bottom:5px;
}

h2{
font-weight:normal;
font-size:10px;

text-transform:uppercase;

color:#aaaaaa;
margin-bottom:15px;

border-bottom:1px solid #eeeeee;
margin-bottom:15px;
padding-bottom:10px;
}

label{
text-transform:uppercase;
font-size:10px;
font-family:Tahoma,Arial,Sans-serif;
}

textarea{
color:#404040;
font-family:Arial,Helvetica,sans-serif;
font-size:12px;
}

td > button{
/* A special CSS selector that targets non-IE6 browsers */
text-indent:8px;
}

.error{
/* this class is used if JS is disabled */
background-color:#AB0000;
color:white;
font-size:10px;
font-weight:bold;
margin-top:10px;
padding:10px;
text-transform:uppercase;
width:300px;
}

#loading{
/* the loading gif is hidden on page load */
position:relative;
bottom:9px;
visibility:hidden;
}

.tutorial-info{
color:white;
text-align:center;
padding:10px;
margin-top:10px;
}
[/css]

Обратите внимание на строку 85. Это правило делает кнопки шире, но, к сожалению это плохо выглядит в IE6. Поэтому мы используем специальный CSS-селектор, который игнорируется IE6, но отлично понимают остальные браузеры.

Теперь, все что нам осталось – это PHP.

3

Шаг 4 – PHP

Сначала давайте рассмотрим код в начале файла demo.php

demo.php

[php]
session_name("fancyform");
session_start();

$_SESSION[‘n1’] = rand(1,20); /* generate the first number */
$_SESSION[‘n2’] = rand(1,20); /* then the second */
$_SESSION[‘expect’] = $_SESSION[‘n1’]+$_SESSION[‘n2’]; /* the expected result */

/* the code below is used if JS has been disabled by the user */
$str=”;
if($_SESSION[‘errStr’]) /* if submit.php returns an error string in the session array */
{
$str='<div class="error">’.$_SESSION[‘errStr’].'</div>’;
unset($_SESSION[‘errStr’]); /* will be shown only once */
}

$success=”;
if($_SESSION[‘sent’])
{
$success='<h1>Thank you!</h1>’; /* the success message */

$css='<style type="text/css">#contact-form{display:none;}</style>’;
/* a special CSS rule that hides our form */

unset($_SESSION[‘sent’]);
}
[/php]

Как видите, мы используем массив $_SESSION для хранения двух случайных чисел и ожидаемого результата. Это будет использоваться в дальнейшем, файлом submit.php, для подтверждения того, что капча решена.

Другой интересный момент находится в строке 21, где мы описываем простой CSS-класс. Фактически здесь, мы скрываем форму, и отображаем сообщение об успешной отправке, если у пользователя отключен JS.

submit.php

[php]
require "phpmailer/class.phpmailer.php";

session_name("fancyform"); /* starting the session */
session_start();

foreach($_POST as $k=>$v)
{
/* if magic_quotes is enabled, strip the post array */
if(ini_get(‘magic_quotes_gpc’))
$_POST[$k]=stripslashes($_POST[$k]);

$_POST[$k]=htmlspecialchars(strip_tags($_POST[$k]));
/* escape the special chars */
}

$err = array();

/* some error checks */
if(!checkLen(‘name’))
$err[]=’The name field is too short or empty!’;

if(!checkLen(’email’))
$err[]=’The email field is too short or empty!’;
else if(!checkEmail($_POST[’email’]))
$err[]=’Your email is not valid!’;

if(!checkLen(‘subject’))
$err[]=’You have not selected a subject!’;

if(!checkLen(‘message’))
$err[]=’The message field is too short or empty!’;

/* compare the received captcha code to the one in the session array */
if((int)$_POST[‘captcha’] != $_SESSION[‘expect’])
$err[]=’The captcha code is wrong!’;

/* if there are errors */
if(count($err))
{
/* if the form was submitted via AJAX */
if($_POST[‘ajax’])
{
echo ‘-1’;
}

/* else fill the SESSION array and redirect back to the form */
else if($_SERVER[‘HTTP_REFERER’])
{
$_SESSION[‘errStr’] = implode(‘<br />’,$err);
$_SESSION[‘post’]=$_POST;

header(‘Location: ‘.$_SERVER[‘HTTP_REFERER’]);
}

exit;
}

/* the email body */
$msg=
‘Name: ‘.$_POST[‘name’].'<br />
Email: ‘.$_POST[’email’].'<br />
IP: ‘.$_SERVER[‘REMOTE_ADDR’].'<br /><br />

Message:<br /><br />

‘.nl2br($_POST[‘message’]).’

‘;

$mail = new PHPMailer(); /* using PHPMailer */
$mail->IsMail();

$mail->AddReplyTo($_POST[’email’], $_POST[‘name’]);
$mail->AddAddress($emailAddress);
$mail->SetFrom($_POST[’email’], $_POST[‘name’]);
$mail->Subject = "A new ".mb_strtolower($_POST[‘subject’])." from ".$_POST[‘name’]." | contact form feedback";

$mail->MsgHTML($msg);

$mail->Send();

unset($_SESSION[‘post’]); /* unsetting */

/* the form was successfully sent */
if($_POST[‘ajax’])
{
echo ‘1’;
}
else
{
$_SESSION[‘sent’]=1;

if($_SERVER[‘HTTP_REFERER’])
header(‘Location: ‘.$_SERVER[‘HTTP_REFERER’]);

exit;
}

/* some helpful functions */
function checkLen($str,$len=2)
{
return isset($_POST[$str]) && mb_strlen(strip_tags($_POST[$str]),"utf-8") > $len;
}

function checkEmail($str)
{
return preg_match("/^[\.A-z0-9_\-\+]+[@][A-z0-9_\-]+([.][A-z0-9_\-]+)+[A-z]{1,4}$/", $str);
}
[/php]

Обратите внимание как мы проверяем переменную $_POST[‘ajax’] на предмет установки и правильной работы. Как вы наверное помните, мы устанавливаем ее ранее, в файле script.js, для определения используется ли аякс для извлечения данных.

Две переменные массива $_SESSION errStr и post используются для совместного использования данных между формой и файлом submit.php, в случае выключенного JS. Здесь переменная post содержит отправленный нами массив $_POST и используется для заполнения полей формы, после того как пользователь перенаправляется обратно.

На этом работа над нашей формой обратной связи подошла к концу.

Пример рабочий, за исключением одного маленького недоразумения. Плагин formValidation, создан с целью проводить валидацию только английских символов, так что если вы попытаетесь написать имя по-русски, он выдаст ошибку о том, что нужно вводить только буквы. К счастью это решается путем замены регулярного выражения в файле jquery.validationEngine.js. Найдите строчки:

[javascript]
"onlyLetter":{
"regex":"/^[a-zA-Z\ \’]+$/",
}
[/javascript]

и замените на следующую:

[javascript]
"onlyLetter":{
"regex":"/^[a-zA-Zа-яА-Я’ ]+$/",
}
[/javascript]

После этого, скрипт перестанет игнорировать русские символы.

Скачать архив с примером.

В связи с бесконечными вопросами, специально, отдельно сообщаю: настройка адреса email на который производится отправка писем, находится в файле submit.php, в самом начале файла, выглядит вот так:

[php]
/* config start */

$emailAddress = ”;

/* config end */
[/php]

Перевод статьи “A Fancy AJAX Contact Form“, автор Martin


Posted

in

,

by

Tags:

Comments

124 responses to “Красивая форма обратной связи на основе AJAX”

  1. wicked_kiD Avatar

    обожаю ваш блог))) очень пригодится статья…

  2. Михаил Avatar
    Михаил

    В фф 3.6 beta 1 не корректно отображаются инпуты.

  3. Алексей Avatar
    Алексей

    Классный материал, использовать буду

    Только в опере сообщения об ошибках неправильно позиционируются (

  4. djon Avatar
    djon

    Классный скрипт большое спасибо,и блог просто супер,ребят вопрос по скрипту подскажите где E-mail свой прописать,что то не как не могу найти ))))

    1. dreamhelg Avatar
      dreamhelg

      В файле submit.php, строчка $emailAddress = '';, в кавычках напишите нужный вам адрес

  5. dZ Avatar
    dZ

    А как проще всего такую форму интегрировать в WP ?
    Чтоб она отображалась на одной из страниц.

    1. dreamhelg Avatar
      dreamhelg

      Если вы разбираетесь в шаблонах WP, то интегрировать такую форму не составит особого труда, нужно будет сделать отдельный шаблон для страницы, вставить туда код формы, и подключить в заголовок соответствующие библиотеки, и файлы. А потом просто создать такую страницу в админке.

  6. vlad Avatar

    Заменил строки в jquery.validationEngine.js. Русский шрифт принимается, но письмо приходит в кракозябрах. Как это исправить? подскажите пожалуйста. А так, форма отличная. Еще при изменении названия формы выскакивает выше формы ошибка: Warning: session_start() [function.session-start]: Cannot send session cache limiter – headers already sent (output started at /home/flexi/domains/flexi-bill.com/public_html/contact/index.php:1) in /home/flexi/domains/flexi-bill.com/public_html/contact/index.php on line 4

    1. dreamhelg Avatar
      dreamhelg

      Какие именно строки вы меняли в jquery.validationEngine.js? А главное зачем, если я выложила архив, с внесенными уже изменениями?

  7. vlad Avatar

    Перекодировал скрипт с UTF-8 на 1251. Теперь при изменении названия ошибка не выскакивает, но письмо, написанное кирилицей, приходит в кракозябрах. Где это исправить? Подскажите, пожалуйста.

  8. vlad Avatar

    Хотя на другом хостинге 1251 не проходит.

  9. eastbelle Avatar

    dreamhelg, подскажите пожалуйста, в чем можете быть причина. Форма обратной связи во всех браузерах кроме мозилы работает прекрасно. Вот ссылка http://fabrikart.ru/feedback/ плиз попробуйте открыть в мозиле. Устала бороться=( у меня, что-то ничего не получается

    1. dreamhelg Avatar
      dreamhelg

      А можно подробнее? Сообщение отправляется нормально. Или вы по поводу съехавшей надписи темы письма?

  10. eastbelle Avatar

    я по поводу надписи “-Выберите-“, которая перекрывается кнопкой. Хотелось, бы, чтобы надпись выравнивалась по левому краю. Перепробовала все, но не действует=(

    1. dreamhelg Avatar
      dreamhelg

      Здесь как раз все довольно просто. В вашем файле стилей table.css , есть такая строчка

      td {
      padding:1px 8px;
      text-align:center;
      }

      Вот именно выравнивание текста по центру и дает такой нехороший эффект. Попробуйте убрать ее, или заменить на text-align: left, и результат увидите сразу же.

      1. eastbelle Avatar

        dreamhelg, вы гений! Спасибо огромное. Как нашли, что именно из-за этого?

        1. dreamhelg Avatar
          dreamhelg

          Да не за что 😉 Гений в данном случае не я, а разработчики firebug.

          1. eastbelle Avatar

            ведь я тоже пробовала firebugом=( Значит, не умею им пользоваться =))) Но, я чувствовала, что тут дело в наследовании. Еще раз спасибо. Уже подписалась и буду с удовольствием читать;-)

  11. vlad Avatar

    Все равно письмо написанное кирилицей приходит в кракозябрах. Так же при изменении названия формы выскакивает ошибка. Это у всех так, или только у меня? Помогите, пожалуйста, если знаете как.

    1. dreamhelg Avatar
      dreamhelg

      Только что, скачала архив с приведенным примером, и залила на тестовый сервер. Сообщение написано кириллицей, приходит нормально. Попробуйте заново скачать архив и заменить все файлы. По поводу изменения названия тоже не понятно. Потому что у меня название формы поменялось без проблем, она ведь изначально была полностью на английском языке. В общем, сначала пусть у вас заработает представленный мной пример, а потом только начинайте что-то менять в форме.

  12. vlad Avatar

    Странно, но из всех моих почтовых ящиков, только на яндекс принимает кирилицу. Еще такой вопрос: каким редактором вы правите? После правки блокнотом, и возникает ошибка, в самом начале кода появляются лишние знаки, которые видны в другом редакторе. Я их удаляю, и тогда все ок. А если правлю в этом редакторе, тогда вместо букв знаки вопросов.

    1. dreamhelg Avatar
      dreamhelg

      Действительно странно. Я тестировала на яндекс почту и гмейл везде одинаково приходит нормально. Если хотите, можете сказать мне свой адрес, я внесу в скрипт, и проверим от меня.

      По поводу редактора, я редактирую Аптаной

  13. vlad Avatar

    Мой адрес volandnet@ukr.net на котором кракозябры

    1. dreamhelg Avatar
      dreamhelg

      Поставила в скрипте ваш почтовый адрес, попробуйте отправить сообщение вот отсюда: http://demo.dreamhelg.ru/contactform/demo.php

  14. vlad Avatar

    Ктати и с яндекса, хотя там нормально, почтовая программа SeaMonkey принимает некорректно.

  15. vlad Avatar

    Нет. На этот почтовый ящик все равно кирилица приходит не корректно.

    Еще, что я хотел спросить: Эта форма проверялась на предмет безопасности?

    1. dreamhelg Avatar
      dreamhelg

      В таком случае, даже не знаю чем вам помочь. Насчет безопасности тоже не знаю, возможно вы первый и проверите.

    2. Dannie Avatar

      Попробуйте в файле class.phpmailer.php изменить кодировку на ту, в которой работает сайт, например:

      public $CharSet = 'UTF-8';

  16. vlad Avatar

    Все-равно, спасибо. Очень интересная форма.

  17. DW03 Avatar

    Спасибо за пост. нужно будет попробовать ))

  18. Adham Avatar
    Adham

    Доброе время суток!
    спасибо за форму!) но есть маленькая проблемка)
    убрал строку тема и сделал вместо нее телефон, сделал проверку jsvalidate’ом.

    if(!checkLen('name'))
    $err[]='The name field is too short or empty!';

    if(!checkLen('email'))
    $err[]='The email field is too short or empty!';
    else if(!checkEmail($_POST['email']))
    $err[]='Your email is not valid!';

    if(!checkLen('phone'))
    $err[]='The phone field is too short or empty!';

    if(!checkLen('message'))
    $err[]='The message field is too short or empty!';

    if((int)$_POST['captcha'] != $_SESSION['expect'])
    $err[]='The captcha code is wrong!';

    if(count($err))
    {
    if($_POST['ajax'])
    {
    echo '-1';
    }

    else if($_SERVER['HTTP_REFERER'])
    {
    $_SESSION['errStr'] = implode('',$err);
    $_SESSION['post']=$_POST;

    header('Location: '.$_SERVER['HTTP_REFERER']);
    }

    exit;
    }

    $_POST['subject'] = "Форма запроса";
    $msg=
    'Name: '.$_POST['name'].'
    Email: '.$_POST['email'].'
    Phone: '.$_POST['phone'].'
    IP: '.$_SERVER['REMOTE_ADDR'].'

    Message:

    '.nl2br($_POST['message']).'

    ';

    вот код submit.php

    проблемка когда заполняешь форму и нажимаю отправить ничего не случается. форма не реагирует на нажатие кнопки.)

    1. dreamhelg Avatar
      dreamhelg

      Ну, довольно сложно ответить на вопрос, что-же не так вы сделали, возможно удалили что-то нужное в файле demo.php, если форма не реагирует на нажатие кнопки, может быть убрали строку action в коде формы.

      1. Adham Avatar
        Adham

        Спасибо!) проблема уже решена)

  19. M!ke Avatar
    M!ke

    а в html как встроить?

    1. dreamhelg Avatar
      dreamhelg

      Не совсем поняла, что вы имеет в виду

    2. anadikt Avatar

      В тексте все подробно написано как это осуществить )) советую еще раз прочитать)

  20. M!ke Avatar
    M!ke

    Скачал с сайта архив с примером. Загрузил на свой сервер. Выдает такую ошибку – http://imglink.ru/pictures/17-01-10/93172acdb4f40a9eef30d65f43a0796f.jpg
    И если отправить письмо на mail.ru, то приходит сообщение в кракозябрах.

  21. Max Avatar
    Max

    Возникла проблема. Мой сайт работает на кодировке windows-1251, а как я понял скрипт на юникоде, в следствии этого при нажатии кнопки вылазиет надпись “Fatal error: Call to undefined function mb_strlen() in site\feedback\submit.php on line 107”. Подскажите, как сделать так чтобы скрипт наботал на windows-1251

    1. dreamhelg Avatar
      dreamhelg

      Для начала, при этой ошибке, вам нужно установить модуль php – mbstring

      По крайней мере, ошибка появляется из-за него. К тому же какая версия PHP установлена на вашем сервере?

  22. cava Avatar
    cava

    видел в инете точь в точь такой же урок,и с тако же ошибкой, исходя из того,что урок был написан 13-11-2009,ты плагиатор

    1. dreamhelg Avatar
      dreamhelg

      Дайте ссылку, очень интересно, кто публикует мой перевод

  23. Apache Avatar
    Apache

    НЕ РАБОТАЕТ, ничего не отправляет, просто крутится кружок и все….

    1. Apache Avatar
      Apache

      все дело в хостинге, на другом работает, подскажите пожалуйста что с ним можно сделать

      1. dreamhelg Avatar
        dreamhelg

        На вашем хостинге обязательно должен быть установлен PHP5

  24. Олександр Avatar
    Олександр

    Здравствуйте.
    У меня в файле script.js не выполняется строка 24:
    $("#contact-form").submit(function(e){
    Может я что-то зашлифовал )
    С выключеным javascript отправляется.
    Что можете посоветовать?
    Спасибо.

  25. Alex Avatar
    Alex

    Здравствуйте.
    Подскажите как можно сделать проверку логина, если введенный логин занят то выводится сообщение, как это можно сделать в этом примередопустим добавить проверку в поле Имя…. заранее спасибо.

  26. Alex Avatar
    Alex

    Вопрос снимается, уже разобралсО ))))

  27. Алексей Avatar

    У меня чета не получается, даже с вашим примером((((
    Я загружаю файлы из архива, далее захожу на страницу demo.php и после заполнения формы и нажатия кнопки отправить, меня перекидывает на submit.php – белый экран (((( как быть?

    1. dreamhelg Avatar
      dreamhelg

      Проверьте версию PHP, для примера требуется PHP5

  28. Алексей Avatar

    У меня вот что на сервере – PHP v5.2.10. Для настройки параметров PHP5.2.10 кликните по имени модуля, внутри куча модулей которые можно включить. Есть аська? Выже фрилансер )))) может договоримся $? помогите….

  29. Grigory Avatar
    Grigory

    Здравствуйте!

    Огромное спасибо за пример, очень нравится!
    Столкнулся с проблемой, если добавить еще полей в форму, перестает работать аяксовая проверка правильности ввода, т.е. получается, что по кнопке “отправить” страница перегружается и все ошибки выводятся внизу, под формой..

    Не подскажете, где копать? Как только +1 поле, сразу такая картина

  30. Сергей Ганноченко Avatar
    Сергей Ганноченко

    jQtransform не работает в opera 10, а это серьёзный косяк.

    1. dreamhelg Avatar
      dreamhelg

      Opera 10.10 – все вроде работает

  31. Игорь Avatar

    Тоже столкнулся с проблемой кодировки.
    Тема приходила в крокозябах (хотя странно, она же латиницей.. хм.)

    Если кому поможет: //файл submit.php//
    (строка 64)
    переменную $msg замените на
    $msg='
    Subject: '.$_POST['subject'].'
    Name: '.$_POST['name'].'
    Email: '.$_POST['email'].'
    IP: '.$_SERVER['REMOTE_ADDR'].'
    Message:
    '.nl2br($_POST['message']).'
    ';

    82 строку замените на
    $mail->Subject = "Contact form";

    а вообще спасибо! =)

  32. Василий Avatar

    Отличная форма

  33. Александр Avatar
    Александр

    Господа!
    По поводу кодировки.
    Как писал Dannie в 14-12-2009

    Попробуйте в файле class.phpmailer.php изменить кодировку на ту, в которой работает сайт, например:

    public $CharSet = ‘UTF-8’;

    Надо поменять на ту кодировку на которой у вас работает ваш проект.

  34. Денис Avatar

    Спасибо, первая аякс форма которую я нашел, дружащая хоть как то с русским. Сейчас ещё изучу этот блог, может чего интересного найду.

  35. Денис Avatar

    хотя радость была преждевременной. Почему то, при кодировке страницы в windows-1251, в которой стоит форма, не работает jquery.validationEngine.js

    а если страницу в любой другой кодировке, то jquery.validationEngine.js работает, но всё остальное кракозябрами. Пока решение не нашел.

  36. Tealk Avatar
    Tealk

    а можно ли к этой форме прикрутить отправку файла? и если можно то не подскажете как?

  37. Osadach Avatar

    Здравствуйте. Отличная форма все отправляет . На почту приходит нормально. Только одна несущественная проблемка. Когда какое-то поле не вводишь , то внизу формы вылазиет сообщение об ошибке не на Русском и не как на примере. В принципе это не смертельно, но хотелось бы чтоб было как на примере. Вопрос:Что не так сделал или где еще что переписать? Заранее Спасибо.

    1. Osadach Avatar

      Почему-то сайт не высветился , хотя поле заполнял))))
      http://www.aqueduct-v-v.ru/about.html

  38. RodgerFox Avatar
    RodgerFox

    расскажите как правильно соединить submit.php и demo.php с WP точнее код в начале demo.php. Большое спасибо.

  39. Эрик Avatar
    Эрик

    А можно спросить….
    не могли бы вы это написать в виде плагина…чтоб можно было просто загрузить – распаковать – активировать…а то я новичок и как-то страшно лезть во внутрь сайта…да и не умею я этого…. =)

    помогите пажалста…очень понравилась форма…. очень хочется ее на свой сайт)

  40. алан Avatar
    алан

    Добрый день. Как убрать капчу?

  41. chelovertic Avatar
    chelovertic

    смотреть всем срочно

    1. Braghagerot Avatar

      Виктория как же вы так со мной поступили?

  42. Артем Avatar
    Артем

    Классная форма! А есть аналог для joomla? И, если есть, как называется?

  43. Антон Avatar
    Антон

    То что надо! Спасибо огромное! Для визитки со статическими страницами это идеальный вариант, да и вообще для всех сайтов без использования доп. модулей к смс

  44. Clans Avatar

    Спасибо! Добавил себе в блог: http://blogg.ck.ua/feedback

  45. Павел Avatar

    Очень нужна такая форма, только с аттачем (вложением картинки, фото), у самого знаний не хватает доработать. Если можете – подскажите, что и где нужно добавить, кроме HTML формы. Спасибо.

  46. Егор Avatar

    Вот тут есть еще пример

  47. Sergey Avatar
    Sergey

    А где же указывается собственный почтовый ящик, на который всё приходит?

    1. Sergey Avatar
      Sergey

      решил задачу. но поменяв названия полей (имя, ip-адрес) в теле письма на русские буквы, приходит не в русском, а в символах..

  48. Борис Avatar
    Борис

    А скажите, можно добавить дополнительное поля или поля?
    Думаю, интересно будет всем!

  49. Олег Avatar
    Олег

    И все таки, почему крякозябры то в сообщениии? если оно русское.

  50. Alex Avatar
    Alex

    А пожскажите пожалуйста, как в неё добавить поле “Прикрепить фаил”, что бы вместе с сообщением отправлялся и фаил?? Очень нужно так сделать! Подскажите на почту: psash7 @ mail. ru

    1. Алена Avatar
      Алена

      Меня тоже интересует как добавить в обработчик команды прикрепления файлов. Побывала разные варианты ничего не получается. Подскажите пожалуйста.

  51. Александр Avatar
    Александр

    Как настроить скрипт, что-бы отсылал письма на почтовый ящик?
    Пытался настроить выдает Invalid address: You must provide at least one recipient email address.

    Как убрать капча для быстрых вопросов?

  52. Alea Avatar

    Вот еще альтернативный вариант:

    http://majes.ru/

    я себе их ставлю, не подводили.

  53. Алексей Avatar
    Алексей

    я ламер какой то. ниче не понимаю. люди добрые как прикрутить это дело. где прописать адрес почты. подскажите

  54. gologurskaya Avatar

    Привет! у меня сообщения об ошибке выводятся внизу может подскажете в чем проблема?

  55. gologurskaya Avatar
    gologurskaya

    я разобралась эта форма некорректно работает при кодировке windous-1251

  56. Саша Avatar

    А где вставить или поменять е-маил адрес, на который должны приходить сообщения?

  57. Георгий Avatar

    Сделал я по подобным описанием форму – 3 дня трахался, так и не заработала! Такое впечатление что эти “добрые” дяди фигню выкладывают для привлечения посетителей, а сами ржут над недоумевающей публикой!

  58. vigilant Avatar
    vigilant

    форма очень классная и работает, а все те, кто ругает – криворукие чтоли? там же все написано и настолько просто и понятно, что проще уже просто некуда

  59. Andrei Avatar
    Andrei

    Пожалуйста, тыкните меня носом в строчку где нужно заменить EMAIL на свой 😀

    1. dreamhelg Avatar
      dreamhelg

      Начало файла submit.php, там это настраивается.

      1. Andrei Avatar
        Andrei

        Уже нашел, спасибо, но возникла другая проблема
        Письмо не приходит на емэйл. Дело в том что сайт еще в стадии разработки на локальной машине.
        Я использую Denwer 3 (php 5.3). Может проблема именно втом что с локальной машины пытаюсь отправить?

        1. Борис Власенко Avatar

          sendmail нужно установить. В Денвере нет его.
          Внутри денвера была статья на эту тему

  60. Павел Avatar

    Я пользуюсь генератором форм обратной связи: перейти

    С программированием дружу плохо так как.

  61. Иван Avatar

    Как можно подправить class.phpmailer.php под windows-1251?

  62. Greg Avatar
    Greg

    Странная проблема.

    Тема – это поле select. Валидация для него прописанна не в классе, как для текстовых полей, а в script.js именно для этого поля.
    Если я добавляю еще один select в форму и прописываю валидацию через класс, то аяксовский алерт выскакивает не напротив поля, а в самом верху страницы. Для текстовых полей все ок, но для селектов – нефига.
    Если пытаюсь скопипастить кусок кода в script.js

    if(!$(‘#sunject’).val().length)

    {

    $.validationEngine.buildPrompt(“.jqTransformSelectWrapper”,”* Это поле обязательное”,”error”)

    return false;

    }

    и сделать такой же для второго select-a, то у формы слетают стили.

    как мне сделать так, чтобы алерт вылезал ровно напротив поля?..

  63. Дмитрий Avatar
    Дмитрий

    Дурацкий вопрос наверное… но
    Как сменить цвет формы 🙂 а лучше вообще его убрать чтоб остались только поля?
    Все css перерыл не могу понять:(

  64. Дмитрий Avatar
    Дмитрий

    :)Правильно заданный вопрос – половина ответа – все дело в невнимательности.
    Форма дублируется и в дубликате не изменил ссылку на css – соответственно правлю – и ничего не происходит 🙂

  65. konstantin Avatar

    Алан, зачем капчу убирать? Вас просто завалят спамом потом!!!

  66. Егор Avatar

    Не работает капча!!!! В чем проблема??? Ссылка

  67. Сергей Avatar

    Собираюсь использовать форму, но на modx. Может получится, отпишусь)

    1. Dkflbvbh Avatar
      Dkflbvbh

      Ну и как? Получилось?

  68. Роман Avatar

    А есть ли подобная форма, но с отправкой файлов?

  69. Виктор Avatar
    Виктор

    Проблема, помогите! Не могу поменять кодировку на windows-1251?

    1. Александр Avatar
      Александр

      В файле class.phpmailer.php в 59 строчке поменя на это –
      public $CharSet = ‘windows-1251’;*/

  70. Serega Avatar
    Serega

    Какие строки нужно править? Как оно отправляет вообще? Где нужно вводить ту почту, от имени которой будет идти рассылка, где вводить её пароль и логин?

  71. Arina Avatar
    Arina

    Форма классная. Все работает. Установить можно даже новичку, если он, конечно, внимательно следует инструкциям. НО. Форма корректно работает только в “родительском” коде – UTF-8. Если сайт или страничка на которой вставляется код обратной связи написан в windous-1251 – будут проблемы – сама страница с формой обратной связи в браузерах (к примеру, IE, Мазила, Опера) будет отображаться в абраказябрях. Можно решить эту проблему поменяв код не только в сценариях служебных файлов, но и перезаписав сами файлы (их два) в требуемом коде. Форма не только будет отображаться на русском, но заработает корректно – письма будут приходить без абразябр. Но опять НО. Полетят стили. Если это не пугает – вперед и с песнями.

  72. Сергей Avatar
    Сергей

    Хотел бы использовать тему, но ламер страшный.
    Собственно задача состоит в том, чтобы отменить валидацию и убрать поле “Тема” и капча
    Помогите, пожалуйста)

  73. Сергей Avatar

    Допиливать придется, но как основа самая лучшая

  74. Artem Avatar

    Супер!!! Я очень долго искал такую форму! Спасибо!

  75. Ирина Avatar

    Красиво очень, вопрос можно ли использовать отсюда информацию, чтобы например преодразовать у меня форму заполнения заказа?

    Например вот тут

    Спасибо

  76. Ольга Avatar
    Ольга

    Меняла кодировку. В итоге сейчас письма не отправляются, хотя с виду все работает. В чем проблема? Сейчас стоит utf-8

  77. Генка Avatar
    Генка

    Всё конечно здорво. Но вот мне например надо. сделать что то подобное но только для Сообщений о битых Ссылках на сайте. К примеру мне даром не нужны имя и емайл отправителя. А вместо этого нужно поле автоматической вставки адреса страницы с которой было отправлено сообщение. Вот так вот. И хрен найдёшь нормального вариант реализации такой задумки.

  78. Александр Avatar
    Александр

    Мысль такая , я очень благодарен автору этого прекрасного сайта, вероятно хозяйка талант в дизайне тоже ,но я не об этом, тема кодировки не закрыта ))

    1. Юрий Avatar
      Юрий

      В class.phpmailer.php поменяй кодировка на utf-8 в строке public $CharSet = ‘ ‘; я поменял у меня все работает нормально)))

  79. Алексей Avatar
    Алексей

    Спасибо, отличная форма. Прикрутил к сайту на joomla.

  80. Иван Avatar

    Для индикации AJAX операций можно также воспользоваться маленькой JavaScript библиотекой AjaxLoader.js (http://musicvano.github.io/ajaxloader/) для генерации спиннеров и динамического изменения их параметров.

  81. Рамазан Avatar

    Здравствуйте! Как встроить форму в друпал сайт?

  82. Александр Avatar
    Александр

    перекопал все что смог, победил кракозяблы. ошибку Warning: session_start() [function.session-start]: Cannot send session cache limiter – headers already sent (output started at /home/ufagub/public_html/stair/kontakt.php:7) in /home/ufagub/public_html/stair/kontakt.php on line 307 победить не смог

    http://stair.kmk-company.ru/kontakt.php

    1. Max Avatar
      Max

      Возможно, два раза сессию запустил.
      Автору спасибо за хороший мануал!

  83. Николай Avatar
    Николай

    Подскажите как убрать капчу?

  84. Андрей Avatar

    Форма очень красивая, но странно, письма не отправляет. ящик прописал. Пишет Спасибо ваше письмо отправлено… но письма не приходят..

  85. Александр Avatar
    Александр

    В модальное окно вставляли эту форму обратной связи ? если да то хотелось бы код скрипта ajax и заметить его на submit.php , так как в модальных окнах после нажатия отправить форма просто убирается и не пишет спасибо и тд тп

  86. Максим Avatar
    Максим

    Здравствуйте! Язык ввода имени на русский, по вашему примеру, поменять можно. Но при получении письма, в место кириллицы, появляются кракозябрики… Где можно настроить кодировку, в которой будет отправлено письмо! Спасибо

  87. Ольга Avatar

    Пишет капчу неправильно http://advnalog.ru/demo.php почему может быть так?

  88. Нуб Avatar
    Нуб

    Как победить кракозябры:
    В папке phpmailer открываем файл class.phpmailer.php и на 59-ой строке вместо public $CharSet = ‘iso-8859-1’;
    пишем public $CharSet = ‘utf-8’;.
    Сохраняем,проверяем.

  89. Александр Avatar

    Здравствуйте!
    У меня она вообще что то неработает, сайт на joomla пытаюсь вывести в modal окне? было у кого такое?

  90. Игорь Avatar
    Игорь

    Доброго времени суток
    Спасибо за форму, все отлично, но у меня вопрос как добавить несколько текстовых полей, с последующей отправкой, пытаюсь у меня не получается если можно пример

Leave a Reply

Your email address will not be published. Required fields are marked *