Форма обратной связи для сайта с отправкой на почту

Александр Мальцев
198K
932
17
Форма обратной связи для сайта с отправкой на почту
Содержание:
  1. Назначение и основные характеристики формы обратной связи
  2. Исходные коды формы обратной связи
  3. Скриншоты формы обратной связи
  4. Строение формы обратной связи
  5. Установка и настройка формы обратной связи
  6. Установка нескольких форм обратной связи на одной странице
  7. Как отправить почту по SMTP через Gmail в PHPMailer
  8. Комментарии

В этой статье рассмотрим как подключить на сайт готовый скрипт формы обратной связи и настроить его под свои поля. Данный скрипт написан на PHP, AJAX и jQuery.

Назначение и основные характеристики формы обратной связи

Форма обратной связи (feedback form) — это один из способов связи клиентов (посетителей сайта) с менеджерами или организаторами ресурса.

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

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

Контактная форма состоит из полей. Это процесс детализации позволяет чётко определить данные, которые нужно указать пользователю. Кроме этого, нет необходимости вводить электронную почту администратора или менеджера ресурса, т.е. email адрес куда эту информацию нужно отправить.

Основные характеристики этой php контактной формы:

  • работа без перезагрузки страницы (через ajax);
  • наличие защиты от спама (с помощью капчи);
  • возможность добавления к данным для отправки файлов;
  • валидация (проверка) данных, которая выполняется как на стороне клиента (в браузере), так и на стороне сервера;
  • отправка данных на почту (добавленные файлы можно настроить так, чтобы они приходили как посредством вложений, так и в виде ссылок в теле письма);
  • сохранение результатов обработки формы в лог.

Исходные коды формы обратной связи

Проект формы обратной связи находится на GitHub по этому адресу. Распространяется форма под лицензией MIT.

Для работы серверных сценариев формы необходим php не ниже версии 5.6.

Текущая версия формы 3.0.1. Данная форма имеет дизайн, выполненных с помощью стилей, собранных в файле «style.css». Скачать контактную форму можно по этой ссылке.

Другие релизы этой формы можно посмотреть на этой странице, а также на «Яндекс.Диск».

Демо формы «FeedbackForm»

Скриншоты формы обратной связи

Внешний вид формы обратной связи Как осуществляется валидация формы обратной связи Отображение информации об успешной отправки формы обратной связи

Строение формы обратной связи

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

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

Принцип работы AJAX формы обратной связи

Из схемы видно, что форма обратной связи состоит из 2 основных частей: клиентской и серверной.

Клиентская часть данной формы представлена посредством следующих файлов:

  • index.html - веб-страница, содержащая html5 форму обратной связи;
  • process-forms.js - JavaScript сценарий, выполняющий всю логику по обработке формы на стороне клиента;
  • jquery.js - библиотека jQuery, необходимая для работы скриптов файла process-forms.js.

По умолчанию HTML форма, представленная в проекте, состоит из:

  • текстового поля для ввода имени;
  • текстового поля для ввода email-адреса;
  • textarea поля для ввода текста сообщения;
  • элемента input с type="file" (для добавления файлов);
  • капчи (для защита от спама);
  • чекбокса, посредством которого пользователь соглашается с условиями по обработке представленной им в форме информации;
  • кнопки, посредством которой пользователь осуществляет отправку данных формы на сервер.

Код JavaScript, находящийся в файле «process-forms.js» содержит всю логику, необходимую для обработки формы на стороне клиента.

Он выполняет:

  • проверку (валидацию) данных формы перед отправкой их на сервер; не корректные данные обводятся в красную рамку и снабжаются подсказкой; выполнение проверки текстовых полей осуществляется с использованием HTML5 функции checkValidity;
  • загрузку и отображение файлов, которые будут отправлены на сервер; изображения отображаются с превью (на основе объекта FileReader); организовано это с использованием элемента input с type="file" и установленого атрибута multiple;
  • обновление кода капчи и получения нового изображения на котором он написан;
  • отправку данных на сервер посредством метода POST без перезагрузки страницы;
  • обработку ответа от сервера и отображение его пользователю.

Серверная часть формы обратной связи состоит из:

  • captcha.php (скрипта для генерации капчи);
  • oswald.ttf (шрифта, посредством которого код капчи пишется на изображении);
  • background.png (изображения (фона), на которое накладывается текст капчи);
  • process.php (скрипта, выполняющего обработку данных формы на сервере; при их успешной проверке осуществляет отправку этих данных на email; результат своего выполнения возвращает в формате JSON);
  • файлов, находящихся в каталоге PHPMailer (php библиотеки, позволяющей более просто и безопасно отправлять электронные письма).
Серверная часть формы обратной связи

PHP скрипт process.php выполняет следующие функции:

  • проверяет метод запроса, а также как он послан (с помощью AJAX или нет);
  • выполняет очистку (фильтрацию) данных (для защиты от XSS);
  • выполняет проверку (валидацию) полей формы;
  • проверяет правильность введённого пользователем кода капчи;
  • проверяет, соответствуют ли полученные файлы установленным характеристикам;
  • перемещает файлы, отправленные пользователем, под уникальными именами в заданную директорию на сервере;
  • в случае успешного выполнения всех вышеприведённых действий отправляет письмо (email) с вложениями по указанному адресу. Кроме отправки письма он также сохраняет данные формы в текстовый файл;
  • отправляет клиенту (браузеру пользователя) результат (ответ) в формате JSON, содержащий сведения об успехе или возникшие при обработке формы ошибки.

Установка и настройка формы обратной связи

Установка формы обратной связи на сервер осуществляется путём копирования папки feedback в корневую директорию сайта.

После копирования контактная форма на сайте с доменным именем sitename.ru будет доступна адресу http://sitename.ru/feedback/ или https://sitename.ru/feedback/ в зависимости от используемого протокола.

Основные действия по настройке формы:

  1. Определиться с полями формы (файл index.html). При необходимости добавить новые поля или удалить существующие.
  2. Изменить настройки инициализации формы в файле main.js.
  3. Изменить переменные и константы в файле process.php.
  4. При изменении полей HTML формы внести коррективы в файл process.php.
  5. Поправить файл email.tpl (шаблон email письма). Если вы отправляете информационное письмо клиенту об успешной отправке сообщения, то необходимо отредактировать и файл email_client.tpl.

Указание обработчика HTML форме осуществляется с помощью атрибута action:

<form id="feedback-form" action="/feedback/process/process.php" enctype="multipart/form-data" novalidate>
  ...
</form>

Настройка файла main.js

Настройка JavaScript кода осуществляется посредством создания экземпляра объекта ProcessForm и указания ему необходимых параметров:

// selector: '#feedback-form-2' - селектор формы (по умолчанию '#feedback-form')
var form2 = new ProcessForm({
  selector: '#feedback-form-2'
});
form2.init();

Более детальная настройка JavaScript сценария для обработки той или иной формы осуществляется посредством указания дополнительных ключей:

/*
Параметры указываются в виде:
{
ключ: значение;
ключ: значение;
...
}

selector - селектор формы (по умолчанию '#feedback-form')
maxSizeFile - максимальный размер файла в мегабайтах (по умолчанию 0.5)
validFileExtensions - допустимые расширения файлов для загрузки (по умолчанию 'jpg','jpeg','bmp','gif','png') 
*/

С помощью функции-конструктора ProcessForm можно обрабатывать любое количество форм. Осуществляется это следующим образом:

// selector: '#feedback-form' (по умолчанию)
var form1 = new ProcessForm();
form1.init();
// selector: '#feedback-form-2'
var form2 = new ProcessForm({
  selector: '#feedback-form-2'
});
form2.init();
// selector: '#feedback-form-3'
var form3 = new ProcessForm({
  selector: '#feedback-form-3'
});
form3.init();

Ошибки валидации сценарий JavaScript отображает посредством выделения элемента формы красной рамкой и сообщением, расположенным под элементом формы.

Настройка серверного сценария process.php

Файл process.php содержит некоторые константы и переменные, которые настраивают алгоритм его работы:

/* 1 ЭТАП - НАСТРОЙКА ПЕРЕМЕННЫХ */
const 
  IS_CHECK_CAPTCHA = true, // проверять капчу
  IS_SEND_MAIL = true, // отправлять письмо получателю
  IS_SEND_MAIL_SENDER = false, // отправлять информационное письмо отправителю
  IS_WRITE_LOG = true, // записывать данные в лог
  IS_SEND_FILES_IN_BODY = true, // добавить ссылки на файлы в тело письма
  IS_SENS_FILES_AS_ATTACHMENTS = true, // необходимо ли прикреплять файлы к письму
  MAX_FILE_SIZE = 524288, // максимальный размер файла (в байтах)
  ALLOWED_EXTENSIONS = array('jpg', 'jpeg', 'bmp', 'gif', 'png'), // разрешённые расширения файлов
  MAIL_FROM = 'no-reply@mydomain.ru', // от какого email будет отправляться письмо
  MAIL_FROM_NAME = 'Имя_сайта', // от какого имени будет отправляться письмо
  MAIL_SUBJECT = 'Сообщение с формы обратной связи', // тема письма
  MAIL_ADDRESS = 'manager@mydomain.ru', // кому необходимо отправить письмо
  MAIL_SUBJECT_CLIENT = 'Ваше сообщение доставлено'; // настройки mail для информирования пользователя о доставке сообщения
$uploadPath = dirname(dirname(__FILE__)) . '/uploads/'; // директория для хранения загруженных файлов

Как формируется результат в process.php

Формирование результата обработки формы на стороне сервера (по умолчанию process.php) осуществляется с помощью переменной $data.

Основной результат обработки формы устанавливается посредством ключа result, который может иметь следующие значения:

  • success - успешная обработка формы на сервере.
  • error - возникла ошибка при проверке формы.

Создание сообщения, содержащей подробную информацию об ошибке осуществляется с помощью этой же переменной ($data), но имеющей в качестве ключа имя HTML элемента:

Например, формирование ошибки для поля email:

$data['email'] = 'Адрес электронной почты не корректный';

Создание сообщений для вывода в консоль браузера осуществляется с помощью ключа log:

$data['log'][] = 'Одно сообщение';
$data['log'][] = 'Ещё одно сообщение';

Как осуществляется добавление файлов в письмо

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

Код php, добавляющий в тело письма ссылки на файлы:

// добавление файлов в виде ссылок
if (IS_SEND_FILES_IN_BODY) {
  if (isset($attachments)) {
    $listFiles = '<ul>';
    foreach ($attachments as $attachment) {
      $fileHref = substr($attachment, strpos($attachment, 'feedback/uploads/'));
      $fileName = basename($fileHref);
      $listFiles .= '<li><a href="' . $startPath . $fileHref . '">' . $fileName . '</a></li>';
    }
    $listFiles .= '</ul>';
    $bodyMail = str_replace('%email.attachments%', $listFiles, $bodyMail);
  } else {
    $bodyMail = str_replace('%email.attachments%', '-', $bodyMail);
  }
}

В email шаблоне место, в которое будут вставлены ссылки, определяется плейсхолдером %email.attachments%:

Файлы:<br>
%email.attachments%

Прикрепление файлов к email письму в process.php осуществляется следующим образом:

// прикрепление файлов к письму
if (IS_SENS_FILES_AS_ATTACHMENTS) {
  if (isset($attachments)) {
    foreach ($attachments as $attachment) {
      $mail->addAttachment($attachment);
    }
  }
}

Записывание данных формы в лог

Кроме отправки формы на email, php-скрипт process.php также осуществляет добавление отправленных данных в файл.

/* 8 ЭТАП - ЗАПИСЫВАЕМ ДАННЫЕ В ЛОГ */
if ($data['result'] == 'success' && IS_WRITE_LOG) {
  try {  
    $name = isset($name) ? $name : '-';
    $email = isset($email) ? $email : '-';
    $message = isset($message) ? $message : '-';
    $output = "---------------------------------" . "\n";
    $output .= date("d-m-Y H:i:s") . "\n";
    $output .= "Имя пользователя: " . $name . "\n";
    $output .= "Адрес email: " . $email . "\n";
    $output .= "Сообщение: " . $message . "\n";
    if (isset($attachments)) {
      $output .= "Файлы: " . "\n";
      foreach ($attachments as $attachment) {
          $output .= $attachment . "\n";
      }
    }
    file_put_contents(dirname(dirname(__FILE__)) . '/logs/logs.txt', $output, FILE_APPEND | LOCK_EX);
  } catch(Exception $e) {
  }
}

Как убрать капчу из формы обратной связи

Если вам не нужна капча, то необходимо:

1. Удалить из HTML формы блок капча:

<!-- Капча -->
<div class="form-group captcha">
  <img class="img-captcha" src="/feedback/captcha/captcha.php" data-src="/feedback/captcha/captcha.php">
  <div class="btn btn-light position-relative refresh-captcha">Обновить</div>
  <div class="form-group">
    <label for="captcha" class="control-label">Код, показанный на изображении</label>
    <input type="text" name="captcha" maxlength="6" required="required" id="captcha" class="form-control captcha" placeholder="******" autocomplete="off" value="">
    <div class="invalid-feedback"></div>
  </div>
</div>

2. В php обработчике формы (process.php) установить константе IS_CHECK_CAPTCHA значение false.

Как добавить в форму новое поле

В качестве примера расммотрим как добавить в форму обратной связи необязательно поле "Телефон".

Основные шаги:

1. Добавить в HTML форму фрагмент кода (index.html):

<!-- Телефон пользователя -->
<div class="form-group">
  <label for="phone" class="control-label">Телефон</label>
  <div class="input-group">
    <div class="input-group-prepend">
      <div class="input-group-text">+7</div>
    </div>
    <input id="phone" type="tel" name="phone" class="form-control" value="(___)___-__-__" pattern="^\(?[0-9]{3}\)?(\s+)?[0-9]{3}-?[0-9]{2}-?[0-9]{2}$">
    <div class="invalid-feedback"></div>
  </div>
</div>

2. Создать маску для ввода телефона (например, на базе masked_input_1.4.1-min.js):

<script>
  // masked_input_1.4.1-min.js
  // angelwatt.com/coding/masked_input.php

  MaskedInput({
    elm: document.getElementById('phone'), // select by id
    format: '(___)___-__-__',
    separator: '()-'
  });
</script>

3. Вставить в process.php код для проверки корректности введённого пользователем номера телефона:

//валидация поля phone
if (!empty($_POST['phone'])) {
    $phone = preg_replace('/\D/', '', $_POST['phone']); //получить номер телефона (цифры) из строки
    if (!preg_match('/^(8|7)(\d{10})$/', $phone)) {
      $data['phone'] = 'Поле Телефон содержит не корректный номер!';
      $data['result'] = 'error';
    }
}

4. В process.php добавить строчку, которая будет заменять плейсхолдер %email.phone% в шаблоне письма на указанный в форме:

$bodyMail = str_replace('%email.phone%', isset($phone) ? $phone : 'не указан', $bodyMail);

5. Во фрагмент кода, который используется для записывания лога, вставить следующую строчку:

$output .= 'Телефон: ' . isset($phone) ? $phone : 'не указан' . '\n';

6. В шаблон письма (email.tpl) вставить в нужное место следующий код:

Телефон пользователя: <b>%email.phone%</b><br>

Пример формы с полем "Телефон" можно загрузить отсюда.

Установка нескольких форм обратной связи на одной странице

При необходимости на страницу можно добавить несколько форм обратной связи.

Осуществляется это посредством выполнения следующих шагов.

В HTML файле (index.html) нужно:

  • скопировать имеющийся фрагмент формы обратной связи и расположить его в нужном месте страницы;
  • установить форме новый идентификатор, т.е. значение атрибута id (например, feedback-form-2);
  • указать атрибуту action формы путь к php-сценарию, который будет обрабатывать её на стороне сервера (например, /feedback/process/process-2.php);
  • установить капче (элементу img) в атрибуте src и data-src get-параметр; его значение будет являться ключом, с которым будет связан её код на сервере (например, /feedback/captcha/captcha.php?id=captcha-2);
  • изменить у формы значения атрибутов id и for так, чтобы они были уникальными на странице;
  • установить ссылке с помощью которой перезапускается форма значение атрибута data-reloadform (например, #feedback-form-2).

В JavaScript файле (main.js) необходимо добавить блок инициализации для второй формы:

var form2 = new ProcessForm({
  selector: '#feedback-form-2'
});
form2.init();

Последнее действие – это выполнить создание копии файла process.php. В новом файле (например, process-2.php) необходимо изменить код, посредством которого эта форма должна будет обрабатываться на сервере.

Если в форме не изменяется количество полей, то достаточно будет изменить только фрагмент кода, в котором проверяется код капчи. А именно изменить ключ в суперглобальном массиве $_SESSION с captcha на тот, который мы установили (в данном случае на captcha-2).

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


Как отправить почту по SMTP через Gmail в PHPMailer

По умолчанию в Google аккаунте отключена возможность отправлять почту по SMTP через Gmail в PHPMailer. Чтобы её включить необходимо предоставить доступ к аккаунту для приложения.

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

Для этого необходимо перейти в Google аккаунт и открыть раздел «Безопасность». В группе «Вход в аккаунт Google» найти настройку «Двухэтапная аутентификация» и посмотреть её статус.

Что делать при выключенной двухэтапной аутентификации Google

Если настройка «Двухэтапная аутентификация» выключена, то перейти к группе «Ненадежные приложения, у которых есть доступ к аккаунту» и нажать на «Открыть доступ (не рекомендуется)». После этого на открывшейся странице перевести переключатель «Небезопасные приложения заблокированы» в состояние включено. На этом действия по настройке Google аккаунта завершены.

Что делать при включённой двухэтапной аутентификации Google

Когда настройка «Двухэтапная аутентификация» включена необходимо выполнить другие действия, а именно создать пароль для приложения. Потому что использовать пароль, который вы используете для обычного входа на почту, для SMTP аутентификации в соответствии с безопасностью Google в этом случае нельзя.

Чтобы создать пароль приложению нужно перейти в Google аккаунт, а затем в раздел «Безопасность». Далее на этой странице найти группу настроек «Вход в аккаунт Google» и кликнуть на ссылку «Пароли приложений». На открывшейся странице из раскрывающегося списка «Приложение» необходимо выбрать «Другое (введите название)» и написать, например, имя своего сайта, а затем нажать на кнопку «Создать». Созданный пароль необходимо скопировать, он нам нужен будет при настройке отправки почты через PHPMailer.

Пароли приложений в Google аккаунте

Настройка process.php для отправки через Gmail

В process.php для отправки почты через Gmail нужно выставить следующие настройки:

IS_SENDING_MAIL_VIA_SMTP = true, // выполняем отправку писем через SMTP
MAIL_SMTP_HOST = 'ssl://smtp.gmail.com', // SMTP-хост
MAIL_SMTP_PORT = '465', // SMTP-порт
MAIL_SMTP_USERNAME = '*******@gmail.com', // SMTP-пользователь
MAIL_SMTP_PASSWORD = '*******'; // SMTP-пароль

При включенной двухэтапной аутентификации Google в MAIL_SMTP_PASSWORD нужно установить пароль, созданный для приложения, а при выключенной - пароль от аккаунта.


Интересные статьи, связанные с созданием форм обратных связей:

Комментарии:

  1. Михаил Зябров
    06 июля 2021, 17:23
    Здравствуйте. Подскажите, пожалуйста, в чем может быть проблема: добавил в форму несколько полей для ввода данных, и при отправке формы появляется сообщение «исправьте данные...». Если меняю index.html на скаченный изначально файл — все работает. Для полей, которые добавил, прописал и проверку по аналогии с message и прописал в шаблоне письма по инструкции.
    1. Александр Мальцев
      07 июля 2021, 15:30
      Здравствуйте. Посмотрите какой ответ приходит от сервера (process.php) на вкладке Response.

      Ответ от сервера
      1. Михаил Зябров
        08 июля 2021, 16:28
        Все, нашел ошибку. Проблема была в пропущенной скобке :) все работает отлично. Огромное спасибо за такой полезный труд
        1. Александр Мальцев
          09 июля 2021, 05:04
          Отлично!
        2. Михаил Зябров
          08 июля 2021, 16:06
          Parse error: syntax error, unexpected end of file in /home/kebtaxi/kebtaxi.com/www/feedback/process/process.php on line 300
      2. Denis
        06 июля 2021, 01:03
        Пользователь Александр Мальцев ответил на ваш комментарий к статье (вопросу) «Форма обратной связи для сайта с отправкой на почту»:
        Здравствуйте!

        Попробуйте явно указать значение переменной:

        $startPath = 'https://spbautomarket.ru/';

        Ответить

        Текст комментария:
        Добрый вечер!

        столкнулся с такой проблемой:

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

        spbautomarket.ru//var/www/u104974/data/www/spbautomarket.ru/uploads/upload_60d4f5fdb5b466.95738149.png

        должно быть spbautomarket.ru/uploads/upload_60d4f5fdb5b466.95738149.png

        что необходимо править?

        поставил переменую результат:

        Not Found
        The requested URL /var/www/u104974/data/www/spbautomarket.ru/uploads/upload_60e37b69ad5982.27962017.jpeg was not found on this server.
        1. Александр Мальцев
          11 июля 2021, 14:57
          Здравствуйте! Так не должно быть. Вам нужно посмотреть значения переменных, из которых складывается такая строка на вашем сервере.
        2. Denis
          25 июня 2021, 00:31
          Добрый вечер!
          столкнулся с такой проблемой:
          когда прекрепляю фото через форму приходит сообщение с ссылкой
          spbautomarket.ru//var/www/u104974/data/www/spbautomarket.ru/uploads/upload_60d4f5fdb5b466.95738149.png
          должно быть spbautomarket.ru/uploads/upload_60d4f5fdb5b466.95738149.png
          что необходимо править?

          1. Александр Мальцев
            28 июня 2021, 13:10
            Здравствуйте!
            Попробуйте явно указать значение переменной:
            $startPath = 'https://spbautomarket.ru/';
          2. waresok
            04 июня 2021, 14:23
            Здравствуйте! Добавил Вашу классную форму на свой сайт, письма успешно приходят, но процесс отправки не завершается, выводится ошибка «Исправьте данные и отправьте форму ещё раз.», возникает точно на этапе отправке т.к. если IS_SEND_MAIL = false, то ошибки нет. Во вкладке Сеть>Ответ браузера есть ошибка «SyntaxError: JSON.parse: unexpected character at line 1 column 2 of the JSON data», кроме того не создается лог файл, хотя опция включена.
            Просьба подсказать причину ошибок и варианты решения.
            1. Pavel
              20 мая 2021, 12:58
              Здравствуйте! Отличная форма!
              Но у меня возникла проблема:
              Если значения отправки писем поставить «false», то форма отрабатывает, письма, соответственно, не шлет, файлы сохраняет и пишет успешный лог. Но как только я проставляю значения «true» (используется почта gmail, доступ для приложений настроен согласно мануалу в статье), то полоса прогресса обработки формы доходит до конца, зависает, а через некоторое время выдает сообщение «Исправьте данные и отправьте форму ещё раз.» в лог при таком результате ничего не пишется.
              Буду рад, если Вы сможете мне помочь!
              1. Alex
                19 мая 2021, 16:19
                Добрый день. Огромное Вам спасибо за форму! Отличная разработка. У меня возник вопрос. Как можно добавить несколько полей? Я хочу сделать опросник. Пользователь должен оставить довольно много информации о себе. Так же хочу реализовать select (выбор из списка), чекбоксы, радиокнопки. Информацию посетители должны оставлять как текстовую, так и числительную.
                У Вас случаем нет какого-нибудь мануала для вашей формы?
                Просто пробовал по методу, как описано в статье, где добавляется телефон. Но выдаёт ошибку, типа поправьте форму и тд. Хотя всё делал по тому же образу и подобию.
                Заранее благодарю!
                1. Sergey
                  25 апреля 2021, 12:21
                  Здравствуйте Александр.
                  Спасибо вам за ценные практические примеры.
                  С помощью нескольких предложенных вами форм, я получил желаемый вид формы.



                  1. Поля формы принимают спецсимволы! В обработчике php я не нашел htmlspecialchars либо другой способ защиты от скриптов. Хотя, возможно, это реализовано с помощью других механизмов.
                  2. После заполения всех полей и отправки сообщения через форму, внизу появляеться сообщение «исправьте данные...», вероятно по причине ненастроенного мейл сервера!

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

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

                  СПАСИБО!
                  1. eostudio
                    09 апреля 2021, 15:42
                    Добрый день! форма супер! То что надо!
                    Все работает, файлы и данные приходят, но форма не перезагружается и в консоли —
                    Uncaught SyntaxError: Unexpected token < in JSON at position 0
                        at JSON.parse (<anonymous>)
                        at XMLHttpRequest.request.onreadystatechange (process-forms-without-jquery.js:210)
                      var _this = this;
                    
                    Вот кусок кода из js файла:
                      var request = new XMLHttpRequest();
                      request.onreadystatechange = function () {
                        if (request.readyState === 0 || request.readyState === 4) {
                          if (request.status == 200) {
                            _success(JSON.parse(request.responseText), _this);
                          } else {
                            _error(_this);
                          }
                          //done();
                        }
                      };
                    
                    ругается на эту строку
                    _success(JSON.parse(request.responseText), _this);
                    подскажите куда копать?
                    1. Александр Мальцев
                      11 апреля 2021, 11:21
                      Привет! Спасибо за отзыв!
                      Посмотрите какой ответ возвращает сервер («process.php») на вкладке Network в инструментах разработчика браузера.
                      1. eostudio
                        11 апреля 2021, 11:48
                        Request URL: https://www.*********.ru/feedback/process/process.php
                        Request Method: POST
                        Status Code: 200 
                        Remote Address: 81.177.141.71:443
                        Referrer Policy: strict-origin-when-cross-origin
                        cache-control: no-store, no-cache, must-revalidate
                        content-length: 192
                        content-type: application/json
                        date: Sun, 11 Apr 2021 08:35:59 GMT
                        expires: Thu, 19 Nov 1981 08:52:00 GMT
                        pragma: no-cache
                        server: Jino.ru/mod_pizza
                        :authority: www.*********.ru
                        :method: POST
                        :path: /feedback/process/process.php
                        :scheme: https
                        accept: */*
                        accept-encoding: gzip, deflate, br
                        accept-language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7
                        content-length: 482
                        content-type: multipart/form-data; boundary=----WebKitFormBoundarynOHzHZFHAHWVF66c
                        cookie: _ga=GA1.2.43687746.1617347627; _ym_uid=1614690864522862858; _ym_d=1617347629; tmr_lvid=29226f356fca52bf5e57d15c58173199; tmr_lvidTS=1614690864461; BX_USER_ID=af1e963561ac3f6dcc9f14c0ba9459c3; BITRIX_SM_LOGIN=admin; BITRIX_SM_SOUND_LOGIN_PLAYED=Y; BITRIX_SM_LAST_SETTINGS=; PHPSESSID=a5o9dpvHu7p5hvuHM6QmMJXTFlBDkePc; _gid=GA1.2.38619152.1618130093; _ym_isad=2; tmr_detect=0%7C1618130124287; tmr_reqNum=207
                        origin: https://www.********.ru
                        referer: https://www.*********.ru/uslugi/ocenka-usczherba/otsenka_uschzerba_posle_zatopleniya_kvartiry/?test=1&clear_cache=Y
                        sec-ch-ua: "Google Chrome";v="89", "Chromium";v="89", ";Not A Brand";v="99"
                        sec-ch-ua-mobile: ?0
                        sec-fetch-dest: empty
                        sec-fetch-mode: cors
                        sec-fetch-site: same-origin
                        user-agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36
                        x-requested-with: XMLHttpRequest
                        и во вкладке response
                        <b>Warning</b>:  A non-numeric value encountered in <b>/feedback/phpmailer/src/PHPMailer.php</b> on line <b>845</b><br />
                        {"result":"success"}
                        1. Александр Мальцев
                          11 апреля 2021, 12:57
                          Возникает предупреждение в библиотеке phpMailer.
                          Можно в «process.php» определить с помощью error_reporting ошибки PHP, которые попадут в отчёт:
                          <?php
                          error_reporting(E_ERROR | E_PARSE);
                          ...
                          
                          Либо попробовать обновить библиотеку phpMailer до последней версии. На Github этого проекта уже это выполнил. Можете взять оттуда.
                    2. thepreview.ru
                      30 марта 2021, 15:11
                      Здравствуйте,

                      Споткнулся на этапе получения письма — не доходят письма до адресата. Пытался настроить отправку через Gmail. Пожалуйста, уточните в какое именно место в process.php вставлять блок переменных с данными SMTP Gmail.

                      И еще один вопрос — какие-то дополнительные настройки нужны, чтобы все это работало на OpenServer?
                      1. thepreview.ru
                        30 марта 2021, 17:38
                        Вопрос с получением решен, но возник другой вопрос — отсутствуют вложения в письме. Прикрепляемые файлы не прикрепляются )) В чем может быть проблема?
                        1. Александр Мальцев
                          02 апреля 2021, 14:20
                          Привет! За это отвечает следующая константа в «process.php»:
                          IS_SENS_FILES_AS_ATTACHMENTS = true, // необходимо ли прикреплять файлы к письму
                      2. Александр Макаров
                        26 марта 2021, 13:29
                        Здравствуйте!
                        1. Как сделать поле «Сообщение» необязательным, чтобы не было проверки на заполнение.
                        2. Как сделать, чтобы форма была не модальной, а уже открытой в определенном месте сайта.
                        Спасибо заранее за ответ.
                        Форма очень нравится. Использую ее.
                        1. Александр Макаров
                          26 марта 2021, 13:40
                          по п.1:
                          Сделал правку в process-form.js, не проверяет, но когда происходит отправка, пишет что надо заполнить это поле.
                          1. Александр Макаров
                            26 марта 2021, 14:01
                            С п.1 разобрался.
                            По п.2 вопрос актуален
                            1. Александр Мальцев
                              28 марта 2021, 09:53
                              Привет! Форма в этой теме не модальная.
                              1. Александр Макаров
                                30 марта 2021, 12:26
                                Мдя… Действительно, не модальная.
                                Видимо я ее сделал модальной, когда нужно было вызывать через кнопку. С тех пор ею и пользовался.
                                Спасибо!
                        2. Евгений Николаевич Целиков
                          24 февраля 2021, 13:33
                          Здравствуйте Александр!
                          Большое вам спасибо за ответ по консультации замены расширений файлов.
                          Как вас можно отблагодарить?
                          1. Александр Мальцев
                            24 февраля 2021, 14:07
                            Здравствуйте! Пожалуйста! На сайте имеется эта страничка. На ней приведено несколько способов как это можно сделать. Спасибо за благодарность.
                          2. Сергій
                            24 февраля 2021, 06:26
                            Добрый день. Вы не подскажете как правильно код поставить на modx. Я так понимаю система не верно ставить путь до файлов и постоянно вылазить ошибка «Исправьте данные и отправьте форму ещё раз.»
                            1. Александр Мальцев
                              25 февраля 2021, 16:32
                              Привет! Тут всё как обычно. HTML код формы можно вставить в чанк или шаблон в зависимости от того как у вас это реализовано на сайте. А также подключить к странице JavaScript файл. Работу с сессиями в php файлах можете выполнить через MODX.
                              1. Сергій
                                26 февраля 2021, 00:36
                                У меня ошибка «Произошла ошибка при отправке данных.»
                                Как верно подключить php. Все перепробовал, ничего.
                            2. Евгений Николаевич Целиков
                              22 февраля 2021, 20:46
                              Здравствуйте!
                              Прошу оказать консультацию по вопросу
                              Как добавить дополнительные расширение файлов для загружаемых файлов?
                              ALLOWED_EXTENSIONS = array('jpg', 'jpeg', 'bmp', 'gif', 'png'), // разрешённые расширения файлов.
                              Изменение только массива array('jpg', 'jpeg', 'png', 'pdf', 'xlsx', 'DOCX' ) выдает ошибку — 'Файл имеет не разрешённый тип.'
                              Заранее благодарен за ответ!
                              1. Александр Мальцев
                                23 февраля 2021, 15:49
                                Здравствуйте!
                                Кроме как настроить нужные расширения в php, это нужно ещё сделать в JavaScript:
                                new ProcessForm({
                                  attachmentsFileExt: ['jpg', 'jpeg', 'bmp', 'gif', 'png']
                                });
                                
                              2. Ольга Атрашкевич
                                21 февраля 2021, 13:33
                                Добрый день!
                                На PHP 7.4 не хочет почему то отправляться.
                                Добавила в форму дополнительно поле телефон и компания.
                                Все прописала, а письма не приходят и форма не перезагружается.

                                Все пункты с зелеными галочками и прокрутка синяя прошла.
                                1. Александр Мальцев
                                  25 февраля 2021, 16:43
                                  Привет! Не так давно проверял на php 7.4, ошибок не было. Посмотрите в консоли, ответе от сервера. Если имеются, то привиде здесь или создайте issue на GitHub.
                                2. spr53
                                  15 февраля 2021, 11:39
                                  Добрый день!
                                  Повторно сохраняются добавленные файлы при выполнении цепочки действий:
                                  1 — Отправляю сообщение с прикрепленным файлом, в папке update файл сохраняется, в тексте письма есть ссылка на сохраненный файл.
                                  2 — Отправляю еще одно сообщение БЕЗ добавления файлов. В папке update появляется копия предыдущего файла, в тексте письма ссылка на продублированный файл.

                                  Лечится обновлением страницы.

                                  Сайт на виртуальном хостинге.
                                  Проверял в Firefox и Vivaldi.

                                  Какие могут быть варианты решения?

                                  1. Если внести изменения/дополнения в php.ini, то какие?
                                  2. Если проблему может решить только служба сопровождения, то что написать в челобитную?
                                  3. Ваши предложения?
                                  1. Александр Мальцев
                                    16 февраля 2021, 16:33
                                    Привет!
                                    Проверю на днях действия в этой последовательности, если ошибка в коде, то поправлю.
                                    1. spr53
                                      05 марта 2021, 13:43
                                      Добрый день!
                                      Т.к. вопрос перешел из категории «Возможно нужное» в категорию «Нужное», решил проблему неэстетично, зато дешево и практично:
                                      В стартовой странице index.html заменил
                                      <div>Форма успешно отправлена. Нажмите на <a href="#" data-target="#feedback-form">ссылку</a>, чтобы отправить ещё одно сообщение.
                                      </div>
                                      на
                                      <div>Сообщение успешно отправлено. </br><a href="javascript:window.location.reload()">Создать новое сообщение</a>
                                      </div>
                                  2. Николай
                                    15 февраля 2021, 10:19
                                    Здравствуйте.

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

                                    Та же самая Форма обратной связи, но когда вы прикрепляете файл он уже загружается на хостинг с помощью Ajax до нажатия кнопки «Отправить».

                                    Спасибо.
                                    1. Ольга
                                      01 февраля 2021, 11:58
                                      Добрый день, совсем не знакома с php. Подскажите пожалуйста как сделать, чтобы данные из формы сохранялись не в logs, а в файл, который будут лежать в папке, именем которой будет танслит имени пользователя + номер телефона.
                                      1. Александр Мальцев
                                        06 февраля 2021, 16:11
                                        Привет!
                                        Для этого нужно изменить код файла «process.php». Например, так: gist.github.com/itchief/de1703e86c41c89527bd7c3b5e636905
                                        При сохранении формы, данные попадают в файл, имя которого образовывается по следующему шаблону:
                                        Год.Месяц.День-Email-1.txt
                                        Если нужно как-то по-другому, то можете изменить этот момент в файле.
                                        Файлы при этом помещаются в папку forms, которую необходимо создать в каталоге feedback.
                                      2. Андрей
                                        19 января 2021, 18:54
                                        Добрый день. Ввёл телефон, всё замечательно, все отправляет, но как при нажатии кнопки отправить, чтобы на форме было зелёным выделено поле? если правильно ввели.
                                        при отправке поле не подсвечивается.

                                        itchief.ru/assets/uploadify/e/9/f/e9f252fdf3a48ec977dbb7c3d16cbcf9.jpg
                                        1. Александр Мальцев
                                          24 января 2021, 10:59
                                          Привет! В статье приведено подробное описание того, как можно добавить в форму новое поле «Телефон». Чтобы оно подсвечивалось этому полю нужно добавить pattern и required. Последний нужно указать только в том случае, если это поле должно быть обязательно к заполнению.
                                          1. Alexander
                                            01 февраля 2021, 00:45
                                            Добрый вечер!
                                            Установил форму, вроде все работает, но есть нюанс — с формы на сервер приходит два письма, был редирект с почты хостинга на яндекс, убрал, но все равно на хостинг приходит два письма. Подскажите, в чём может быть дело?..
                                        2. Андрей
                                          19 января 2021, 17:34
                                          Зарегистрировался, чтобы выразить свою благодарность. Очень выручила статья.
                                          Огромное спасибо добрый человек. Всё ясно и понятно. Хоть и лет 10 назад изучал Веб.
                                          Прикрутил no-replay с почтовика хостинга, без проблем всё. Респект!
                                          1. Александр Мальцев
                                            24 января 2021, 11:00
                                            Спасибо! Рад, что всё получилось.
                                          2. Николай
                                            14 января 2021, 21:59
                                            Здравствуйте.

                                            Можно Вас попросить помочь разобраться!

                                            1. Хотелось бы оставить эту форму обратной связи (стилистика понравилась), но капчию поставить вот эту, itchief.ru/lessons/php/how-to-install-recaptcha-on-website — не разобраться сразу, что и где конкретно менять (подозреваю целые файлы)?

                                            — Пожалуйста подскажите. Или может оставить капчию текущую и по Вашему опыту вы знаете что боты не спамят!

                                            2. Форма по логике должна работать ведь на любом виртуальном хостинге? У меня Beget.

                                            3. Вы вот указали как пример в файле PHP отправку через SMTP Яндекса, для примера прописал свой (правда на корпоративном домене который прикреплен к почте Яндекса), не срабатывает. Возможно для корпоративных доменов почты Яндекса есть ограничения. Возможно кто-то настраивал и поделится опытом!

                                            Спасибо.
                                            1. Александр Мальцев
                                              18 января 2021, 15:53
                                              Здравствуйте.

                                              1. JavaScript код форм отличается, чтобы вставить в эту форму recaptcha её код нужно переделывать. Есть планы доработать форму с рекапчей. Но, когда это будет, пока точно сказать не могу.

                                              Формой с капчей, приведённой на этой странице, пользуются многие пользователи. Отзывов с такой проблемой никто не присылал. Я её тоже использую. Вообще сторонними закрытыми продуктами, в т.ч. recaptcha стараюсь не пользоваться, т.к. не знаю, что там написано. Исходный код этой формы открытый и расположен на Github.

                                              2. Да, версия php должна быть не ниже 5.6.

                                              3. Посмотрите содержимое файла «logs.txt», расположенный в форме. Может там какая-та информация имеется. Проверьте сначала как работает отправка почты с личного аккаунта Яндекса, а потом с аккаунта, привязанного к домену. Мне кажется, что это не должно как-то особенно настраиваться.
                                              1. Николай
                                                15 января 2021, 18:24
                                                Не могу понять, в чем распространенная ошибка: «Исправьте данные и отправьте форму ещё раз.»?
                                                Данные по Yandex верные, поставил обычную почту.

                                                В логах записи нет. И файлы не нашел:

                                                /* 2 ЭТАП — ПОДКЛЮЧЕНИЕ PHPMAILER */

                                                use PHPMailer\PHPMailer\PHPMailer;
                                                use PHPMailer\PHPMailer\Exception;

                                                require_once('../phpmailer/src/Exception.php');
                                                require_once('../phpmailer/src/PHPMailer.php');
                                                require_once('../phpmailer/src/SMTP.php');
                                                1. Александр Мальцев
                                                  18 января 2021, 15:59
                                                  Если в качестве ответа сервер присылает {"result":"error"}, то выводится это сообщение.
                                                  Эти файлы расположены в папке «phpmailer».
                                                  1. Николай
                                                    19 января 2021, 10:58
                                                    Александр, добрый день!

                                                    Да, вы были правы у меня версия PHP стояла 5.2, перевел на 7.0. Решил заново скачать, и не редактируя поля установить, мои действия:

                                                    1. Скачиваю ZIP github.com/itchief/feedbackForm (зеленая кнопка «Код»).

                                                    2. Зарегистрировал для такого дела новый e-mail на Яндексе.

                                                    3. Результат: prnt.sc/x70ywc

                                                    4. Редактировал только файл «process.php», чтобы проверить в чистом виде работу.

                                                    5. Далее смотрю ЛОГ: prnt.sc/x71ejm — пароль от почты верный :(

                                                    1. Александр Мальцев
                                                      19 января 2021, 16:29
                                                      У вас проблема именно с отправкой. Посмотрите комментарии из этой ветки. Может помогут.
                                                      Для детального изучения ошибки при отправке можно установить следующий режим:
                                                      $mail->SMTPDebug = 4
                                                      Также желательно установить DKIM-подпись.
                                              2. Максим
                                                12 января 2021, 11:50
                                                Добрый день, подскажите пожалуйста. Установил форму на сайт версия php 5.6, устанавливал 7.0-7.2. пробовал разные варианты
                                                В консоле ошибки нет, в network на process.php выдает ошибку {«result»:«error»}. Данные smtp верные. Не могу понять по какой причине ошибка. Все данные заполненны, прикрепленный файл по размеру так же. на фронте так же ошибка «Исправьте данные и отправьте форму ещё раз.»
                                                Спасибо!
                                                1. Александр Мальцев
                                                  14 января 2021, 16:23
                                                  Здравствуйте! Посмотрите ошибки в «logs.txt».
                                                  1. Максим
                                                    15 января 2021, 00:13
                                                    Добрый вечер, пишу же, ошибок никаких, так же в log.txt нет
                                                    1. Александр Мальцев
                                                      18 января 2021, 14:59
                                                      Файл «logs.txt» расположен в папке «log» самой формы, там должна быть какая-та информация.
                                                2. Артём
                                                  10 января 2021, 23:26
                                                  Здравствуйте!
                                                  Скачал форму, подключил её через iframe.
                                                  Вроде она выводится, все js файлы подгружаются. Но ни кнопка не реагирует, ни поля красным не светятся…
                                                  Не понимаю, что за файл main.js, который нужно настраивать. Его нужно создать или в коде index.html нужно прописать? Прописал в index.html вот это:
                                                  <script src="/feedback/vendors/jquery/jquery-3.4.1.min.js"></script>
                                                  <script src="/feedback/js/process-forms.js"></script>
                                                  <script>
                                                      //после загрузки DOM
                                                      $(function () {
                                                          var form1 = new ProcessForm({
                                                              selector: '#feedback-form'
                                                          });
                                                          form1.init();
                                                  
                                                      });
                                                  </script>
                                                  Простите, возможно, я сильно туплю… несколько раз перечитал мануал по настройке фоормы… Не понимаю, что не так.
                                                  1. Александр Мальцев
                                                    11 января 2021, 15:57
                                                    Здравствуйте! Настройку формы можно в «index.html» прописать. «main.js» — это просто ваш файл с кодом.
                                                    Вам необходимо просто поместить на страницу iframe следующим образом:
                                                    <iframe src="/feedback/index.html"></iframe>
                                                    
                                                    1. Артём
                                                      11 января 2021, 16:04
                                                      Вроде всё так… Не работает :-(
                                                      1. Александр Мальцев
                                                        14 января 2021, 16:26
                                                        Тут всё просто. Даже не знаю, что ещё посоветовать.
                                                  2. Наталия24
                                                    05 января 2021, 21:56
                                                    Здравствуйте. Благодарю за оказанную помощь и поддержку. Подскажите, пожалуйста: скачала двойную форму. Все настроила, работает отлично. Говорит, что сообщение отправлено. Но оно, к сожалению не приходит на почту. Сравнила файл process.php у версии с одной формой и этот же файл у версии с двойной формой на сайте. У двойной отсутствуют строки подключения SMRT. Подскажите, их необходимо добавить? И как это сделать правильно, если да? Заранее благодарю от всей души!
                                                    1. Александр Мальцев
                                                      20 января 2021, 14:54
                                                      Здравствуйте! Спасибо! Может письма попадают в «Спам».
                                                    2. Наталия24
                                                      25 декабря 2020, 14:28
                                                      При отправлении на яндекс почту все работает, как меняю на гугл, строка ожидания появляется и ничего больше не происходит. Меняю:
                                                      MAIL_SMTP_HOST = 'ssl://smtp.google.com', // SMTP-хост
                                                      MAIL_SMTP_PORT = '465', // SMTP-порт
                                                      MAIL_SMTP_USERNAME = 'aaa@gmail.com', // SMTP-пользователь
                                                      MAIL_SMTP_PASSWORD = 'aaaaaaaa'; //
                                                      MAIL_ADDRESS = 'aaa@gmail.com', //
                                                      MAIL_FROM = 'aaa@gmail.com', //
                                                      
                                                      1. Александр Мальцев
                                                        25 декабря 2020, 15:11
                                                        Как настроить через Google Gmail подробно описано в статье.
                                                      2. Наталия24
                                                        25 декабря 2020, 14:13
                                                        Здравствуйте. Использую эту форму в своих сайтах. Очень выручает. Благодарю за такую поддержку. Подскажите, пожалуйста, в чем может быть ошибка при отправке данных, так как все галочки отмечает зеленым, но говорит исправить данные? cookingnata.alexapho.ru/feedback/download-cook-book-ru.html
                                                        1. David
                                                          28 ноября 2020, 15:43
                                                          Данный скрипт выводит ссылку на изображения вида:
                                                          E:\\OS\\OSPanel\\domains\\mysite.tm\\feedback\/uploads\/upload_5fc2446f578e84.36623936.jpg
                                                          Как добиться, чтобы ссылка была вида
                                                          /feedback/uploads/upload_5fc2446f578e84.36623936.jpg
                                                          Заранее благодарю!
                                                          1. Александр Мальцев
                                                            30 ноября 2020, 03:49
                                                            А куда именно выводит?
                                                          2. David
                                                            28 ноября 2020, 12:02
                                                            Приветствую. Спасибо большое за форму. Добавил несколько полей для себя все вроде бы работает. Но вот с добавлением записи в БД возникли проблемы:(
                                                            1. Александр Мальцев
                                                              30 ноября 2020, 03:45
                                                              Привет! Если нужно, то могу добавить такой функционал в форму (дополнительное сохранение данных формы в базу данных).
                                                              1. David
                                                                28 ноября 2020, 13:15
                                                                Пробовал способом, который вы ранее кому то рекомендовали, но в тот момент(3 года назад) я так понимаю еще старая версия формы была. Сейчас я использую версию 3.0.1 может нужно по другому делать?
                                                                1. David
                                                                  28 ноября 2020, 14:44
                                                                  Методом проб и ошибок разобрался как это с проблемой)
                                                                  Единственное хотелось бы по подробнее узнать как этот фрагмент кода работает:)
                                                                  $stmt = $dbh->prepare("INSERT INTO feedback (name, email, message, attachments) VALUES (:name, :email, :message, :attachments)");
                                                                      $stmt->bindParam(':name', $name);
                                                                      $stmt->bindParam(':email', $email);
                                                                      $stmt->bindParam(':message', $message);
                                                                      $stmt->bindParam(':attachments', $str_attachments);
                                                                  1. Александр Мальцев
                                                                    30 ноября 2020, 03:42
                                                                    Привет! Этот код подготавливает запрос к выполнению (для добавления записи в таблицу базы данных). Псевдопеременные (:name, :email и т.д.) во время его запуска будут замены реальными значениями переменных ($name, $email и т.д.). Связывание псевдопеременной (параметра) с реальной переменной осуществляется через метод bindParam.
                                                              2. ivan
                                                                24 ноября 2020, 23:35
                                                                Здравствуйте. Появилась ошибка при установки
                                                                www.screencast.com/t/Db5nMeQ7So
                                                                в чем может быть проблема?

                                                                *MAIL_SMTP_HOST = 'ssl://smtp.gmail.com'
                                                                IS_CHECK_CAPTCHA = false,
                                                                все остальное без изменений
                                                                1. Александр Мальцев
                                                                  25 ноября 2020, 03:20
                                                                  Привет! Форму нужно установить на локальный веб-сервер (Apache, Nginx или др.) с поддержкой отправки email сообщений или на хостинг. В таком режиме форма работать не будет.
                                                                2. Илья
                                                                  22 ноября 2020, 20:58
                                                                  Возник вопрос. Нужно из формы в одном калькуляторе передать значение в форму обратной связи для отправки на почту. Прописываю к примеру код ниже и не получается, что-то мешает. Jquery подключен и код работает, если делать свою форму со своим id, но с id формы обратной связи никак не получается. Может это связано с тем, что в ней есть action и уже происходит какой-то процесс? Подскажите пожалуйста как правильно прописать код и где его вставить, чтобы можно из другой формы (калькулятора) передать значение в форму обратной связи?

                                                                  <form type="POST" id="forma1">
                                                                  <input type="text" placeholder="ПОЛЕ1_1" id="pole1_1" name="pole1_1">
                                                                  </form>
                                                                  
                                                                  
                                                                  <button type="button" id="fill">заполнить</button>
                                                                  
                                                                  
                                                                  <form id="feedback-form" action="/feedback/process/process.php" enctype="multipart/form-data" novalidate="">
                                                                        <div class="form-row">
                                                                  <input type="text" placeholder="ПОЛЕ1_2" id="pole1_2" name="pole1_2">
                                                                  
                                                                  // остальной код формы обратной связи...
                                                                  </form>
                                                                  
                                                                  <script type="text/javascript">
                                                                  $('#fill').click( function(event){
                                                                    feedback-form.pole1_2.value = forma1.pole1_1.value;
                                                                  });
                                                                  </script>
                                                                  1. Александр Мальцев
                                                                    24 ноября 2020, 15:18
                                                                    Если нужно так, то лучше при изменении значения одного поля (#pole1_1) менять второе (#pole1_2). JavaScript код вообще обычно помещают перед закрывающим тегом body. В данном случае лучше так и сделать.
                                                                    <script>
                                                                    const inputFrom = document.querySelector('#pole1_1');
                                                                    inputFrom.addEventListener('input', function () {
                                                                      const value = this.value;
                                                                      const inputTo = document.querySelector('#pole1_2');
                                                                      inputTo.value = value;
                                                                    });
                                                                    </script>
                                                                  2. Илья
                                                                    19 ноября 2020, 12:55
                                                                    Здравствуйте! Скачал форму, залил на сайт, удалил капчу и отключил в файле process.php её проверку, поставил там же в настройках гугл почту, но когда ставлю галочку принятия пользовательского соглашения, то кнопка отправить не подсвечивается как у вас и в итоге не получается отправить сообщение. Что это может быть? Для проверки залил ещё раз без изменений и тоже самое с кнопкой отправить, когда ставлю галочку. Ещё не пойму где искать main.js.

                                                                    Форма находится здесь: market.dokuchi.com/order/feedback/
                                                                    1. Александр Мальцев
                                                                      19 ноября 2020, 13:14
                                                                      Здравствуйте! Необходимо указать правильный путь к файлам: «jquery-3.4.1.min.js» и «process-forms.js».
                                                                      1. Илья
                                                                        19 ноября 2020, 13:32
                                                                        Заменил путь в index.html просто удалив feedback в его начале, но ничего не получилось, осталось так же. Попробовал вместо относительного пути поставить полный и тоже ничего не поменялось.

                                                                        <!DOCTYPE html>
                                                                        <html lang="ru">
                                                                        
                                                                        <head>
                                                                          <meta charset="utf-8">
                                                                          <title>Форма обратной связи</title>
                                                                          <link rel="stylesheet" href="css/style.css">
                                                                        </head>
                                                                        
                                                                        <body>
                                                                        
                                                                        <div class="container">
                                                                          <h1>Форма обратной связи</h1>
                                                                        
                                                                          <div class="form__wrapper">
                                                                            <!-- Форма обратной связи -->
                                                                            <form id="feedback-form" action="/process/process.php" enctype="multipart/form-data" novalidate>
                                                                              <div class="form-row">
                                                                                <!-- Имя пользователя -->
                                                                                <div class="form-group">
                                                                                  <label for="name" class="control-label">Имя</label>
                                                                                  <input id="name" type="text" name="name" class="form-control" value="" placeholder="Имя" minlength="2"
                                                                                         maxlength="30" required="required">
                                                                                  <div class="invalid-feedback"></div>
                                                                                </div>
                                                                                <!-- Email пользователя -->
                                                                                <div class="form-group">
                                                                                  <label for="email" class="control-label">Email-адрес</label>
                                                                                  <input id="email" type="email" name="email" required="required" class="form-control" value=""
                                                                                         placeholder="Email-адрес">
                                                                                  <div class="invalid-feedback"></div>
                                                                                </div>
                                                                              </div>
                                                                              <!-- Сообщение пользователя -->
                                                                              <div class="form-group">
                                                                                <label for="message" class="control-label">Сообщение (не менее 20 символов)</label>
                                                                                <textarea id="message" name="message" class="form-control" rows="3"
                                                                                          placeholder="Сообщение (не менее 20 символов)" minlength="20" maxlength="500"
                                                                                          required="required"></textarea>
                                                                                <div class="invalid-feedback"></div>
                                                                              </div>
                                                                        
                                                                        
                                                                        
                                                                              <!-- Пользовательское солашение -->
                                                                              <div class="form-group form-agreement">
                                                                                <div class="custom-control custom-checkbox">
                                                                                  <input type="checkbox" name="agree" class="custom-control-input" id="customCheck">
                                                                                  <label class="custom-control-label" for="customCheck">Нажимая кнопку, я принимаю условия 
                                                                                    Пользовательского соглашения и даю своё согласие на обработку моих персональных данных.</label>
                                                                                </div>
                                                                              </div>
                                                                        
                                                                              <!-- Сообщение при ошибке -->
                                                                              <div class="form-error d-none">
                                                                                Исправьте данные и отправьте форму ещё раз.
                                                                              </div>
                                                                        
                                                                              <!-- Индикация отправки данных формы на сервер -->
                                                                              <div class="progress d-none">
                                                                                <div class="progress-bar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100"
                                                                                     style="width: 0"></div>
                                                                              </div>
                                                                        
                                                                              <!-- Кнопка для отправки формы на сервер -->
                                                                              <div class="form-submit">
                                                                                <button type="submit" disabled>Отправить сообщение</button>
                                                                              </div>
                                                                        
                                                                            </form>
                                                                        
                                                                            <!-- Сообщение об успешной отправки формы -->
                                                                            <div class="form-result-success d-none">
                                                                              <div>Форма успешно отправлена. Нажмите на <a href="#" data-target="#feedback-form">ссылку</a>, чтобы отправить ещё
                                                                                одно сообщение.
                                                                              </div>
                                                                            </div>
                                                                        
                                                                          </div>
                                                                        
                                                                        </div>
                                                                        
                                                                        <script src="/vendors/jquery/jquery-3.4.1.min.js"></script>
                                                                        <script src="/js/process-forms.js"></script>
                                                                        <script>
                                                                            //после загрузки DOM
                                                                            $(function () {
                                                                                /*
                                                                                Параметры указываются в виде:
                                                                                {
                                                                                ключ: значение;
                                                                                ключ: значение;
                                                                                ...
                                                                                }
                                                                                Основные параметры
                                                                                selector - селектор формы (по умолчанию '#feedback-form')
                                                                                attachmentsMaxFileSize - максимальный размер файла в Кбайтах (по умолчанию 512)
                                                                                attachmentsFileExt - допустимые расширения файлов для загрузки (по умолчанию 'jpg','jpeg','bmp','gif','png')
                                                                                isUseDefaultSuccessMessage - отображать дефолтное сообщение после отправки
                                                                                */
                                                                                var form1 = new ProcessForm();
                                                                                form1.init();
                                                                        
                                                                            });
                                                                        </script>
                                                                        
                                                                        </body>
                                                                        
                                                                        </html>
                                                                        1. Александр Мальцев
                                                                          19 ноября 2020, 13:46
                                                                          К скриптам путь прописывается в этом месте:
                                                                          <script src="/order/feedback/vendors/jquery/jquery-3.4.1.min.js"></script>
                                                                          <script src="/order/feedback/js/process-forms.js"></script>
                                                                          
                                                                          1. Илья
                                                                            19 ноября 2020, 14:14
                                                                            Указываю по-разному путь там, всё равно тоже самое. Так же меняю путь здесь и тоже самое ничего не происходит:
                                                                            <form id="feedback-form" action="/process/process.php" enctype="multipart/form-data" novalidate>
                                                                            1. Илья
                                                                              19 ноября 2020, 13:57
                                                                              Немного не понял. Я же в коде выше там так и прописал. Относительно файла index.html они лежат здесь и так же указал:

                                                                              <script src="/vendors/jquery/jquery-3.4.1.min.js"></script>
                                                                              <script src="/js/process-forms.js"></script>
                                                                              1. Александр Мальцев
                                                                                19 ноября 2020, 14:30
                                                                                Если вам нужно относительно текущей страницы, то так:
                                                                                <script src="vendors/jquery/jquery-3.4.1.min.js"></script>
                                                                                <script src="js/process-forms.js"></script>
                                                                                
                                                                                Забыли ещё на странице инициализировать форму:
                                                                                (new ProcessForm()).init();
                                                                                
                                                                                Путь к php в этом случае будет:
                                                                                <form id="feedback-form" action="/order/feedback/process/process.php" enctype="multipart/form-data" novalidate="">
                                                                                
                                                                                1. Илья
                                                                                  19 ноября 2020, 14:39
                                                                                  А где нужно этот код прописать?
                                                                                  (new ProcessForm()).init();
                                                                                  1. Александр Мальцев
                                                                                    19 ноября 2020, 14:44
                                                                                    В теге script после подключения скриптов, приведённых выше.
                                                                                    Т.е. так:
                                                                                    <script src="vendors/jquery/jquery-3.4.1.min.js"></script>
                                                                                    <script src="js/process-forms.js"></script>
                                                                                    <script>
                                                                                    (new ProcessForm()).init();
                                                                                    </script>
                                                                                    1. Илья
                                                                                      19 ноября 2020, 14:58
                                                                                      Добавил, теперь кнопка работает, но выдаёт наверное ошибку как у комментатора ниже, что нужно исправить данные и отправьте форму ещё раз.
                                                                                      1. Александр
                                                                                        19 ноября 2020, 15:21
                                                                                        Такая же ошибка, как у пользователя выше.
                                                                                        в консоли пишет следующее:
                                                                                        TypeError: Error in invocation of runtime.sendMessage(optional string extensionId, any message, optional object options, optional function responseCallback): chrome.runtime.sendMessage() called from a webpage must specify an Extension ID (string) for its first argument.
                                                                                        1. Александр Мальцев
                                                                                          19 ноября 2020, 15:31
                                                                                          Это ошибка относится к какому-то расширению, установленному у вас в браузере. К самой форме это никакого отношения не имеет.
                                                                                        2. Александр Мальцев
                                                                                          19 ноября 2020, 15:16
                                                                                          Там есть файл logs.txt. В нём содержатся логи.
                                                                                          1. Александр
                                                                                            19 ноября 2020, 15:28
                                                                                            Добрый день Александр!

                                                                                            Также вопрос, если я не использую капчу и загрузку файлов (типичная форма обратной связи, где указать надо имя, почту телефон и сообщение) Все ли я правильно заполнил? Там где замазано указана моя почта, это правильно?
                                                                                            1. Александр Мальцев
                                                                                              19 ноября 2020, 15:36
                                                                                              Установите IS_SEND_MAIL = false и проверьте работает ли форма без отправки сообщений на email. Если работает, то переходите к настройке почты.
                                                                                              1. Александр
                                                                                                19 ноября 2020, 15:45
                                                                                                Форма работает, вылетело окошко что письмо отправлено и хотите еще отправить одно письмо. Где в 7 этапе искать ошибку? prntscr.com/vm5mcw и prntscr.com/vm5moa
                                                                                              2. Александр Мальцев
                                                                                                19 ноября 2020, 15:34
                                                                                                Если вы будете отправлять почту через SMTP, то нужно указать SMTP настройки.
                                                                                                1. Илья
                                                                                                  19 ноября 2020, 15:42
                                                                                                  В логах пишет: Ошибка при отправке письма: SMTP connect() failed. github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

                                                                                                  Но в настройках для подключения почты в файле вроде всё правильно указал согласно инструкции гугла https://support.google.com/mail/answer/7126229?visit_id=637413861361032597-1221049469&hl=ru&rd=1:

                                                                                                  /* 1 ЭТАП - НАСТРОЙКА ПЕРЕМЕННЫХ */
                                                                                                  
                                                                                                  const
                                                                                                  IS_CHECK_CAPTCHA = false, // проверять капчу
                                                                                                  IS_SEND_MAIL = true, // отправлять письмо получателю
                                                                                                  IS_SEND_MAIL_SENDER = false, // отправлять информационное письмо отправителю
                                                                                                  IS_WRITE_LOG = true, // записывать данные в лог
                                                                                                  UPLOAD_NAME = 'uploads', // имя директории для загрузки файлов
                                                                                                  IS_SEND_FILES_IN_BODY = true, // добавить ссылки на файлы в тело письма
                                                                                                  IS_SENS_FILES_AS_ATTACHMENTS = false, // необходимо ли прикреплять файлы к письму
                                                                                                  MAX_FILE_SIZE = 524288, // максимальный размер файла (в байтах)
                                                                                                  ALLOWED_EXTENSIONS = array('jpg', 'jpeg', 'bmp', 'gif', 'png'), // разрешённые расширения файлов
                                                                                                  MAIL_FROM = 'x380666231555@gmail.com', // от какого email будет отправляться письмо
                                                                                                  MAIL_FROM_NAME = 'Имя_сайта', // от какого имени будет отправляться письмо
                                                                                                  MAIL_SUBJECT = 'Сообщение с формы обратной связи', // тема письма
                                                                                                  MAIL_ADDRESS = 'x380666231555@gmail.com', // кому необходимо отправить письмо
                                                                                                  MAIL_SUBJECT_CLIENT = 'Ваше сообщение доставлено', // настройки mail для информирования пользователя о доставке сообщения
                                                                                                  IS_SENDING_MAIL_VIA_SMTP = true, // выполнять отправку писем через SMTP
                                                                                                  MAIL_SMTP_HOST = 'smtp.gmail.com', // SMTP-хост
                                                                                                  MAIL_SMTP_PORT = '465', // SMTP-порт
                                                                                                  MAIL_SMTP_USERNAME = 'x380666231555@gmail.com', // SMTP-пользователь
                                                                                                  MAIL_SMTP_PASSWORD = '*********'; // SMTP-пароль
                                                                                                  1. Александр Мальцев
                                                                                                    20 ноября 2020, 17:04
                                                                                                    Инструкцию по настройке отправки почты по SMTP через Gmail в PHPMailer добавил в статью.
                                                                                                    1. Илья
                                                                                                      20 ноября 2020, 17:35
                                                                                                      Не нашёл кнопки «Пароли приложений». Может ссылка есть?
                                                                                                    2. Александр Мальцев
                                                                                                      19 ноября 2020, 16:21
                                                                                                      Точно по гуглу не скажу, тут нужно разворачивать форму на хостинг и смотреть. Немного позже отвечу.
                                                                                                      1. Илья
                                                                                                        20 ноября 2020, 17:49
                                                                                                        Всё, я разобрался. Нужно было сначала включить двухфакторную авторизацию и тогда появится кнопка с паролями приложений (думаю допишите это в статью, а то будут как я задавать глупые вопросы по 100 раз одно и тоже). Попробовал отправить через форму письмо, получилось, работает, спасибо! Теперь буду пытаться добавить ячейки, чтобы через эту форму отправляло на почту ещё данные с калькулятора написанного на JS, надеюсь получится
                                                                                                        1. Александр Мальцев
                                                                                                          21 ноября 2020, 12:04
                                                                                                          Отлично! Чтобы было меньше вопросов, в статье этот момент более подробно описал.
                                                                                                        2. Илья
                                                                                                          19 ноября 2020, 17:20
                                                                                                          Попробовал сделать отправку не через гугл почту, а через яндекс почту и домена на хостинге и такая же ошибка, значит дело не со стороны почты, а скорее всего что-то в коде
                                                                                                          1. Илья
                                                                                                            19 ноября 2020, 16:29
                                                                                                            Ок, спасибо, очень жду ответа
                                                                                2. Александр
                                                                                  19 ноября 2020, 12:18
                                                                                  Александр здравствуйте! Не могу понять, почему не работает форма. В консоле следующее:

                                                                                  Failed to load resource: net::ERR_CONNECTION_REFUSED
                                                                                  common.js:130 Uncaught TypeError: $(...).tooltip is not a function
                                                                                  at HTMLDocument.(common.js:130)
                                                                                  at j (jquery-2.1.1.min.js:2)
                                                                                  at Object.fireWith [as resolveWith] (jquery-2.1.1.min.js:2)
                                                                                  at Function.ready (jquery-2.1.1.min.js:2)
                                                                                  at HTMLDocument.I (jquery-2.1.1.min.js:2)
                                                                                  find-module.js:7 load find module
                                                                                  /catalog/view/theme/fashion/template/information/feedback/process/process.php:1 Failed to load resource: the server responded with a status of 500 (Internal Server Error)
                                                                                  1. Александр Мальцев
                                                                                    19 ноября 2020, 13:11
                                                                                    Здравствуйте! Эти ошибки не относятся к форме (tooltip не используется), кроме последней. JS скрипт пытается найти «process.php» по этому адресу:
                                                                                    /catalog/view/theme/fashion/template/information/feedback/process/process.php
                                                                                    Но там его нет. Проверьте путь к файлу, или если так должно быть, то положите его туда.
                                                                                    1. Александр
                                                                                      19 ноября 2020, 13:44
                                                                                      Александр, поковырялся немного. Путь проверил всё ок. Сейчас в консоле такая ошибка jquery-3.4.1.min.js:2 POST vubp35.ru/catalog/view/theme/fashion/template/information/feedback/process/process.php 500 (Internal Server Error)
                                                                                      В логах всё пусто

                                                                                      Форма ведет себя так joxi.ru/a2XkVV6f4Z1nLm
                                                                                      1. Александр Мальцев
                                                                                        19 ноября 2020, 14:38
                                                                                        Необходимо проверить наличие и остальных файлов. Файлу «process.php» нужны файлы «email.tpl» и «email_client.tpl». Они должны быть находиться рядом с ним. На уровне выше папка phpMailer, logs и uploads.
                                                                                        1. Александр
                                                                                          19 ноября 2020, 14:32
                                                                                          Александр, дополнение к предыдущему сообщению. Вообще, не знаю куда копть, где искать ошибку. Можете глянуть Посмотрите настройки файлов, что не так yadi.sk/d/sPG-Pxrx55Iqcg

                                                                                          Сам сайт на движке OcStore.
                                                                                          1. Александр Мальцев
                                                                                            19 ноября 2020, 15:22
                                                                                            Ошибка 500 — это дело не в настройках. А какая версия php? Может какая-то библиотека не подключена в php.ini, в process.php она используется.
                                                                                            1. Александр
                                                                                              19 ноября 2020, 15:29
                                                                                              Александр, на хостинге php 5.6
                                                                                              1. Александр Мальцев
                                                                                                19 ноября 2020, 15:38
                                                                                                Значит, с версией все хорошо.
                                                                                                1. Александр
                                                                                                  19 ноября 2020, 15:48
                                                                                                  Александр, а что тогда делать? Хочется запустить вашу форму на сайте.
                                                                                                  1. Александр Мальцев
                                                                                                    19 ноября 2020, 16:35
                                                                                                    Посмотрите, какой ответ приходит с сервера («process.php» на вкладке Network в инструментах разработчика браузера).
                                                                                                    1. Александр
                                                                                                      19 ноября 2020, 16:59
                                                                                                      Александр, в этой папке следующее
                                                                                                      joxi.ru/eAOKqqJtkEkKpA
                                                                                                      joxi.ru/E2pwvv0CGVGppm
                                                                                                      joxi.ru/1A5nbbgibkb6Vr
                                                                                                      1. Александр
                                                                                                        20 ноября 2020, 08:22
                                                                                                        Александр, подскажите, куда копать? Где может быть проблема.
                                                                                                        1. Александр Мальцев
                                                                                                          20 ноября 2020, 17:25
                                                                                                          Тут нужно копать движок OcStore или конфигурационный файл веб-сервера Apache или Nginx, в зависимости от того который вы используете. Скорее всего вам необходимо настроить необходимые перенаправления.
                                                                                    2. Сергей
                                                                                      04 ноября 2020, 18:06
                                                                                      Здравствуйте! Форма отличная! Но у меня ошибка, не пойму как исправить. Если отправлять сообщения без прикрепления файлов — все отлично уходит. Ошибок нет.
                                                                                      Стоит прикрепить файл — получаю сообщение: Исправьте данные и отправьте форму ещё раз. При этом, сообщение с прикрепленным файлом успешно отправляется и получается.

                                                                                      Смотрю через консоль:

                                                                                      Notice: Undefined variable: startPath in /feedback/process/process.php on line 181
                                                                                      {«result»:«success»}

                                                                                      смотрю process.php 181 строку
                                                                                      там:

                                                                                      подскажите, что нужно исправить?
                                                                                      1. Александр Мальцев
                                                                                        05 ноября 2020, 14:19
                                                                                        Здравствуйте! Спасибо! Проверьте, объявлена ли у вас переменная $startPath (по умолчанию на 44 строке):
                                                                                        $startPath = 'http' . (isset($_SERVER['HTTPS']) ? 's' : '') . '://' . $_SERVER['HTTP_HOST'] . '/';
                                                                                        1. Сергей
                                                                                          04 ноября 2020, 18:44
                                                                                          убрал $startPath в 181 строке, теперь все нормально работает при добавлении файлов
                                                                                        2. Евгений Борисович
                                                                                          11 сентября 2020, 20:37
                                                                                          Прекрасный скрипт, РЕСПЕКТ, Александр!
                                                                                          Всё работает — письма отправляет
                                                                                          Такая маленькая проблема:
                                                                                          Капча появляетя но кнопкой обновить просто стирается :(

                                                                                          не хочу я гуглевскую капчу использовать…
                                                                                          Сайт на хостинге МАСТЕРХОСТ
                                                                                          PHP 7.1
                                                                                          Скрипт установлен в корень
                                                                                          CMS не используется (чистый HTML)
                                                                                          SSL на сайте не установлен
                                                                                          вот он
                                                                                          emkom-yg.ru/
                                                                                          1. Александр Мальцев
                                                                                            12 сентября 2020, 06:39
                                                                                            Спасибо! В атрибуте data-src необходимо указать правильный путь для данного проекта к файлу «captcha.php»:
                                                                                            <!-- замените /feedback/captcha/captcha.php на /captcha/captcha.php -->
                                                                                            <img class="form-captcha__image" src="/captcha/captcha.php" data-src="/feedback/captcha/captcha.php" width="132" height="46" alt="Капча">
                                                                                            
                                                                                            1. stan_karter
                                                                                              03 ноября 2020, 23:58
                                                                                              Здравствуйте, спс вам за ваш труд. Скажите пожалуйста, как можно заменить маску для телефона и что бы валидация все же работала, так как данный плагин (masked_input) скажем так с багами (тот же курсор при клике становится в любое место). Например inputmask.js? маску подключил, вроде появляется НО, валидации нет. Вставляю:
                                                                                              if (!empty($_POST['phone'])) {
                                                                                                $phone = preg_replace('/\D/', '', $_POST['phone']); //получить номер телефона (цифры) из строки
                                                                                                if (!preg_match('/^(8|7)(\d{10})$/', $phone)) {
                                                                                                  $data['phone'] = 'Поле Телефон содержит не корректный номер!';
                                                                                                  $data['result'] = 'error';
                                                                                                }
                                                                                              }
                                                                                              
                                                                                              Вот с этим не работает вообще, если закоментировать if и все что в нем, то валидации нет, но номер собирает и отправляет, подскажите что тут нужно прописывать, заранее благодарен.
                                                                                              1. Александр Мальцев
                                                                                                04 ноября 2020, 03:56
                                                                                                Здравствуйте! В этом случае нужно посмотреть в каком виде у вас уходит номер на сервер и подкорректировать этот код. Узнать, что отправляется на сервер можно в инструментах разработчика браузера.
                                                                                                Этот код сначала удаляет из $_POST['phone'] всё кроме цифр. Далее проверят то, что осталось на соответствии шаблону '/^(8|7)(\d{10})$/', т.е. первая цифра должна быть 7 или 8, а за ней ещё 10 цифр. Если это так, то всё хорошо, иначе результат выставляется в 'error'.
                                                                                              2. Евгений Борисович
                                                                                                13 сентября 2020, 04:17
                                                                                                старею, блин :(
                                                                                                Спасибки!
                                                                                            2. Михаил
                                                                                              05 сентября 2020, 18:00
                                                                                              Добрый день, а не планируется ли убирать из формы jquery? Сейчас мода пошла на избавление от этой библиотеки. Слишком ли сложно это сделать?
                                                                                              1. Александр Мальцев
                                                                                                06 сентября 2020, 13:58
                                                                                                Привет! Тренд есть такой. Ничего сложно нет. Можно даже переписать с использованием новых возможностей JavaScript (ES6+), а потом перевести его в ES5 (для поддержки старых браузеров).
                                                                                                1. Михаил
                                                                                                  07 сентября 2020, 22:35
                                                                                                  я сам использую вот такую форму github.com/Bulkmaker/simple_mail. Преимущества по сравнению с вашей в том, что нужно лишь добавить класс ajaxform к ЛЮБОЙ форме и она уже будет обрабатываться скриптом. Минус в загрузке файлов только в папку на самом сайте, а не прикрепления к почте. Ну и она тоже написана на jquery. Взгляните, вдруг будет интересно.
                                                                                                  1. Александр Мальцев
                                                                                                    08 сентября 2020, 15:01
                                                                                                    Ссылка перебрасывает на страницу 404.
                                                                                                    1. Михаил
                                                                                                      08 сентября 2020, 15:13
                                                                                                      Сейчас должно быть видно
                                                                                                      1. Александр Мальцев
                                                                                                        10 сентября 2020, 03:47
                                                                                                        Да, сейчас открывается.
                                                                                                  2. Михаил
                                                                                                    07 сентября 2020, 22:29
                                                                                                    Есть ли у вас такое желание? У меня мозгов точно не хватит, а я бы с удовольствием такой формой пользовался.
                                                                                                    1. Александр Мальцев
                                                                                                      08 сентября 2020, 14:59
                                                                                                      Желание есть, но сначала просто перепишу без использования jQuery, а потом уже используя новый синтаксис.
                                                                                                      1. Михаил
                                                                                                        23 октября 2020, 15:43
                                                                                                        ещё не нашли время?
                                                                                                        1. Александр Мальцев
                                                                                                          24 октября 2020, 13:21
                                                                                                          На GitHub добавил файл «process-forms-without-jquery.js». Эта версия скрипта без зависимости от jQuery.
                                                                                                          В этой версии после создания экземпляра объекта ProcessForm не нужно вызывать метод init. Т.е.:
                                                                                                          // после загрузки DOM
                                                                                                          document.addEventListener('DOMContentLoaded', function () {
                                                                                                            // создаём экземпляр объекта ProcessForm (по умолчанию для #feedback-form)
                                                                                                            new ProcessForm();
                                                                                                          });
                                                                                                          
                                                                                                          Но скрипт ещё на начальном этапе, поэтому нужно его хорошенько тестировать.
                                                                                                2. Ekaterina
                                                                                                  05 сентября 2020, 09:41
                                                                                                  Александр, подскажите, пожалуйста, по решению задачи:
                                                                                                  Напишите функцию, которая принимает объект с полем id например {id:0} и возвращает значение этого айди — 0
                                                                                                  Пример:
                                                                                                  1. function test (obj) {
                                                                                                  2. /*your code here*/
                                                                                                  3.}
                                                                                                  Мое решение:
                                                                                                  1.function test (obj) {
                                                                                                  2. obj { id: 0 }
                                                                                                  3. return obj.id
                                                                                                  4. }
                                                                                                  Выходит ошибка: [2:7] Parsing error: Unexpected token, expected ";".
                                                                                                  Не понимаю, зачем и куда ставить кавычки, мы же не строку возвращаем.
                                                                                                  1. Александр
                                                                                                    05 сентября 2020, 11:24
                                                                                                    Спасибо
                                                                                                    1. Александр Мальцев
                                                                                                      05 сентября 2020, 09:57
                                                                                                      Вопросы следует помещать под соответствующей темой.
                                                                                                      Можно решить так:
                                                                                                      // создаём функцию
                                                                                                      function test(obj) {
                                                                                                        return obj.id;
                                                                                                      }
                                                                                                      
                                                                                                      // вызываем функцию
                                                                                                      const id = test({ id: 0 }); // 0
                                                                                                      
                                                                                                      1. Ekaterina
                                                                                                        05 сентября 2020, 10:09
                                                                                                        Поняла, спасибо!
                                                                                                    2. Александр
                                                                                                      04 сентября 2020, 09:18
                                                                                                      Добрый день!
                                                                                                      Хочу поблагодарить за предоставленную форму.
                                                                                                      Я устанавливал еще в 2019 году.
                                                                                                      Работает отлично.
                                                                                                      PHP на хостинге версии 5.6

                                                                                                      После изменения версии на 7.4
                                                                                                      форма выдает ошибку.
                                                                                                      Прошу помочь разобраться
                                                                                                      Ошибка в инспекторе кода в следующей строке кода (см.картинку)
                                                                                                      itchief.ru/assets/uploadify/0/9/5/09552bd682420cb16a24c34cdf13adce.png
                                                                                                      1. Александр Мальцев
                                                                                                        05 сентября 2020, 09:33
                                                                                                        Здравствуйте! Спасибо! На версии 7.4.5 работает. Посмотрите какой response возвращает сервер (process.php) в инструментах разработчика на вкладке Network.
                                                                                                        1. Александр
                                                                                                          05 сентября 2020, 11:24
                                                                                                          Здравствуйте! Да, проверил, форма отрабатывает. Но
                                                                                                          при смене версии php на 7.4 выдает ошибку
                                                                                                          VM240:1 Uncaught SyntaxError: Unexpected token < in JSON at position 0
                                                                                                          at JSON.parse ()
                                                                                                          at Object.success (main.js:204)
                                                                                                          at c (jquery.min.js:2)
                                                                                                          at Object.fireWith [as resolveWith] (jquery.min.js:2)
                                                                                                          at l (jquery.min.js:2)
                                                                                                          at XMLHttpRequest.(jquery.min.js:2)

                                                                                                          По факту получается, что форма срабатывает, данные отправляются, но
                                                                                                          сама форма не закрывается
                                                                                                          и не открывается
                                                                                                          «Сообщение об успешной отправки формы»

                                                                                                          Не могу разобраться

                                                                                                          P.S. На версии PHP 7.4 и 7.3 выдает ошибку
                                                                                                          на версии PHP 7.0 и 7.2 все работает
                                                                                                          (
                                                                                                          1. Александр Мальцев
                                                                                                            05 сентября 2020, 12:50
                                                                                                            Это на клиенте. Нужно посмотреть какой ответ присылает сервер, т.е. что приходит от «process.php». Может на PHP 7.4 не подключены какие-нибудь расширения.
                                                                                                      2. stan_karter
                                                                                                        26 августа 2020, 10:48
                                                                                                        Здравствуйте, спс вам за ваш труд.Скажите пожалуйста, как можно заменить маску для телефона и что бы валидация все же работала, так как данный плагин (masked_input) скажем так с багами(тот же курсор при клике становится в любое место).Например inputmask.js? маску подключил, вроде появляется НО, валидации нет. Вставляю if (!empty($_POST['phone'])) { $phone = preg_replace('/\D/', '', $_POST['phone']); //получить номер телефона (цифры) из строки
                                                                                                        if (!preg_match('/^(8|7)(\d{10})$/', $phone)) {
                                                                                                        $data['phone'] = 'Поле Телефон содержит не корректный номер!';
                                                                                                        $data['result'] = 'error';
                                                                                                        }
                                                                                                        }
                                                                                                        Вот с этим не работает вообще, если закоментировать if и все что в нем, то валидации нет, но номер собирает и отправляет, подскажите что тут нужно прописывать, заранее благодарен
                                                                                                        1. alex
                                                                                                          24 августа 2020, 13:43
                                                                                                          Добрый день подскажите что я делаю не так скачал ваш обратный звонок установил на сайт поменял на свою почту itchief.ru/assets/uploadify/0/0/0/000a286819987543e8ab8a6c901f9545.png
                                                                                                          перехожу для просмотра что получилось получаю
                                                                                                          itchief.ru/assets/uploadify/0/c/8/0c827453d680158073a00cc19ac1dd52.png
                                                                                                          обьясните пожалуйста что не так я сделал и почему не работает
                                                                                                          1. Александр Мальцев
                                                                                                            24 августа 2020, 13:59
                                                                                                            Добрый день! Посмотрите, что в логах.
                                                                                                            1. alex
                                                                                                              24 августа 2020, 14:37
                                                                                                              фаил в папке logs/logs.txt пустой
                                                                                                              указал так же пути для подлючения phpmailer
                                                                                                              require_once('/feedback/phpmailer/src/Exception.php');
                                                                                                              require_once('/feedback/phpmailer/src/PHPMailer.php');
                                                                                                              require_once('/feedback/phpmailer/src/SMTP.php');
                                                                                                              в консоле ошибок нет единственная ошибка которую выдает это сама форма и то все поля он подсвечивает зеленым но при этом не отправляет и выдает ошибку «Исправьте данные и отправьте форму ещё раз.»
                                                                                                              Вопрос как посмотреть возможные ошибки? если в логах нечего не записываеться.
                                                                                                              скачал ваш обратный звонок с github изменил только в файле process.php почту на свою пароль соответственно ну и указал пути для подключения phpmailer
                                                                                                              1. Александр Мальцев
                                                                                                                24 августа 2020, 15:40
                                                                                                                Тогда следует посмотреть, какой ответ возвращает сервер (скрипт process.php). Это можно выполнить в браузере, используя инструменты разработчика на панели Network.
                                                                                                                1. alex
                                                                                                                  24 августа 2020, 15:47
                                                                                                                  я честно говоря не силен в этой вкладке вообще но ответ со статусом 302 врядли говорит о чем то хорошем как с этим бороться подскажите пожалуйста… возможно я что то где то не дописал и что может быть еще
                                                                                                                  itchief.ru/assets/uploadify/5/0/8/50878fc4faf60ac13f9ecfd1f07592e4.png
                                                                                                                  1. Александр Мальцев
                                                                                                                    24 августа 2020, 16:11
                                                                                                                    Вам необходимо убрать редиректы из .htaccess или другого файла в зависимости от используемого веб-сервера. По крайней мере для process.php.
                                                                                                                    1. alex
                                                                                                                      24 августа 2020, 16:17
                                                                                                                      .htaccess убрал все что там было теперь в вкладке Network. ошибка 500
                                                                                                                      1. Александр Мальцев
                                                                                                                        26 августа 2020, 14:59
                                                                                                                        Вам необходимо разобраться в настройках сервера или CMS, если она используется.
                                                                                                              2. alex
                                                                                                                24 августа 2020, 14:06
                                                                                                                а как посмотреть то я его открываю он пуст
                                                                                                            2. Елена
                                                                                                              21 августа 2020, 15:10
                                                                                                              Добрый день. Подскажите пожалуйста, что я делаю не правильно?
                                                                                                              Форма работает корректно. Но на странице, где я ее установила основные стили прописанные для всего сайта съехали…
                                                                                                              1. Александр Мальцев
                                                                                                                23 августа 2020, 02:02
                                                                                                                Здравствуйте! Все стили этой формы находятся в файле «feedback/css/style.css». Их необходимо изменить под дизайн вашего проекта. Если хотите оставить дизайн формы по умолчанию, то в этом случае вам необходимо удалить из этого файла общие стили (такие, как html, body), а к остальным селекторам слева добавить селектор элемента-контейнера («.feedback»), в котором находится эта форма. В этом случае стили будут применяться только к элементам, которые находятся в «.feedback».
                                                                                                                Например:
                                                                                                                .feedback label {
                                                                                                                  display: inline-block;
                                                                                                                  margin-bottom: .5rem;
                                                                                                                }
                                                                                                                
                                                                                                                .feedback .form-row {
                                                                                                                  display: -ms-flexbox;
                                                                                                                  display: flex;
                                                                                                                  -ms-flex-wrap: wrap;
                                                                                                                  flex-wrap: wrap;
                                                                                                                  margin-right: -5px;
                                                                                                                  margin-left: -5px;
                                                                                                                }
                                                                                                                
                                                                                                                1. Елена
                                                                                                                  25 августа 2020, 15:35
                                                                                                                  Спасибо большое за форму и ответы.
                                                                                                                  Со стилями разобралась.
                                                                                                                  Теперь не получается сделать поле с телефоном.
                                                                                                                  Все фрагменты кода по инструкции выше добавила:
                                                                                                                  в HTML форму:
                                                                                                                  п.1 с указанным кодом
                                                                                                                  п.2 маску для ввода телефона
                                                                                                                  в process.php:
                                                                                                                  п.3 код для проверки корректности введённого пользователем номера телефона (тоже как указано выше)
                                                                                                                  п.4 строчку, которая будет заменять плейсхолдер %email.phone% в шаблоне письма
                                                                                                                  п.5 фрагмент кода, который используется для записывания лога
                                                                                                                  в email.tpl:
                                                                                                                  п.6 в шаблон письма: Телефон пользователя: %email.phone%
                                                                                                                  Но при заполнении телефона:
                                                                                                                  1. маска ввода не работает,
                                                                                                                  2. все поля проходят проверку и светятся зеленым, как правильные, но появляется надпись «Исправьте данные и отправьте форму ещё раз.» Письмо на мою почту соответственно не отправляется.
                                                                                                                  Подскажите пожалуйста, что я делаю не правильно. Без поля телефон все работает замечательно.
                                                                                                                  1. Александр Мальцев
                                                                                                                    26 августа 2020, 15:06
                                                                                                                    Вроде всё правильно делаете. Посмотрите какой ответ (response) приходит от сервера (process.php) на вкладке Network в инструментах разработчика браузера.
                                                                                                                    1. Елена
                                                                                                                      26 августа 2020, 18:06
                                                                                                                      Скрин экрана с ответом прилагаю itchief.ru/assets/uploadify/a/c/5/ac549b3cf4df196455b660805b10f93a.png
                                                                                                                      Что с этим делать? Где искать ошибку?
                                                                                                                      1. Александр Мальцев
                                                                                                                        27 августа 2020, 04:40
                                                                                                                        Скорее всего это связано с тем, что вы допустили синтаксическую ошибку при добавлении своего кода в php файл. Вам необходимо это исправить. Попробуйте изменения делать постепенно и после добавления каждого куска кода проверять работает ли форма. Если она работает, то вставлять следующий фрагмент кода и т.д. Вам так легче будет понять из-за какого кода форма перестаёт работать.
                                                                                                                        1. Елена
                                                                                                                          27 августа 2020, 14:17
                                                                                                                          Александр. Подскажите пожалуйста, можно ли к Вам обратиться за настройкой формы под свой сайт на коммерческой основе?
                                                                                                                          1. Александр Мальцев
                                                                                                                            27 августа 2020, 14:38
                                                                                                                            У вас же почти получилось. Расположите где-нибудь файл (например, на gist.github.com) и укажите ссылку на него. Скорее всего у вас там просто какая-та синтаксическая ошибка.
                                                                                                                            1. Елена
                                                                                                                              27 августа 2020, 16:49
                                                                                                                              Разместила
                                                                                                                              Вот ссылка
                                                                                                                              gist.github.com/Elena0214/1afddd2892ebfc1940ab3699545e4448
                                                                                                                              1. Александр Мальцев
                                                                                                                                27 августа 2020, 17:04
                                                                                                                                Не открывается. Попробуйте открыть в браузере, где вы не выполнили вход на Github или в режиме инкогнито.
                                                                                                                                1. Елена
                                                                                                                                  27 августа 2020, 17:46
                                                                                                                                  на Github раньше ничего не размещала.
                                                                                                                                  Попробовала иначе теперь открывается по ссылке
                                                                                                                                  github.com/Elena198102/-/commits/master
                                                                                                                                  1. Александр Мальцев
                                                                                                                                    29 августа 2020, 02:20
                                                                                                                                    У вас в php файле лишняя закрывающаяся скобка:
                                                                                                                                    }
                                                                                                                                    } // <- эту скобку нужно удалить
                                                                                                                                    /* 6 ЭТАП - ОТПРАВКА ПИСЬМА ПОЛУЧАТЕЛЮ */
                                                                                                                                    
                                                                                                                                    1. Елена
                                                                                                                                      29 августа 2020, 10:12
                                                                                                                                      Скобочку удалила… Ничего не изменилось
                                                                                                                                      Маска ввода телефона не работает (курсор становится в любое место поля и при наборе просто сдвигает маску), валидацию поле не проходит, в каких бы вариантах я не записывала телефон (получаю подсвеченное красным поле и надпись «Введите данные в указанном формате»).
                                                                                                                                      1. Александр Мальцев
                                                                                                                                        30 августа 2020, 17:05
                                                                                                                                        Пример формы с телефоном: yadi.sk/d/xaWs0B-HGe3YBA
                                                                                                              2. Антошкин Сергей Иванович
                                                                                                                13 августа 2020, 21:07
                                                                                                                Здравствуйте Александр. Прошу Вашей помощи. Приобрел шаблон сайта не у добросовестного продавца. многие проблемы решил у шаблона, ну осталось еще тьма… к примеру не работает форма заявок… я их не хотел бы менять, они меня устраивают, ну вот не могу настроить что бы приходили письма на мою почту.как я понял у меня нету по этому адресу url: "/lib/feedback/mail-form.php", ни какого файла и ни какой папки /feedback/ в папке /lib
                                                                                                                Что мне делать? заранее спасибо
                                                                                                                1. Александр Мальцев
                                                                                                                  23 августа 2020, 02:09
                                                                                                                  Привет! Чтобы форма отправляла сообщения на email, необходимо иметь ещё скрипт на стороне сервера. Если его нет, то необходимо его создать или обратиться к продавцу, чтобы он его предоставил.
                                                                                                                2. Владислав
                                                                                                                  08 августа 2020, 19:56
                                                                                                                  Это лучшая форма которую только можно найти. Но вот проблемка, так и не разобрался как настроить отправку сообщения на свой Email (
                                                                                                                  1. Александр Мальцев
                                                                                                                    23 августа 2020, 02:12
                                                                                                                    Спасибо! Настройки для отправки сообщения на Email находятся в файле process.php.
                                                                                                                  2. Maksim
                                                                                                                    05 августа 2020, 18:21
                                                                                                                    Здравствуйте. Не нашёл на сайте как сделать форму «Заказать обратный звонок». Не подскажете как это работает?
                                                                                                                    1. Александр Мальцев
                                                                                                                      06 августа 2020, 04:24
                                                                                                                      Здравствуйте. Тут вроде бы всё просто. Делаете обычную форму обратной связи, например, состоящую из полей имя и телефон. Т.е. вам необходимо, если будете использовать эту форму, убрать из неё всё кроме имени, и добавить к ней телефон.
                                                                                                                      Эту форму можно вызывать как в сплывающем окне при нажатии, например, на кнопку «Заказать обратный звонок», так и просто разместив её на странице. В эту форму пользователь вводит своё имя и номер телефона и нажимает кнопку «Отправить». Ему после отправки формы на экран придёт ответ от сервера в виде, например некоторого сообщения: «Спасибо, в ближайшее время с вами свяжется наш человек». Человек в вашей компании получает на email письмо, что посетитель сайта запросил обратный звонок. Используя координаты в письме, он ему звонит.
                                                                                                                      1. stan_karter
                                                                                                                        13 августа 2020, 12:56
                                                                                                                        Здравствуйте, спс вам за ваш труд.Скажите пожалуйста, как можно заменить маску для телефона и что бы валидация все же работала, так как данный плагин (masked_input) скажем так с багами(тот же курсор при клике становится в любое место).Например inputmask.js? маску подключил, вроде появляется НО, валидации нет. Вставляю if (!empty($_POST['phone'])) { $phone = preg_replace('/\D/', '', $_POST['phone']); //получить номер телефона (цифры) из строки
                                                                                                                        if (!preg_match('/^(8|7)(\d{10})$/', $phone)) {
                                                                                                                        $data['phone'] = 'Поле Телефон содержит не корректный номер!';
                                                                                                                        $data['result'] = 'error';
                                                                                                                        }
                                                                                                                        }
                                                                                                                        Вот с этим не работает вообще, если закоментировать if и все что в нем, то валидации нет, но номер собирает и отправляет, подскажите что тут нужно прописывать, заранее благодарен
                                                                                                                    2. Liuda
                                                                                                                      01 июля 2020, 19:24
                                                                                                                      Здравстуйте! вот эта папка у меня пустая jquery-3.3.1.min.map, как ее наполнить?
                                                                                                                      1. Александр Мальцев
                                                                                                                        04 июля 2020, 15:13
                                                                                                                        Здравствуйте! А зачем вам «jquery-3.3.1.min.map» нужен? При необходимости скачайте его с официального сайта jQuery.
                                                                                                                      2. Liuda
                                                                                                                        01 июля 2020, 18:15
                                                                                                                        Здравтуйте! у меня не работает форма обратной связи на сайте, как проверить, что не так?

                                                                                                                        1. Александр Мальцев
                                                                                                                          04 июля 2020, 15:14
                                                                                                                          Здравствуйте! Тут нужно разобраться что конкретно. Ответы на многие вопросы можно найти в комментариях.
                                                                                                                        2. Фаниль
                                                                                                                          17 июня 2020, 08:11
                                                                                                                          Добрый день

                                                                                                                          А как можно добавить в форму информацию о товаре?
                                                                                                                          К примеру на лендинге есть несколько товаров. Под товаром кнопка «заказать». После нажатия на кнопку заказать, название товара будет добавлено в форму обратной связи. Чтобы понимать, каким товаром человек интересуется
                                                                                                                          1. Александр Мальцев
                                                                                                                            21 июня 2020, 08:55
                                                                                                                            Добрый день! Это можно выполнить посредством добавления в форму скрытого поля. Для более детальной информации можете поискать ответ в комментариях на этой странице.
                                                                                                                          2. Сергей Курилович
                                                                                                                            05 июня 2020, 06:20
                                                                                                                            Александр приветствую, очень классная форма обратной связи спасибо Вам!!!
                                                                                                                            Алексакндр помогите разобраться пожалуйста: заметил такой глюк — отправляю форму с вложением файла, он копируется в папку аплоад и все норм отправляется, однако когда я пытаюсь отправить следующую форму но уже без вложения — файлы в аплоаде копитуются и автоматом присоединяются к форме, и уже получается что отправляется форма с 2умя вложениями.
                                                                                                                            В общем если есть файлы в папке аплоад они полюбому прикрепляются к форме хотя пытаюсь отправлять без вложений!!! что это такое и как с этим разобраться??? За ранее благодарен за ответ!!!
                                                                                                                            1. Igor Ullman
                                                                                                                              26 мая 2020, 11:35
                                                                                                                              Здравствуйте, Александр.
                                                                                                                              Эта форма, пожалуй, лучшая, что нашел на просторах сети. Но сейчас всё большее количество пользователей пользуются интернетом с мобильных устройств, а форма вызываемая, например, со смартфона такая ме-елкая. Как бы добавить ей адаптивный дизайн?
                                                                                                                              1. Александр Мальцев
                                                                                                                                27 мая 2020, 12:36
                                                                                                                                Здравствуйте! Для этого добавьте в раздел <head> следующую строчку:
                                                                                                                                <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
                                                                                                                              2. stan_karter
                                                                                                                                22 мая 2020, 17:11
                                                                                                                                Здравствуйте, скажите, если пробовать эту форму на openserver'е форма сработает? при заполнении формы выдает «Исправьте данные и отправьте форму ещё раз.» хотя все поля зеленые, и в папку OpenServer\userdata\temp\email ничего неприходит, в консоле выдает «Failed to load resource: the server responded with a status of 404 (Not Found)»
                                                                                                                                1. Александр Мальцев
                                                                                                                                  27 мая 2020, 12:39
                                                                                                                                  Здравствуйте!
                                                                                                                                  Для того чтобы использовалась sendmail-заглушка установите в «process.php» для константы IS_SENDING_MAIL_VIA_SMTP значение false:
                                                                                                                                  IS_SENDING_MAIL_VIA_SMTP = true, // выполнять отправку писем через SMTP
                                                                                                                                2. Наталия24
                                                                                                                                  10 мая 2020, 20:35
                                                                                                                                  Здравствуйте, Александр! Спасибо за вашу работу! Очень полезные статьи и нужные. Подскажите, пожалуйста, чтобы настроить данные получателя, то есть меня, нужно сменить данные только в следующих строках:

                                                                                                                                  MAIL_FROM_NAME = 'Имя_сайта', // от какого имени будет отправляться письмо
                                                                                                                                  MAIL_SMTP_USERNAME = 'alexander@yandex.ru', // SMTP-пользователь
                                                                                                                                  MAIL_SMTP_PASSWORD = '12345678'; // SMTP-пароль
                                                                                                                                  или еще в каких-то? Заранее благодарю за понимание и внимание.
                                                                                                                                  1. Александр Мальцев
                                                                                                                                    11 мая 2020, 15:13
                                                                                                                                    Здравствуйте! Спасибо за отзыв!
                                                                                                                                    Если вы настраиваете отправку писем через SMTP, то необходимо настроить значения всех этих констант:
                                                                                                                                    MAIL_FROM = 'no-reply@mydomain.ru', // здесь ваш email 
                                                                                                                                    MAIL_FROM_NAME = 'Имя_сайта', // от какого имени будет отправляться письмо
                                                                                                                                    MAIL_ADDRESS = 'manager@mydomain.ru', // здесь ваш email (если вы хотите отправить письмо себе)
                                                                                                                                    MAIL_SMTP_HOST = 'ssl://smtp.yandex.ru', // SMTP-хост
                                                                                                                                    MAIL_SMTP_PORT = '465', // SMTP-порт
                                                                                                                                    MAIL_SMTP_USERNAME = 'alexander@yandex.ru', // SMTP-пользователь (ваша учётная запись от почты)
                                                                                                                                    MAIL_SMTP_PASSWORD = '12345678'; // SMTP-пароль (ваш пароль от почты)
                                                                                                                                    
                                                                                                                                    Если ваша почта на Яндексе, то тогда MAIL_SMTP_HOST и MAIL_SMTP_PORT изменять не надо. Если вы используете другой SMTP-сервер, например, Google, то тогда в них нужно ввести его значения.
                                                                                                                                    1. stan_karter
                                                                                                                                      21 мая 2020, 22:26
                                                                                                                                      Здравствуйте, скажите, если пробовать эту форму на openserver'е форма сработает? при заполнении формы выдает «Исправьте данные и отправьте форму ещё раз.» хотя все поля зеленые, и в папку OpenServer\userdata\temp\email ничего неприходит, в консоле выдает «Failed to load resource: the server responded with a status of 404 (Not Found)»
                                                                                                                                      1. Александр Мальцев
                                                                                                                                        27 мая 2020, 12:43
                                                                                                                                        Попробуйте воспользоваться этим решением.
                                                                                                                                      2. Наталия24
                                                                                                                                        13 мая 2020, 15:45
                                                                                                                                        Добрый день! Столкнулась с не очень приятным моментом. На сайт установила две формы обратной связи на разных страницах. При открытии одной в зависимости от первой вкладки CSS отображаются или слетают. Обе формы по ваши: контакты и отзывы. К тому же при установке формы с отзывами подавляется часть функций на других страницах. Как выйти из этой ситуации, пожалуйста, подскажите? Заранее очень благодарю за поддержку! Вот мой сайт
                                                                                                                                        1. Александр Мальцев
                                                                                                                                          14 мая 2020, 16:43
                                                                                                                                          У вас на странице форма имеет id, равный contactForm. А в файле «main.css» вы почему-то привязываете стили к форме используя селектор #sendform.
                                                                                                                                          1. Наталия24
                                                                                                                                            24 мая 2020, 14:51
                                                                                                                                            Поняла. Спасибо. Последний по этой теме вопрос: «Как грамотно отключить обязательное добавление фотографий, чтобы можно было отправлять форму без них, если это требуется?».
                                                                                                                                            1. Александр Мальцев
                                                                                                                                              27 мая 2020, 13:22
                                                                                                                                              Прикреплять файлы в этой форме необязательно. Если их не присоединить, то форма и так отправится.
                                                                                                                                              Если нужно их нужно полностью убрать из формы, то просто удалите из HTML файла этот фрагмент кода:
                                                                                                                                              <div class="form-group form-attachments" data-count="5">...</div>
                                                                                                                                              
                                                                                                                                        2. Наталия24
                                                                                                                                          11 мая 2020, 21:41
                                                                                                                                          Да, отлично! Благодарю за взаимодействие. Очень помогло. Все работает шикарно!
                                                                                                                                      3. Александр
                                                                                                                                        06 мая 2020, 08:04
                                                                                                                                        Здравствуйте Александр. Помогите пожалуйста. Добавил 3 поля в HTML
                                                                                                                                        <!-- Номера телефонов-->
                                                                                                                                            <div class="form-row">
                                                                                                                                                <!-- Номер телефона для россии-->
                                                                                                                                                <div class="form-group">
                                                                                                                                                    <label for="phone" class="control-label">Телефон для абонентов РФ</label>
                                                                                                                                                        <div class="input-group">
                                                                                                                                                            <div class="input-group-prepend">
                                                                                                                                                                <div class="input-group-text">+7</div>
                                                                                                                                                            </div>
                                                                                                                                                                <input id="phone" type="phone" name="phone" class="form-control" value="(___)___-__-__" pattern="^\?[0-9]{1}(?[0-9]{3}\)?(\s+)?[0-9]{3}-?[0-9]{2}-?[0-9]{2}$">
                                                                                                                                                            <div class="invalid-feedback"></div>
                                                                                                                                                            </div>
                                                                                                                                                        </div>
                                                                                                                                                <!-- Email пользователя -->
                                                                                                                                                    <div class="form-group">
                                                                                                                                                    <label for="phone" class="control-label">Телефон для абонентов стран СНГ</label>
                                                                                                                                                        <div class="input-group">
                                                                                                                                                            <input id="phone2" type="phone" name="phone2" class="form-control" value="" placeholder="Телефон для абонентов стран СНГ" minlength="11" maxlength="18">
                                                                                                                                                        <div class="invalid-feedback"></div>
                                                                                                                                                    </div>
                                                                                                                                                </div>
                                                                                                                                            </div>
                                                                                                                                        		<!-- Название компании -->
                                                                                                                                                <div class="form-group">
                                                                                                                                                  <label for="company" class="control-label">Компания</label>
                                                                                                                                                  <input id="company" type="text" name="company" required="required" class="form-control" value=""
                                                                                                                                                         placeholder="Компания, организация">
                                                                                                                                                  <!-- <div class="invalid-feedback"></div> -->
                                                                                                                                        
                                                                                                                                        		<!-- Неисправный блок -->
                                                                                                                                                <div class="form-group">
                                                                                                                                                  <label for="name" class="control-label">Тип, модель неисправного блока</label>
                                                                                                                                                  <input id="type" type="text" name="type" class="form-control" value="" placeholder="Тип, модель" minlength="2"
                                                                                                                                                         maxlength="30" required="required">
                                                                                                                                                  <div class="invalid-feedback"></div>
                                                                                                                                                </div>
                                                                                                                                        внес правки в process.php
                                                                                                                                        // выполняем замену плейсхолдеров реальными значениями
                                                                                                                                            $bodyMail = str_replace('%email.title%', MAIL_SUBJECT, $bodyMail);
                                                                                                                                            $bodyMail = str_replace('%email.nameuser%', isset($name) ? $name : '-', $bodyMail);
                                                                                                                                            $bodyMail = str_replace('%email.phone%', isset($phone) ? $phone : 'не указан', $bodyMail);
                                                                                                                                            $bodyMail = str_replace('%email.phone2%', isset($phone2) ? $phone2 : 'не указан', $bodyMail);
                                                                                                                                            $bodyMail = str_replace('%email.company%', isset($company) ? $company : '-', $bodyMail);
                                                                                                                                            $bodyMail = str_replace('%email.type%', isset($type) ? $type : '-', $bodyMail);
                                                                                                                                            $bodyMail = str_replace('%email.message%', isset($message) ? $message : '-', $bodyMail);
                                                                                                                                            $bodyMail = str_replace('%email.emailuser%', isset($email) ? $email : '-', $bodyMail);
                                                                                                                                            $bodyMail = str_replace('%email.date%', date('d.m.Y H:i'), $bodyMail);
                                                                                                                                        и отредактировал email.tpl
                                                                                                                                        <hr> Телефон Россия:
                                                                                                                                                        <b>%email.phone%</b>
                                                                                                                                                        <hr> Телефон СНГ:
                                                                                                                                                        <b>%email.phone2%</b>
                                                                                                                                                        <hr> Название компании:
                                                                                                                                                        <b>%email.company%</b>
                                                                                                                                                        <hr> Неисправный блок, оборудование:
                                                                                                                                                        <b>%email.type%</b>

                                                                                                                                        но к сожалению в приходящих письмах только пустые поля или надпись «не указан». Подскажите пожалуйста что я не так сделал?
                                                                                                                                        1. Александр Мальцев
                                                                                                                                          06 мая 2020, 14:42
                                                                                                                                          Здравствуйте! В «process.php» также необходимо создать переменные, которые вы затем используете в коде:
                                                                                                                                          if (isset($_POST['company'])) {
                                                                                                                                            $company = filter_var($_POST['company'], FILTER_SANITIZE_STRING);
                                                                                                                                          }
                                                                                                                                          ...
                                                                                                                                          1. Александр
                                                                                                                                            06 мая 2020, 15:20
                                                                                                                                            С переменной $company заработало а вот с телефоном вообще никак не хочет, вроде и переменная объявлена и прописано все.
                                                                                                                                            <img
                                                                                                                                            src=«https://itchief.ru/assets/uploadify/8/e/9/8e9459ae928182b66e71a03efcc73aeas.jpg» class=«fancybox thumbnail center»>


                                                                                                                                            Вот что приходит на почту.
                                                                                                                                            <img
                                                                                                                                            src=«https://itchief.ru/assets/uploadify/4/5/5/455d99bdc31acc80b8c000ff19003ec5s.jpg» class=«fancybox thumbnail center»>
                                                                                                                                            1. Александр Мальцев
                                                                                                                                              06 мая 2020, 15:39
                                                                                                                                              Внимательно делайте! Нужно переменной $phone присваивать, а не $message.
                                                                                                                                              1. Александр
                                                                                                                                                07 мая 2020, 08:42
                                                                                                                                                Александр. Огромное спасибо за форму и отдельно за помощь. Подобных людей на просторах интернета я ни когда не встречал. Удачи и процветания!!!
                                                                                                                                        2. Alexander
                                                                                                                                          02 мая 2020, 16:45
                                                                                                                                          Добрый день, Александр!
                                                                                                                                          Подскажите пожалуйста нужно данные из формы сохранить в файл JSON.
                                                                                                                                          Я вспомнил что ваша форма сохраняет лог в logs.txt а это значит, что вообще не проблема то же самые данные записать как объект в JSON файл.
                                                                                                                                          Со стороны JavaScript всё готово, а вот PHP вообще не знаком с данным языком.
                                                                                                                                          Помогите с кодом PHP пожалуйста.

                                                                                                                                          document.addEventListener('DOMContentLoaded', () => {
                                                                                                                                          
                                                                                                                                            const ajaxSend = (formData) => {
                                                                                                                                              fetch('register.php', { // файл-обработчик 
                                                                                                                                                method: 'POST',
                                                                                                                                                headers: {
                                                                                                                                                  'Content-Type': 'application/json', // отправляемые данные 
                                                                                                                                                },
                                                                                                                                                body: JSON.stringify(formData)
                                                                                                                                              })
                                                                                                                                                .then(response => alert('Сообщение отправлено'))
                                                                                                                                                .catch(error => console.error(error))
                                                                                                                                            };
                                                                                                                                          
                                                                                                                                            const forms = document.getElementsByTagName('form');
                                                                                                                                            for (let i = 0; i < forms.length; i++) {
                                                                                                                                              forms[i].addEventListener('submit', function (e) {
                                                                                                                                                e.preventDefault();
                                                                                                                                          
                                                                                                                                                let formData = new FormData(this);
                                                                                                                                                formData = Object.fromEntries(formData);
                                                                                                                                                console.log(forms);
                                                                                                                                                ajaxSend(formData);
                                                                                                                                                this.reset();
                                                                                                                                              });
                                                                                                                                            };
                                                                                                                                          });
                                                                                                                                          
                                                                                                                                          1. Александр Мальцев
                                                                                                                                            03 мая 2020, 15:35
                                                                                                                                            В PHP сохранить данные в JSON можно так:
                                                                                                                                            <?php
                                                                                                                                            $path = 'forms.json'; // файл, в который нужно сохранить данные
                                                                                                                                            file_put_contents($path, file_get_contents('php://input'), LOCK_EX);
                                                                                                                                            ?>
                                                                                                                                            
                                                                                                                                            1. Alexander
                                                                                                                                              04 мая 2020, 11:41
                                                                                                                                              Спасибо большое!
                                                                                                                                          2. Александр
                                                                                                                                            29 апреля 2020, 21:32
                                                                                                                                            Александр еще раз здравствуйте. Поторопился с выводом. Я прописал checked=«checked» для того чтобы чек бокс по умолчанию был активным, и вроде так и есть, НО кнопка отправки сообщения не активна. Только после того как снимешь и заново поставишь галочку кнопка становится рабочей. Подскажите пожалуйста как сделать чекбокс с политикой конфиденциальности по умолчанию активным?
                                                                                                                                            1. Александр Мальцев
                                                                                                                                              01 мая 2020, 14:06
                                                                                                                                              Здравствуйте. Удалите у кнопки submit атрибут disabled.
                                                                                                                                            2. NeironYT
                                                                                                                                              29 апреля 2020, 14:29
                                                                                                                                              Помогите пожалуста, почему не приходят сообщения на почту. вроде ввел все правильно. мне пришло уведомление только на почту
                                                                                                                                              Кто-то хотел войти в Ваш аккаунт из стороннего приложения, используя Ваш пароль, но мы заблокировали эту попытку. Рекомендуем Вам проверить действия в аккаунте и убедиться, что у посторонних нет доступа к нему.
                                                                                                                                              Что мне сделать????
                                                                                                                                              1. Александр Мальцев
                                                                                                                                                29 апреля 2020, 16:26
                                                                                                                                                Вы используете почту от Google? Если да, то вам нужно где-то в настройках Google аккаунта включить доступ для сайта, через который вы будете отправлять почту. Посмотрите на странице «Приложения, у которых есть доступ к аккаунту».
                                                                                                                                                1. NeironYT
                                                                                                                                                  29 апреля 2020, 19:41
                                                                                                                                                  Я использую бесплатний хостинг 000webhostapp.com. Может в етом проблема. + еще в логах такая ошибка
                                                                                                                                                  Ошибка при отправке письма: SMTP connect() failed. github.com/PHPMailer/PHPMailer/wiki/Troubleshooting. А как именно включить доступ к сайту? Ненадежные приложения, у которых есть доступ к аккаунту? Я его выключил.
                                                                                                                                                  1. Александр Мальцев
                                                                                                                                                    01 мая 2020, 14:02
                                                                                                                                                    По этому хостингу не подскажу, обратитесь в техподдержку. Данная ошибка означает что произошла ошибка соединения с SMTP сервером. Проверьте порт и хост SMTP сервера, который вы используете. Может просто что-то не то указали?
                                                                                                                                              2. Александр
                                                                                                                                                29 апреля 2020, 13:17
                                                                                                                                                Здравствуйте Александр. Помогите пожалуйста разобраться. Добавил поле телефона, добавил в него шаблон, внес проверку. Но это поле отказывается работать правильно, постоянно выдает ошибку валидации.
                                                                                                                                                Файл — index.php —
                                                                                                                                                <!-- Номер телефона -->
                                                                                                                                                        <div class="form-group">
                                                                                                                                                          <label for="phone" class="control-label">Телефон</label>
                                                                                                                                                          <div class="input-group">
                                                                                                                                                            <div class="input-group-prepend">
                                                                                                                                                              <div class="input-group-text">+7</div>
                                                                                                                                                            </div>
                                                                                                                                                            <input id="phone" type="phone" name="phone" class="form-control" value="(___)___-__-__" pattern="^\?[0-9]{1}(?[0-9]{3}\)?(\s+)?[0-9]{3}-?[0-9]{2}-?[0-9]{2}$">
                                                                                                                                                            <div class="invalid-feedback"></div>
                                                                                                                                                          </div>
                                                                                                                                                        </div>
                                                                                                                                                -//-//-//-//-//-//-//-
                                                                                                                                                <script>
                                                                                                                                                  // masked_input_1.4.1-min.js
                                                                                                                                                  // angelwatt.com/coding/masked_input.php
                                                                                                                                                
                                                                                                                                                (function(a){a.MaskedInput=function(f){if(!f||!f.elm||!f.format){return null}if(!(this instanceof a.MaskedInput)){return new a.MaskedInput(f)}var o=this,d=f.elm,s=f.format,i=f.allowed||"0123456789",h=f.allowedfx||function(){return true},p=f.separator||"/:-",n=f.typeon||"_YMDhms",c=f.onbadkey||function(){},q=f.onfilled||function(){},w=f.badkeywait||0,A=f.hasOwnProperty("preserve")?!!f.preserve:true,l=true,y=false,t=s,j=(function(){if(window.addEventListener){return function(E,C,D,B){E.addEventListener(C,D,(B===undefined)?false:B)}}if(window.attachEvent){return function(D,B,C){D.attachEvent("on"+B,C)}}return function(D,B,C){D["on"+B]=C}}()),u=function(){for(var B=d.value.length-1;B>=0;B--){for(var D=0,C=n.length;D<C;D++){if(d.value[B]===n[D]){return false}}}return true},x=function©{try{C.focus();if(C.selectionStart>=0){return C.selectionStart}if(document.selection){var B=document.selection.createRange();return -B.moveStart("character",-C.value.length)}return -1}catch(D){return -1}},b=function(C,E){try{if(C.selectionStart){C.focus();C.setSelectionRange(E,E)}else{if(C.createTextRange){var B=C.createTextRange();B.move("character",E);B.select()}}}catch(D){return false}return true},m=function(D){D=D||window.event;var C="",E=D.which,B=D.type;if(E===undefined||E===null){E=D.keyCode}if(E===undefined||E===null){return""}switch(E){case 8:C="bksp";break;case 46:C=(B==="keydown")?"del":".";break;case 16:C="shift";break;case 0:case 9:case 13:C="etc";break;case 37:case 38:case 39:case 40:C=(!D.shiftKey&&(D.charCode!==39&&D.charCode!==undefined))?"etc":String.fromCharCode(E);break;default:C=String.fromCharCode(E);break}return C},v=function(B,C){if(B.preventDefault){B.preventDefault()}B.returnValue=C||false},k=function(B){var D=x(d),F=d.value,E="",C=true;switch©{case (i.indexOf(B)!==-1):D=D+1;if(D>s.length){return false}while(p.indexOf(F.charAt(D-1))!==-1&&D<=s.length){D=D+1}if(!h(o,B,D)){c(B);return false}E=F.substr(0,D-1)+B+F.substr(D);if(i.indexOf(F.charAt(D))===-1&&n.indexOf(F.charAt(D))===-1){D=D+1}break;case (B==="bksp"):D=D-1;if(D<0){return false}while(i.indexOf(F.charAt(D))===-1&&n.indexOf(F.charAt(D))===-1&&D>1){D=D-1}E=F.substr(0,D)+s.substr(D,1)+F.substr(D+1);break;case (B==="del"):if(D>=F.length){return false}while(p.indexOf(F.charAt(D))!==-1&&F.charAt(D)!==""){D=D+1}E=F.substr(0,D)+s.substr(D,1)+F.substr(D+1);D=D+1;break;case (B==="etc"):return true;default:return false}d.value="";d.value=E;b(d,D);return false},g=function(B){if(i.indexOf(B)===-1&&B!=="bksp"&&B!=="del"&&B!=="etc"){var C=x(d);y=true;c(B);setTimeout(function(){y=false;b(d,C)},w);return false}return true},z=function©{if(!l){return true}C=C||event;if(y){v©;return false}var B=m©;if((C.metaKey||C.ctrlKey)&&(B==="X"||B==="V")){v©;return false}if(C.metaKey||C.ctrlKey){return true}if(d.value===""){d.value=s;b(d,0)}if(B==="bksp"||B==="del"){k(B);v©;return false}return true},e=function©{if(!l){return true}C=C||event;if(y){v©;return false}var B=m©;if(B==="etc"||C.metaKey||C.ctrlKey||C.altKey){return true}if(B!=="bksp"&&B!=="del"&&B!=="shift"){if(!g(B)){v©;return false}if(k(B)){if(u()){q(o,x(d))}v(C,true);return true}if(u()){q(o,x(d))}v©;return false}return false},r=function(){if(!d.tagName||(d.tagName.toUpperCase()!=="INPUT"&&d.tagName.toUpperCase()!=="TEXTAREA")){return null}o.elm=d;if(!A||d.value===""){d.value=s}j(d,"keydown",function(B){z(B)});j(d,"keypress",function(B){e(B)});j(d,"focus",function(){t=d.value});j(d,"blur",function(){if(d.value!==t&&d.onchange){d.onchange()}});return o};o.resetField=function(){d.value=s};o.setAllowed=function(B){i=B;o.resetField()};o.setCursorPos=function(B){b(d,B)};o.setFormat=function(B){s=B;o.resetField()};o.setSeparator=function(B){p=B;o.resetField()};o.setTypeon=function(B){n=B;o.resetField()};o.setEnabled=function(B){l=B};return r()}}(window));
                                                                                                                                                
                                                                                                                                                  MaskedInput({
                                                                                                                                                    elm: document.getElementById('phone'), // select by id
                                                                                                                                                    format: '(___)___-__-__',
                                                                                                                                                    separator: '()-'
                                                                                                                                                  });
                                                                                                                                                </script>
                                                                                                                                                
                                                                                                                                                Файл — process.php —
                                                                                                                                                // проверка поля phone
                                                                                                                                                if (isset($_POST['phone'])) {
                                                                                                                                                  $phone = preg_replace('/\D/', '', $_POST['phone']); //получить номер телефона (цифры) из строки
                                                                                                                                                  if (!preg_match('/^(\d{10})$/', $phone)) {
                                                                                                                                                    $data['phone'] = 'Поле Телефон содержит не корректный номер!';
                                                                                                                                                    $data['result'] = 'error';
                                                                                                                                                    }
                                                                                                                                                }
                                                                                                                                                itchief.ru/assets/uploadify/f/c/a/fcace09a71430e332e4501c0b00f3353.jpg
                                                                                                                                                И еще один вопрос. Можноли чек бокс с политикой конфидециальности по умолчанию сделать активным?
                                                                                                                                                Заранее огромое спасибо.
                                                                                                                                                1. Александр
                                                                                                                                                  29 апреля 2020, 14:15
                                                                                                                                                  Разобрался. Все заработало. Спасибо за форму, очень удобная.
                                                                                                                                                  1. Александр Мальцев
                                                                                                                                                    29 апреля 2020, 16:03
                                                                                                                                                    Отлично! Пожалуйста!
                                                                                                                                                2. Stanislas
                                                                                                                                                  22 апреля 2020, 03:21
                                                                                                                                                  Добрый день.
                                                                                                                                                  Заметил что форма отправляет сообщения с вложением, но почему-то внизу остается предупреждающее сообщение
                                                                                                                                                  о необходимости исправить данные и отправить форму еще раз…

                                                                                                                                                  какие-то проволочки на стороне Яндеса как понял?
                                                                                                                                                  2020-04-21 19:04:22 Connection: opening to ssl://smtp.yandex.ru:465, timeout=300, options=array()
                                                                                                                                                  2020-04-21 19:04:23 Connection failed. Error #2: stream_socket_client(): SSL operation failed with code 1. OpenSSL Error messages:error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed [/feedback/phpmailer/src/SMTP.php line 348]
                                                                                                                                                  2020-04-21 19:04:23 Connection failed. Error #2: stream_socket_client(): Failed to enable crypto [/feedback/phpmailer/src/SMTP.php line 348]
                                                                                                                                                  2020-04-21 19:04:23 Connection failed. Error #2: stream_socket_client(): unable to connect to ssl://smtp.yandex.ru:465 (Unknown error) [/feedback/phpmailer/src/SMTP.php line 348]
                                                                                                                                                  2020-04-21 19:04:23 SMTP ERROR: Failed to connect to server:  (0)
                                                                                                                                                  SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
                                                                                                                                                  
                                                                                                                                                  1. Александр Мальцев
                                                                                                                                                    22 апреля 2020, 16:26
                                                                                                                                                    Здравствуйте! Какая-то проблема с сертификатами. Обратитесь в техподдержку хостинга, которым вы пользуетесь.
                                                                                                                                                  2. gularon
                                                                                                                                                    13 апреля 2020, 21:54
                                                                                                                                                    Здравствуйте, Александр.
                                                                                                                                                    Очень хотелось вашу форму обратной связи поместить на сайт, который пытаюсь сделать.
                                                                                                                                                    Выбрал простую форму, самую первую, скопировал всю папку feedback к себе, скопировал и вставил куда надо код html формы себе на страницу, никаких настроек вообще не делал. Всё вроде красиво, но когда в браузере заполняю форму и пробую отправить, не получается, пишет «Исправьте данные и отправьте форму ещё раз». Вообще не силён в php и js. Подскажите, надо было всё-таки же что-то прописать… ну хотя-бы на какой e-mail должно это сообщение уйти
                                                                                                                                                    1. Александр Александрович
                                                                                                                                                      13 апреля 2020, 15:35
                                                                                                                                                      Здравствуйте. Подскажите как вынести кнопку для отправки формы на сервер за пределы атрибута form. Сама форма работает если присвоить к submit идентификатор form=«feedback_form» но пропадает связь с пользовательским соглашением.
                                                                                                                                                      1. Александр Мальцев
                                                                                                                                                        15 апреля 2020, 13:41
                                                                                                                                                        Здравствуйте.
                                                                                                                                                        Для этого нужно в функции переписать код для нахождения кнопки submit относительно формы:
                                                                                                                                                        // переключить во включенное или выключенное состояние кнопку submit
                                                                                                                                                        var _changeStateSubmit = function (_this, state) {
                                                                                                                                                          _this._form.find('[type="submit"]').prop('disabled', state);
                                                                                                                                                        };
                                                                                                                                                        
                                                                                                                                                        1. Александр Александрович
                                                                                                                                                          14 апреля 2020, 11:44
                                                                                                                                                          С кнопкой вроде разобрался как-то. Но всё равно не понимаю как осуществляется навигация и поиск по элементам формы.
                                                                                                                                                          Я хочу например вставить картинку после успешной отправки. Могу это сделать так:
                                                                                                                                                          // при успешной отправки формы
                                                                                                                                                                  if (data.result === "success") {
                                                                                                                                                                      jQuery(document).trigger('pf_success', {data: this});
                                                                                                                                                                      if (_this._settings.isUseDefaultSuccessMessage) 
                                                                                                                                                          {
                                                                                                                                                                          _this._form.parent().find('.form-result-success')
                                                                                                                                                                              .removeClass('d-none')
                                                                                                                                                                              .addClass('d-flex');
                                                                                                                                                                   //картинка
                                                                                                                                                          var pc = document.querySelector('.form-result-success');
                                                                                                                                                          var pic = document.createElement("IMG");
                                                                                                                                                          pic.src = "konvert.gif";
                                                                                                                                                          pc.appendChild(pic);
                                                                                                                                                          Подскажите как мне вставить её без document.querySelector
                                                                                                                                                          Как работает эта строчка
                                                                                                                                                          _this._form.parent().find('.form-result-success')
                                                                                                                                                          1. Александр Мальцев
                                                                                                                                                            15 апреля 2020, 12:59
                                                                                                                                                            Эта строчка работает так:
                                                                                                                                                            _this._form.parent().find('.form-result-success')
                                                                                                                                                            1) _this — содержит ссылку на объект, созданный с помощью функции-конструктора ProcessForm.
                                                                                                                                                            2) _form — это обращение к свойству «_form» объекта «_this». В нём находится jQuery объект, содержащий ссылку на DOM-элемент формы.
                                                                                                                                                            Элемент с классом «form-result-success» находится в том же контейнере что и форма:
                                                                                                                                                            <div class="form__wrapper">
                                                                                                                                                              <form id="feedback-form" action="/feedback/process/process.php" enctype="multipart/form-data" novalidate>...</form>
                                                                                                                                                              <div class="form-result-success d-none">...</div>
                                                                                                                                                            </div>
                                                                                                                                                            Поэтому чтобы на него дойти, нужно подняться к родительскому элементу формы («.parent()»), а затем в нём найти элемент с классом «form-result-success» («find('.form-result-success')»).
                                                                                                                                                            3) parent() – выполняет переход к родительскому элементу формы.
                                                                                                                                                            4) find('.form-result-success') – осуществляет поиск элемента в родительском элементе формы по классу «form-result-success».

                                                                                                                                                            Вставить картинку можно так:
                                                                                                                                                            var successMsg = _this._form.parent().find('.form-result-success');
                                                                                                                                                            successMsg.append('<img src="konvert.gif" alt="">')
                                                                                                                                                            successMsg.removeClass('d-none').addClass('d-flex');
                                                                                                                                                            
                                                                                                                                                            1. Александр Александрович
                                                                                                                                                              15 апреля 2020, 13:52
                                                                                                                                                              Спасибо вам преогромнейшее.
                                                                                                                                                        2. MakcuMyM
                                                                                                                                                          09 апреля 2020, 07:13
                                                                                                                                                          Александр спасибо за вашу форму.Возник Вопрос прочитал ветку комментариев, но к сожалению на мой вопрос не нашел ответа.Версия 3.0.1.
                                                                                                                                                          1. Хотелось бы убрать поля email,name.Выше вы написали что это редактирование файлов index.html,process-forms.js,process.php.Закоментировал что связано с этими полями, но скрипт упорно не хочет реагировать.

                                                                                                                                                          2. Добавить поле выбора типа сообщения
                                                                                                                                                          <!-- Выбор типа обращения -->
                                                                                                                                                             <div class="form-group">
                                                                                                                                                            <label for="message_type">Поле 1</label>
                                                                                                                                                            <select id="message_type" name="message_type" class="form-control" required="required">
                                                                                                                                                              <option>выбор1</option>
                                                                                                                                                              <option>выбор2</option>
                                                                                                                                                              <option>выбор3</option>    
                                                                                                                                                            </select>
                                                                                                                                                          </div>
                                                                                                                                                          
                                                                                                                                                          Я так понимаю надо занести в index.html еще маску для этих полей, добавить в process-forms.js проверку на валидацию этого поля и в файл process.php на примере поля name? Натолкните на статью где можно глянуть как правильно добавить маску для этого поля.
                                                                                                                                                          1. Александр Мальцев
                                                                                                                                                            13 апреля 2020, 14:38
                                                                                                                                                            Пожалуйста. Чтобы убрать поля (например, email и name) нужно удалить их HTML код, а также всё что с ними связано в «process.php» (проверку и добавление их в тело письма). В JavaScript ничего менять не нужно.

                                                                                                                                                            Добавление маски на клиенте осуществляется через атрибут pattern.
                                                                                                                                                            Например:
                                                                                                                                                            <input id="phone" type="tel" name="phone" class="form-control" value="(___)___-__-__" pattern="^\(?[0-9]{3}\)?(\s+)?[0-9]{3}-?[0-9]{2}-?[0-9]{2}$">
                                                                                                                                                            
                                                                                                                                                            Вообще любые требования к полям на клиенте через обычные атрибуты для полей ввода: minlength, maxlength, required, pattern и т.д.
                                                                                                                                                          2. Ильгиз
                                                                                                                                                            25 марта 2020, 22:25
                                                                                                                                                            Добрый день, Александр!

                                                                                                                                                            Спасибо вам, за форму!

                                                                                                                                                            Всё работает. Только консоль интернет-браузера сообщает о ошибке:
                                                                                                                                                            (index):1257 Uncaught ReferenceError: $ is not defined

                                                                                                                                                            — возможно, это минус к SEO, так как поисковики учитывают качество кода (в том числе, наличие/отсутствие ошибок).
                                                                                                                                                            1. Ильгиз
                                                                                                                                                              26 марта 2020, 17:13
                                                                                                                                                              Забыл вчера сформулировать сам вопрос:
                                                                                                                                                              Как можно избежать данной ошибки? Ваша форма классная, но при этом и рисковать позициями в поиске не хочется)
                                                                                                                                                              1. Александр Мальцев
                                                                                                                                                                28 марта 2020, 14:55
                                                                                                                                                                Добрый день! Это не относится к форме. Вам необходимо проверить последовательность подключения js-библиотек на вашем сайте. JavaScript этой формы зависит только от jQuery, поэтому «process-forms.js» нужно подключить после неё:
                                                                                                                                                                ...
                                                                                                                                                                <script src="/feedback/vendors/jquery/jquery-3.4.1.min.js"></script>
                                                                                                                                                                <script src="/feedback/js/process-forms.js"></script>
                                                                                                                                                                ...
                                                                                                                                                                
                                                                                                                                                                Проверьте, может вы несколько раз подключаете библиотеку jQuery? Что у вас находиться на 1257 строчке?
                                                                                                                                                            2. Александр Александрович
                                                                                                                                                              19 марта 2020, 21:20
                                                                                                                                                              Здравствуйте. Подскажите пожалуйста, как убрать поле email пользователя?
                                                                                                                                                              1. Александр Александрович
                                                                                                                                                                20 марта 2020, 23:56
                                                                                                                                                                Здравствуйте. Я пытаюсь сделать в форме чтобы только одно из двух полей были обязательно заполнены или телефон или email. Использую последнюю версию вышей формы. Подскажите пожалуйста как это реализовать.
                                                                                                                                                                1. Александр Александрович
                                                                                                                                                                  21 марта 2020, 00:18
                                                                                                                                                                  Сделать например если поле телефон заполнено и прошло проверку значит отключить проверку email. Помогите.
                                                                                                                                                                  1. Александр Мальцев
                                                                                                                                                                    21 марта 2020, 13:49
                                                                                                                                                                    Для этого можно добавить следующую строчку в «process-form.js»:
                                                                                                                                                                    ...
                                                                                                                                                                    // отправка формы
                                                                                                                                                                    var _sendForm = function (_this) {
                                                                                                                                                                      // добавляем эту строчку
                                                                                                                                                                      $(document).trigger('beforeSubmit', [_this._form]);
                                                                                                                                                                        if (!_validateForm(_this)) {
                                                                                                                                                                        ...
                                                                                                                                                                    
                                                                                                                                                                    Она будет генерировать событие «beforeSubmit» перед отправкой формы.

                                                                                                                                                                    Далее в своём js файле необходимо обработать это событие, а именно установить необходимым элементам input определённое значение свойству required. Если, например, поле email заполнено, а phone нет, то соответственно полю email в качестве значения свойства required установить true, а phone — false.
                                                                                                                                                                    $(document).on('beforeSubmit', function(e, _this){
                                                                                                                                                                      // если форма имеет id не feedback-form, то завершаем работу
                                                                                                                                                                      if (_this.attr('id') !== 'feedback-form') {
                                                                                                                                                                        return;
                                                                                                                                                                      }
                                                                                                                                                                      if ((_this.find('[name="phone"]').val().length) > 0 && (_this.find('[name="email"]').val().length === 0)) {
                                                                                                                                                                        _this.find('[name="phone"]').prop('required', true);
                                                                                                                                                                        _this.find('[name="email"]').prop('required', false);            
                                                                                                                                                                      } else if ((_this.find('[name="phone"]').val().length) === 0 && (_this.find('[name="email"]').val().length > 0)) {
                                                                                                                                                                        _this.find('[name="phone"]').prop('required', false);
                                                                                                                                                                        _this.find('[name="email"]').prop('required', true); 
                                                                                                                                                                      } else {
                                                                                                                                                                        _this.find('[name="phone"]').prop('required', true);
                                                                                                                                                                        _this.find('[name="email"]').prop('required', true); 
                                                                                                                                                                      }
                                                                                                                                                                    });
                                                                                                                                                                    
                                                                                                                                                                    Но, это только обработка на клиенте.

                                                                                                                                                                    На сервере (в php) тоже необходимо выполнить валидацию полей phone и email.
                                                                                                                                                                    Например, это можно сделать так:
                                                                                                                                                                    // проверка полей email и phone
                                                                                                                                                                    if (!empty($_POST['email'])) {
                                                                                                                                                                      if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { // защита от XSS
                                                                                                                                                                        $data['email'] = 'Адрес электронной почты не корректный';
                                                                                                                                                                        $data['result'] = 'error';
                                                                                                                                                                        log_write('Не пройдена валидация поля: email! Оно имеет не корретное значение!');
                                                                                                                                                                      } else {
                                                                                                                                                                        $email = $_POST['email'];
                                                                                                                                                                      }
                                                                                                                                                                    } else {
                                                                                                                                                                      if (empty($_POST['phone'])) {
                                                                                                                                                                        $data['email'] = 'Заполните это поле или телефон';
                                                                                                                                                                        $data['result'] = 'error';
                                                                                                                                                                        log_write('Не пройдена валидация поля: email! Оно не заполнено!');
                                                                                                                                                                      }
                                                                                                                                                                    }
                                                                                                                                                                    
                                                                                                                                                                    if (!empty($_POST['phone'])) {
                                                                                                                                                                      $phone = preg_replace('/\D/', '', $_POST['phone']);
                                                                                                                                                                      // если число состоит не из 10 цифр, то...
                                                                                                                                                                      if (!preg_match('/^(\d{10})$/', $phone)) {
                                                                                                                                                                        $data['phone'] = 'Поле Телефон содержит не корректный номер!';
                                                                                                                                                                        $data['result'] = 'error';
                                                                                                                                                                        log_write('Не пройдена валидация поля: phone! Оно имеет не корретное значение!');
                                                                                                                                                                      }
                                                                                                                                                                    } else {
                                                                                                                                                                      if (empty($_POST['email'])) {
                                                                                                                                                                        $data['email'] = 'Заполните это поле или email';
                                                                                                                                                                        $data['result'] = 'error';
                                                                                                                                                                        log_write('Не пройдена валидация поля: phone! Оно не заполнено!');
                                                                                                                                                                      }
                                                                                                                                                                    }
                                                                                                                                                                    
                                                                                                                                                                    1. Александр Александрович
                                                                                                                                                                      27 марта 2020, 08:52
                                                                                                                                                                      Спасибо. Мне очень нравится что вы не просто помогаете но ещё и объясняете всё довольно подробно. Получается как в школе почти.))) Труд ваш не оценим. Вы или не человек или гений. Спасибо.
                                                                                                                                                              2. Kasper
                                                                                                                                                                14 марта 2020, 16:38
                                                                                                                                                                Александр, я настроил вашу форму на тестовом сервере, потом приобрел хостинг на другом сервере и только потом узнал, что там версия php 5.3.3 (native)… а вы пишите, что минимальная нужна 5.6. Что-то можно придумать с версией 5.3.3 или шансов нет, только менять хостинг и искать с версией php выше 5.6.?
                                                                                                                                                                1. Александр Мальцев
                                                                                                                                                                  15 марта 2020, 13:59
                                                                                                                                                                  Может и можно, но придётся многое переписывать. Кроме этого, в этом проекте используется библиотека PHPMailer, которая требует PHP не ниже 5.5. В этом случае необходимо будет искать более старый релиз, которую имеет поддержку PHP 5.3.3.
                                                                                                                                                                2. Виктор
                                                                                                                                                                  10 марта 2020, 00:22
                                                                                                                                                                  Здравствуйте!
                                                                                                                                                                  При отправке данных формы на почту файл приходит в виде ссылки, но при переходе по этой ссылке открывается страница с сообщением «Not Found». Я так понимаю, прикрепленный файл должен сохраняться на хостинге в папке uploads, но его там нет. Использую хостинг beget.
                                                                                                                                                                  1. Александр Мальцев
                                                                                                                                                                    10 марта 2020, 15:36
                                                                                                                                                                    Добрый день! Проверьте есть ли права на доступ к этой папке из браузера.
                                                                                                                                                                  2. Юрий
                                                                                                                                                                    21 февраля 2020, 14:30
                                                                                                                                                                    Здравствуйте. У вас отличная форма. Спасибо, что сделали и поддерживаете. Есть такой момент: валидация формы происходит после нажатия на кнопку Отправить. До этого момента, поля с ошибкой не обнуляются после ввода новых данных. У пользователей это может вызвать ощущения, что они продолдают вводить не вернве данные. Вопрос: как скинуть класс invalid по клику на поле или при вводе текста, а не при нажатии на кнопку?
                                                                                                                                                                    1. Александр Мальцев
                                                                                                                                                                      21 февраля 2020, 14:55
                                                                                                                                                                      Здравствуйте! Спасибо!
                                                                                                                                                                      Для этого просто нужно добавить в JavaScript следующее:
                                                                                                                                                                      $('input, textarea').on('focus', function () {
                                                                                                                                                                        $(this).removeClass('is-valid is-invalid');
                                                                                                                                                                      });
                                                                                                                                                                      
                                                                                                                                                                      1. Юрий
                                                                                                                                                                        21 февраля 2020, 15:12
                                                                                                                                                                        Отлично. Всё получилось. Спасибо за быстрый ответ.)
                                                                                                                                                                    2. Ахмет Шабакаев
                                                                                                                                                                      20 февраля 2020, 15:51
                                                                                                                                                                      и +7 не могу поставить перед окном ввода.
                                                                                                                                                                      1. Ахмет Шабакаев
                                                                                                                                                                        20 февраля 2020, 16:09
                                                                                                                                                                        Александр, здравствуйте.
                                                                                                                                                                        Подскажите, как добавить в форму v2.0.1 (со строкой телефон) кнопку «Открыть форму» как в версии модального окна v1.0? Я пробовал добавлять из одной формы в другую, у меня не получается правильно оформить.
                                                                                                                                                                        1. Александр Мальцев
                                                                                                                                                                          21 февраля 2020, 14:20
                                                                                                                                                                          Здравствуйте!
                                                                                                                                                                          Если вам нужна форма в модальном окне, то тогда лучше возьмите её из этой статьи: Контактная форма во всплывающем окне.
                                                                                                                                                                          В неё будет проще добавить телефон, чем переделывать форму для отображения её в модальном окне.
                                                                                                                                                                          1. Ахмет Шабакаев
                                                                                                                                                                            21 февраля 2020, 15:57
                                                                                                                                                                            Как раз её и взял (версия 1.0 под Bootstrap 3). Просто прикручивая к ней строку с телефоном, обратил внимание, что в другой версии изменена маска и метод её применения и +7 стоит перед строкой в красивом оформлении, поэтому и хотел куски кода из 2.0.1 в версию 1.0 перенести, но увы не получилось. Потом пытался сделать наоборот, как в 1.0 прикрутить кнопку вызова модального окна к 2.0.1, тоже без успехов…
                                                                                                                                                                            <img
                                                                                                                                                                            src=«https://itchief.ru/assets/uploadify/5/f/c/5fc69cbe8ecf2ab525e3c76a647eb9bds.jpg» class=«fancybox thumbnail center»>

                                                                                                                                                                            <img
                                                                                                                                                                            src=«https://itchief.ru/assets/uploadify/5/f/c/5fc69cbe8ecf2ab525e3c76a647eb9bds.jpg» class=«fancybox thumbnail center»>

                                                                                                                                                                            <img
                                                                                                                                                                            src=«https://itchief.ru/assets/uploadify/2/6/b/26b3b5c8e06ebfc5013840825879e6f2s.jpg» class=«fancybox thumbnail center»>
                                                                                                                                                                      2. Kasper
                                                                                                                                                                        12 февраля 2020, 17:55
                                                                                                                                                                        Александр, уже не знаю куда копать. Использую бесплатный домен на beget.tech для теста. Залил исключительно вашу форму (все файлы: index.html, process… все ваше). Прописал почту и необходимые данные в настройках.

                                                                                                                                                                        Итог: письмо с обратной формы приходит на указанную мною почту (яндекс), но каждый раз после отправки мне форма пишет сообщение: «Исправьте данные и отправьте форму ещё раз.»

                                                                                                                                                                        При этом, все поля «зеленые», в логе нет ошибок, аналогично нет ошибок при отправки в консоле. По идее она должна написать то же, что в вашем тесте (отчет об успешной отправке). То есть, письмо приходит, ошибок нет, но вот это сообщение выскакивает, с которым я не могу разобраться. Уже пробежался по всем комментариям связанным с этим, попробовал варианты ребят, но тщетно. В чем может быть причина? Может быть причина в хостинге? Если да, то как локализовать проблему?
                                                                                                                                                                        1. gularon
                                                                                                                                                                          13 апреля 2020, 22:48
                                                                                                                                                                          Здравствуйте. Не решили свою проблему? Мне тоже самую ошибку выдают. И ещё вопрос, «Прописал почту и необходимые данные в настройках» куда мне всё это прописывать, в этих формах не силён...))
                                                                                                                                                                          1. Александр Александрович
                                                                                                                                                                            13 апреля 2020, 23:11
                                                                                                                                                                            В папке process файл называется process.php. В самом начале увидите 1 ЭТАП — НАСТРОЙКА ПЕРЕМЕННЫХ.
                                                                                                                                                                            Попробуйте для начала отправлять почту pop
                                                                                                                                                                            В этой строчке
                                                                                                                                                                            IS_SENDING_MAIL_VIA_SMTP = true, // выполнять отправку писем через SMTP
                                                                                                                                                                            Вместо true напишите false
                                                                                                                                                                            И замените везде адрес почты куда отправлять и от какого имени. Письма скорее всего будут попадать в спам, но форма должна заработать
                                                                                                                                                                            1. gularon
                                                                                                                                                                              13 апреля 2020, 23:27
                                                                                                                                                                              Да ладно)) Заработало, глазам своим не верю. Спасибо большое!
                                                                                                                                                                          2. Александр Мальцев
                                                                                                                                                                            21 февраля 2020, 14:15
                                                                                                                                                                            Если возникает такая ошибка, то значит, что файл «process.php» отрабатывает отлично, т.к. данные отправляются и в файле «log.txt» расположенном в log ошибок нет.
                                                                                                                                                                            Но данный файл должен возвращать данные в формате JSON. Для этого он должен быть сохранён кодировке UTF-8 без BOM, в нем должны отсутствовать вывод всяких отладок, например таких:
                                                                                                                                                                            ini_set('error_reporting', E_ALL);
                                                                                                                                                                            ini_set('display_errors', 1);
                                                                                                                                                                            ini_set('display_startup_errors', 1);
                                                                                                                                                                            
                                                                                                                                                                            Проверить это можно на вкладке Network в инструментах разработчика, для этого выберите файл «process.php» и посмотрите в каком формате он возвращает данные и их сами.
                                                                                                                                                                            Если здесь всё ОК. То тогда нужно смотреть клиент (файл «process-forms.js»). Может вы как-то изменяли разметку и сейчас он просто не находит нужные элементы, и не может показать это сообщение.
                                                                                                                                                                            1. Ахмет Шабакаев
                                                                                                                                                                              21 февраля 2020, 11:06
                                                                                                                                                                              Здравствуйте. Подскажите, пожалуйста, по настройкам — куда прописали почту и необходимые настройки на beget.tech?
                                                                                                                                                                              1. Kasper
                                                                                                                                                                                21 февраля 2020, 11:16
                                                                                                                                                                                Так я на хостинге ничего не прописывал. Он исключительно для теста. Я прописал все настройки почты в файле process.php
                                                                                                                                                                                1. Ахмет Шабакаев
                                                                                                                                                                                  21 февраля 2020, 12:48
                                                                                                                                                                                  А можете продемонстрировать, я несколько дней пытаюсь сделать отправку на почту сообщения, у меня в консоли нет ошибок, но выходит Result — error, я сам файл я редактировал и сохранял как надо.
                                                                                                                                                                                  1. Kasper
                                                                                                                                                                                    21 февраля 2020, 12:59
                                                                                                                                                                                    укажите в process.php после блока"// обработка данных, посланных только методом POST (при остальных методах завершаем выполнение скрипта)" такую вещь:

                                                                                                                                                                                    ini_set('error_reporting', E_ALL);
                                                                                                                                                                                    ini_set('display_errors', 1);
                                                                                                                                                                                    ini_set('display_startup_errors', 1);

                                                                                                                                                                                    ТОгда в файле log информация будет более полная (обратите внимание на этот файл в соответ-ей папке).

                                                                                                                                                                                    А так, в настройках process.php (раздел 1 ЭТАП) у меня вот важные моменты:

                                                                                                                                                                                    MAIL_FROM = 'МОЙ_АДРЕС_ПОЧТЫ@yandex.ru', // от какого email будет отправляться письмо
                                                                                                                                                                                    MAIL_FROM_NAME = 'МОЙ_ДОМЕН… а вообще все равно что здесь будет', // от какого имени будет отправляться письмо
                                                                                                                                                                                    MAIL_ADDRESS = 'МОЙ_АДРЕС_ПОЧТЫ@yandex.ru', // кому необходимо отправить письмо
                                                                                                                                                                                    IS_SENDING_MAIL_VIA_SMTP = true, // выполнять отправку писем через SMTP
                                                                                                                                                                                    MAIL_SMTP_HOST = 'ssl://smtp.yandex.ru', // SMTP-хост
                                                                                                                                                                                    MAIL_SMTP_PORT = '465', // SMTP-порт
                                                                                                                                                                                    MAIL_SMTP_USERNAME = 'МОЙ_АДРЕС_ПОЧТЫ@yandex.ru', // SMTP-пользователь
                                                                                                                                                                                    MAIL_SMTP_PASSWORD = 'МОЙ_ПАРОЛЬ'; // SMTP-пароль

                                                                                                                                                                                    — это настройки для этапа тестирования. Они работают. Но я не уверен, что у вас проблема в них. Но может быть и в них

                                                                                                                                                                                    При данных настройках информация, которую я ввожу в своей форме обратной связи, приходит на 'МОЙ_АДРЕС_ПОЧТЫ@yandex.ru'.

                                                                                                                                                                                    И еще, тест делайте с сервера, где есть php не ниже версии какой-то (см. выше автора), не с локального компа.
                                                                                                                                                                                    1. Ахмет Шабакаев
                                                                                                                                                                                      21 февраля 2020, 13:56
                                                                                                                                                                                      А у вас какая версия формы? У меня 1.0, там 2 файла process.php и process_settings, настроек как вы указываете там нет.
                                                                                                                                                                                      Я пробовал использовать версию 2.0.1 с полем телефон, но она на этапе просто верстки вся расползается и я хз что с ней делать…
                                                                                                                                                                                      <img
                                                                                                                                                                                      src=«https://itchief.ru/assets/uploadify/d/0/d/d0dd0c50d099d2d228edf1c99b0ffd82s.jpg» class=«fancybox thumbnail center»>
                                                                                                                                                                                      1. Kasper
                                                                                                                                                                                        21 февраля 2020, 14:07
                                                                                                                                                                                        получается я брал за основу 2-ю версию, но у меня свой дизайн формы, я использовал базу Александра, подключил её к своим полям обратной связи
                                                                                                                                                                                        1-ю версию даже не смотрел, мне нужны более широкие возможности были.
                                                                                                                                                                                        1. Ахмет Шабакаев
                                                                                                                                                                                          21 февраля 2020, 14:19
                                                                                                                                                                                          Меня устраивает дизайн Александра, мне нужна как можно более простая форма, имя и телефон, в 2.0.1 все классно, но не могу настроить. буду «курить» дальше.
                                                                                                                                                                              2. Kasper
                                                                                                                                                                                12 февраля 2020, 23:40
                                                                                                                                                                                Попробовал на другом хостинге. Все аналогично. Хм… ума не приложу в чем дело.
                                                                                                                                                                                1. Александр Мальцев
                                                                                                                                                                                  13 февраля 2020, 06:43
                                                                                                                                                                                  Здравствуйте! Чтобы в этом разобраться необходимо проверить какой ответ приходит от сервера. Посмотрите его в браузере на вкладке Network в инструментах разработчика (process.php). Также можно проверить логи сервера и логи этого компонента (они находятся в папке logs).
                                                                                                                                                                                  1. Kasper
                                                                                                                                                                                    13 февраля 2020, 10:06
                                                                                                                                                                                    Доброе утро. В папочке logs пишет только об успешной отправке. А вот что пишет в Network:
                                                                                                                                                                                    «Warning: session_start(): Cannot send session cookie — headers already sent by (output started at /home/o/o96197q9/o96197q9.DOMEN.tech/public_html/feedback/process/process.php:1) in /home/o/o96197q9/o96197q9.DOMEN.tech/public_html/feedback/process/process.php on line 71 Warning: session_start(): Cannot send session cache limiter — headers already sent (output started at /home/o/o96197q9/o96197q9.DOMEN.tech/public_html/feedback/process/process.php:1) in /home/o/o96197q9/o96197q9.DOMEN.tech/public_html/feedback/process/process.php on line 71 {»result":«success»}"

                                                                                                                                                                                    Но на 71 строке ничего особенного нет к чему придраться («session_start();»):

                                                                                                                                                                                    /* 3 ЭТАП — ОТКРЫТИЕ СЕССИИ И ИНИЦИАЛИЗАЦИЯ ПЕРЕМЕННОЙ ДЛЯ ХРАНЕНИЯ РЕЗУЛЬТАТОВ ОБРАБОТКИ ФОРМЫ */

                                                                                                                                                                                    session_start();
                                                                                                                                                                                    $data['result'] = 'success';

                                                                                                                                                                                    /* 4 ЭТАП — ВАЛИДАЦИЯ ДАННЫХ (ЗНАЧЕНИЙ ПОЛЕЙ ФОРМЫ) */

                                                                                                                                                                                    Вам это ни о чем не говорит?
                                                                                                                                                                                    1. Kasper
                                                                                                                                                                                      13 февраля 2020, 10:18
                                                                                                                                                                                      Короче, ребята… у кого будет подобная ошибка:

                                                                                                                                                                                      "«Warning: session_start(): Cannot send session cookie — headers already sent by (output started at /home/o/o96197q9/o96197q9.DOMEN.tech/public_html/feedback/process/process.php:1) in /home/o/o96197q9/o96197q9.DOMEN.tech/public_html/feedback/process/process.php on line 71 Warning: session_start(): Cannot send session cache limiter — headers already sent (output started at /home/o/o96197q9/o96197q9.DOMEN.tech/public_html/feedback/process/process.php:1) in /home/o/o96197q9/o96197q9.DOMEN.tech/public_html/feedback/process/process.php on line 71 {»result":«success»}""

                                                                                                                                                                                      При этом форма отправляется, но пишет «Исправьте данные и отправьте форму ещё раз.»

                                                                                                                                                                                      КОПНИТЕ В СТОРОНУ файла «process.php».

                                                                                                                                                                                      У меня причина была в том, что файл сохранён в верной кодировке UTF-8, но с BOM (Byte Order Mask).

                                                                                                                                                                                      КОГДА ПРАВИТЕ файл «process.php», ОБЯЗАТЕЛЬНО сохраняйте его в кодировке UTF-8 без BOM (в редакторе NotePad++ это называется просто UTF-8).

                                                                                                                                                                                      Александр, спасибо за поддержку. Сейчас буду форму прикручивать к сайту.
                                                                                                                                                                                      1. Александр Мальцев
                                                                                                                                                                                        14 февраля 2020, 14:22
                                                                                                                                                                                        Отлично!
                                                                                                                                                                              3. Артур
                                                                                                                                                                                07 февраля 2020, 18:53
                                                                                                                                                                                Добрый день, отличная форма.
                                                                                                                                                                                Подскажите пожалуйста как сделать что бы поле сообщение можно было оставить пустым.
                                                                                                                                                                                Редактирование и удаление php валидации результатов не дает, редактирование Index.html тоже не дает.
                                                                                                                                                                                Единственное что получается это сократить минимальный размер сообщения до 1, но чтобы его можно было оставить пустым не выходит.
                                                                                                                                                                                1. Александр Мальцев
                                                                                                                                                                                  08 февраля 2020, 15:05
                                                                                                                                                                                  Привет! Спасибо!
                                                                                                                                                                                  В HTML у элемента убрать атрибут required, в process.php изменить обработку этого поля.
                                                                                                                                                                                  Т.е. оставить только это:
                                                                                                                                                                                  // проверка поля name 
                                                                                                                                                                                  if (isset($_POST['name'])) {
                                                                                                                                                                                    $name = filter_var($_POST['name'], FILTER_SANITIZE_STRING);
                                                                                                                                                                                  }
                                                                                                                                                                                  
                                                                                                                                                                                2. Александр
                                                                                                                                                                                  28 января 2020, 13:29
                                                                                                                                                                                  Здравствуйте, Александр. Очень давно искал такую форму. Но пока не справился с ней ))). Я сам от программирования далеко… Общался с тех. поддержкой хостинга. Коротко. Разместил файлы на сервере, выбрал отправку через SMTP. Прописал правильно host, port, пользователя, пароль. Тех поддержка хостинга подтвердила, что я сделал все верно. Но форма не работает (Исправьте данные и отправьте форму ещё раз.) Обратился опять в поддержку. Оказывается использовалась версия PHP 2, в настройках поправили на PHP3. Но и после этого форма не заработала. Последний ответ от поддержки хостинга:

                                                                                                                                                                                  Как можно увидеть в файле лога ошибок, теперь при отправке почты предыдущая ошибка с T_CONST не появляется. Т.е. эту проблему Вы исправили изменением версии PHP.
                                                                                                                                                                                  К сожалению, скрипт не записывает в файл лога error.log новую ошибку. Также ошибки не записываются в файл лога самого скрипта: ~/domains/trial-site.ru/html/feedback/logs/logs.txt
                                                                                                                                                                                  К сожалению, мы не занимаемся веб-разработкой, поэтому затрудняемся сказать, в чём проблема.
                                                                                                                                                                                  Пожалуйста, обратитесь к веб-разработчикам или авторам скрипта для получения дополнительной помощи.


                                                                                                                                                                                  Может вы что-то мне подскажите…
                                                                                                                                                                                  1. Александр Мальцев
                                                                                                                                                                                    28 января 2020, 13:38
                                                                                                                                                                                    Здравствуйте! Версия PHP необходима не ниже 5.6. Посмотрите в браузере на вкладке Network в инструментах разработчика какой приходит ответ от сервера (process.php).
                                                                                                                                                                                    1. Александр
                                                                                                                                                                                      28 января 2020, 15:54
                                                                                                                                                                                      Александр. Спасибо за ответ. В браузере на вкладке Network в инструментах разработчика приходил ответ ошибка сервера. Перенесли сайт на сервер с PHP 5.6. Теперь в инструменте ошибок нет. Но вот что написала поддержка:
                                                                                                                                                                                      Мы изменили версию PHP на 5.6, при отправке формы больше нет ошибки сервера в инструментах разработчика, однако теперь в лог ошибок скрипта ( ~/domains/trial-site.ru/html/feedback/logs/logs.txt ) пишется ошибка соединения с SMTP сервером.
                                                                                                                                                                                      В файле настроек ~/domains/trial-site.ru/html/feedback/process/process.php настройки подключения к почтовому серверу указаны 100% корректно.
                                                                                                                                                                                      Пожалуйста, обратитесь за дальнейшей помощью к разработчику скрипта.


                                                                                                                                                                                      1. Александр Мальцев
                                                                                                                                                                                        28 января 2020, 16:16
                                                                                                                                                                                        Необходимо проверить предоставляется ли на хостинге доступ к php-функции mail. Если да, то в этом случае нужно включать SMTP отладку и смотреть что возвращает почтовый сервер:
                                                                                                                                                                                        $mail->SMTPDebug = 4;
                                                                                                                                                                                        
                                                                                                                                                                                        1. Александр
                                                                                                                                                                                          29 января 2020, 11:25
                                                                                                                                                                                          Александр. Форма на сайте заработала, но… Опять же цитирую техническую поддержку и прошу ее прокомментировать. Спасибо заранее.
                                                                                                                                                                                          Здравствуйте.

                                                                                                                                                                                          Выполнили дополнительное тестирование Вашего скрипта. Теперь получили от нашего почтового сервера уведомление, что сообщение было успешно доставлено. Пожалуйста, проверьте почтовый ящик на yandex, на который у Вас стоит перенаправление.

                                                                                                                                                                                          Дополнительно обращаем Ваше внимание, что при отправке отображается уведомление
                                                                                                                                                                                          «Исправьте данные и отправьте форму ещё раз. „
                                                                                                                                                                                          и в ответе в инструментах разработчика сохранилась ошибка
                                                                                                                                                                                          SyntaxError: JSON.parse: unexpected non-whitespace character after JSON data at line 1 column 5 of the JSON data

                                                                                                                                                                                          Пожалуйста, проверьте работу формы (убедитесь, что почта приходит на Ваш ящик), и обратитесь к разработчику скрипта за комментариями, как исправить ошибку с парсингом JSON, которая, вероятно, вызывает уведомление о необходимости исправления данных.

                                                                                                                                                                                          1. Александр Мальцев
                                                                                                                                                                                            29 января 2020, 16:10
                                                                                                                                                                                            Добрый день!
                                                                                                                                                                                            После того как вы всё отладили удалите строчку:
                                                                                                                                                                                            $mail->SMTPDebug = 4;
                                                                                                                                                                                            
                                                                                                                                                                                  2. piu
                                                                                                                                                                                    20 января 2020, 18:37
                                                                                                                                                                                    Добрый день, Александр, спасибо большое вам за такое легкое и грамотное решение из коробки, прям не нарадуюсь)) все работает, но осталось пара вопросов один из которых я сам решу, а второй что-то не получается… Нужна возможность подгружать большие файлы разных разрешений потому были правки кода:

                                                                                                                                                                                    ___main.js
                                                                                                                                                                                    $(function () {
                                                                                                                                                                                    	var form1 = new ProcessForm({
                                                                                                                                                                                    		validFileExtensions:['jpg', 'jpeg', 'bmp', 'gif', 'png', 'ai', 'pdf', 'indl', 'cdr', 'eps', 'doc', 'docx', 'ppt', 'txt', 'rar', 'zip', 'tiff', 'tif', 'psd'],
                                                                                                                                                                                    		maxSizeFile: 2500,
                                                                                                                                                                                    });
                                                                                                                                                                                    	form1.init();
                                                                                                                                                                                    });
                                                                                                                                                                                    
                                                                                                                                                                                    ___process-form.js
                                                                                                                                                                                    maxSizeFile: 2500, // максмальный размер файла в мегабайтах
                                                                                                                                                                                    validFileExtensions: ['jpg', 'jpeg', 'bmp', 'gif', 'png', 'ai', 'pdf', 'indl', 'cdr', 'eps', 'doc', 'docx', 'ppt', 'txt', 'rar', 'zip', 'tiff', 'tif', 'psd'],
                                                                                                                                                                                    
                                                                                                                                                                                    и____process.php
                                                                                                                                                                                    MAX_FILE_SIZE = 2500000000, // максимальный размер файла (в байтах)
                                                                                                                                                                                      ALLOWED_EXTENSIONS = array('jpg', 'jpeg', 'bmp', 'gif', 'png', 'ai', 'pdf', 'indl', 'cdr', 'eps', 'doc', 'docx', 'ppt', 'txt', 'rar', 'zip', 'tiff', 'tif', 'psd'), // разрешённые расширения файлов
                                                                                                                                                                                    
                                                                                                                                                                                    __________________________________________________________________________
                                                                                                                                                                                    Но скрипт все равно возвращает «неверное расширение» и «слишком большой файл»…
                                                                                                                                                                                    Всю голову сломал, что я не так сделал?
                                                                                                                                                                                    1. Александр Мальцев
                                                                                                                                                                                      21 января 2020, 12:37
                                                                                                                                                                                      Здравствуйте!
                                                                                                                                                                                      Это ещё нужно разрешить на стороне сервера, например в ".htaccess".
                                                                                                                                                                                      Пример того, что нужно в него добавить есть в этом комментарии.
                                                                                                                                                                                      1. piu
                                                                                                                                                                                        21 января 2020, 12:44
                                                                                                                                                                                        Спасибо, но с разрешением в .htaccess это понятно…
                                                                                                                                                                                        Не понятно почему он все равно мне возвращает, что расширение не разрешено?
                                                                                                                                                                                        Или я что-то не правильно разрешил?
                                                                                                                                                                                        1. Александр Мальцев
                                                                                                                                                                                          21 января 2020, 13:44
                                                                                                                                                                                          Почти правильно.
                                                                                                                                                                                          Это достаточно установить в 2 местах:
                                                                                                                                                                                          — в process.php
                                                                                                                                                                                          — в любом месте после подключения файла process-forms.js:
                                                                                                                                                                                          var form1 = new ProcessForm({
                                                                                                                                                                                            attachmentsMaxFileSize: 102400,
                                                                                                                                                                                            attachmentsFileExt: ['jpg', 'jpeg', 'bmp', 'gif', 'png', 'ai', 'pdf', 'indl', 'cdr', 'eps', 'doc', 'docx', 'ppt', 'txt', 'rar', 'zip', 'tiff', 'tif', 'psd']
                                                                                                                                                                                          });
                                                                                                                                                                                          form1.init();
                                                                                                                                                                                          
                                                                                                                                                                                          Если версия формы новая, то там название полей называются немного по-другому. А ошибки возникают при проверке на клиенте или после отправки формы на сервер?
                                                                                                                                                                                    2. Александр
                                                                                                                                                                                      15 января 2020, 08:50
                                                                                                                                                                                      Александр, день добрый.
                                                                                                                                                                                      У PHPMailer есть режим отладки SMTP соединения.
                                                                                                                                                                                      Например устанавливаем
                                                                                                                                                                                      $mail->SMTPDebug = 4
                                                                                                                                                                                      и получаем дам попытки соединения и отправки.
                                                                                                                                                                                      Подскажите, а существует-ли какая-то возможность направить вывод отладочного дампа в переменную, а не зразу «на экран»?
                                                                                                                                                                                      1. Александр
                                                                                                                                                                                        15 января 2020, 11:25
                                                                                                                                                                                        Вопрос снят, решил небольшой правкой класса SMTP.
                                                                                                                                                                                      2. Сергей Горин
                                                                                                                                                                                        10 января 2020, 10:11
                                                                                                                                                                                        Приветствую, Александр!
                                                                                                                                                                                        Огромное спасибо за Вашу работу, Вы всегда даёте нам очень ценную информацию!
                                                                                                                                                                                        По данной форме обратной связи есть такой вопрос: можно ли реализовать возможность удаления прикрепленных файлов с помощью дополнительной кнопочки типа ✖ или чего-то в этом роде? Например, я передумал отправлять один или несколько уже прикрепленных файлов. На моём скриншоте показан пример, с помощью CSS это оформить легко, но в JS я, к сожалению, не силён. Покажите, пожалуйста, как это реализовать в Вашей форме.
                                                                                                                                                                                        Заранее спасибо!
                                                                                                                                                                                        1. Александр Мальцев
                                                                                                                                                                                          11 января 2020, 09:50
                                                                                                                                                                                          Привет! Спасибо за добрые слова.
                                                                                                                                                                                          Отличное дополнение для формы, эту возможность уже добавил. Скачать форму с этими обновлениями можно с GitHub.
                                                                                                                                                                                        2. Александр
                                                                                                                                                                                          03 января 2020, 04:35
                                                                                                                                                                                          Александр, приветствую.
                                                                                                                                                                                          Если отправлять форму phpMail на ящики yandex.ru или mail.ru то:
                                                                                                                                                                                          1. Яндекс не пропускает, если $mail->IsHTML(true); (185 строка файла process.php)
                                                                                                                                                                                          2. Мэйл в принципе отбивает с сообщением «550 Sorry, we do not accept mail from hosts with dynamic IP or generic DNS PTR-records. Please get a custom reverse DNS name from your ISP for your host 00.00.00.000 or contact abuse@corp.mail.ru in case of error» (ip хоста изменен).

                                                                                                                                                                                          Яндекс пропускает письмо, если $mail->IsHTML(false);

                                                                                                                                                                                          Соответственно вопросы:
                                                                                                                                                                                          1. Можно-ли как-то на отправлять письмо с $mail->IsHTML(true) яндексу, чтобы он его пропустил.
                                                                                                                                                                                          2. Можно-ли как-то «обмануть» Мэйл?
                                                                                                                                                                                          1. Александр
                                                                                                                                                                                            03 января 2020, 04:54
                                                                                                                                                                                            под phpMail я имел в виду отправку функцией php mail() (не пропуская письмо через ящик на почтовом сервере)
                                                                                                                                                                                            1. Александр Мальцев
                                                                                                                                                                                              03 января 2020, 07:15
                                                                                                                                                                                              Привет!
                                                                                                                                                                                              Если так нужно, то тогда только экспериментировать.
                                                                                                                                                                                              Я не использую такие сценарии. Обычно использую сервис «Почта для домена», который, например предлагает Яндекс или использую возможности хостинга, если он имеет возможность подписывать письма с помощью DKIM-подписи. Отправку писем всегда выполняю через протокол SMTP.
                                                                                                                                                                                          2. Vit
                                                                                                                                                                                            24 декабря 2019, 20:38
                                                                                                                                                                                            Здравствуйте, Александр, с наступающим!
                                                                                                                                                                                            Установил новую Вашу форму
                                                                                                                                                                                            github.com/itchief/feedback-form/archive/v.2.0.2.zip
                                                                                                                                                                                            настройку делал для SMTP (аналогично с
                                                                                                                                                                                            itchief.ru/php/feedback-form-for-website#comment-7318
                                                                                                                                                                                            при этом файлы загружаемые благополучно загружаются (правда их имена в виде крякозябров), но само письмо форма НЕ отсылает. Все поля зеленые (т.е. форма отработала нормально) – только появляется в конце ошибка — Исправьте данные и отправьте форму ещё раз.
                                                                                                                                                                                            В логах единственное, что нашел:
                                                                                                                                                                                            FastCGI sent in stderr: "PHP message: PHP Notice:  Undefined variable: startPath in /feedback/process/process.php on line 174" while reading response header from upstream, client:, server: site.ru, request: "POST /feedback/process/process.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/php-fpm/user.sock:", host: "site.ru", referrer: https://site.ru/feedback/
                                                                                                                                                                                            в строчке 174 файла process.php:
                                                                                                                                                                                            $listFiles .= '<li><a href="' . $startPath . $fileHref . '">' . $fileName . '</a></li>';
                                                                                                                                                                                            1. Александр Мальцев
                                                                                                                                                                                              27 декабря 2019, 15:11
                                                                                                                                                                                              Это не ошибка, а предупреждение.
                                                                                                                                                                                              Попробуйте закомментировать следующее и отправить форму ещё раз:
                                                                                                                                                                                              // отправляем письмо
                                                                                                                                                                                              //if (!$mail->send()) {
                                                                                                                                                                                              //  $data['result'] = 'error';
                                                                                                                                                                                              //}
                                                                                                                                                                                              
                                                                                                                                                                                              Если в браузере теперь появится сообщение об успешной отправке, значит какая-то ошибка возникает при отправке. В этом случае нужно включать режим отладки при отправке и смотреть почему это происходит.
                                                                                                                                                                                              1. Vit
                                                                                                                                                                                                29 декабря 2019, 13:17
                                                                                                                                                                                                При просмотре в режиме отладки появляется ошибка
                                                                                                                                                                                                SMTP Error: Could not authenticate.
                                                                                                                                                                                                CLIENT -> SERVER: QUIT
                                                                                                                                                                                                SMTP INBOUND: "221 2.0.0 Bye"
                                                                                                                                                                                                SERVER -> CLIENT: 221 2.0.0 Bye
                                                                                                                                                                                                Connection: closed
                                                                                                                                                                                                
                                                                                                                                                                                                Эта ошибка похожа на ту, о которой уже сообщалось в комментариях ниже
                                                                                                                                                                                                но решение для моей ошибки не подошло.

                                                                                                                                                                                                1. Александр Мальцев
                                                                                                                                                                                                  29 декабря 2019, 13:36
                                                                                                                                                                                                  У вас другая ошибка. Вам нужно проверить имя пользователя, пароль, SMTP порт и SMTP хост.
                                                                                                                                                                                                  1. Vit
                                                                                                                                                                                                    29 декабря 2019, 15:20
                                                                                                                                                                                                    данные параметры скопировал из дефолтных настроек обратной формы сайта:
                                                                                                                                                                                                      $mail->Host = 'ssl://site.com';
                                                                                                                                                                                                      $mail->Port = 465;
                                                                                                                                                                                                      $mail->Username = 'email@site.com';
                                                                                                                                                                                                      $mail->Password = 'pass';
                                                                                                                                                                                                    тут ошибку трудно совершить.
                                                                                                                                                                                                    Причем дефолтная обратная связь сайта (на старой jQuery v2.1.1) с данными настройками работает (в ней единственное еще отличие таймаут указывается 5), а новая — не хочет.
                                                                                                                                                                                                    1. Александр Мальцев
                                                                                                                                                                                                      29 декабря 2019, 16:17
                                                                                                                                                                                                      Тогда включайте отладку и смотрите что возвращает сервер:
                                                                                                                                                                                                      $mail->SMTPDebug = 3;
                                                                                                                                                                                                      
                                                                                                                                                                                                      1. Vit
                                                                                                                                                                                                        29 декабря 2019, 16:46
                                                                                                                                                                                                        Connection: opening to ssl://smtp.site.com:465, timeout=300, options=array()
                                                                                                                                                                                                        Connection: opened
                                                                                                                                                                                                        SMTP INBOUND: "220 smtp.site.com ESMTP Postfix"
                                                                                                                                                                                                        SERVER -> CLIENT: 220 smtp.site.com ESMTP Postfix
                                                                                                                                                                                                        CLIENT -> SERVER: EHLO site.com
                                                                                                                                                                                                        SMTP INBOUND: "250-smtp.site.com"
                                                                                                                                                                                                        SMTP INBOUND: "250-PIPELINING"
                                                                                                                                                                                                        SMTP INBOUND: "250-SIZE 20000000"
                                                                                                                                                                                                        SMTP INBOUND: "250-ENHANCEDSTATUSCODES"
                                                                                                                                                                                                        SMTP INBOUND: "250-8BITMIME"
                                                                                                                                                                                                        SMTP INBOUND: "250 DSN"
                                                                                                                                                                                                        SERVER -> CLIENT: 250-smtp.site.com250-PIPELINING250-SIZE 20000000250-ENHANCEDSTATUSCODES250-8BITMIME250 DSN
                                                                                                                                                                                                        SMTP Error: Could not authenticate.
                                                                                                                                                                                                        CLIENT -> SERVER: QUIT
                                                                                                                                                                                                        SMTP INBOUND: "221 2.0.0 Bye"
                                                                                                                                                                                                        SERVER -> CLIENT: 221 2.0.0 Bye
                                                                                                                                                                                                        Connection: closed
                                                                                                                                                                                                        SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
                                                                                                                                                                                                        {"result":"error","log":["SMTP connect() failed. https:\/\/github.com\/PHPMailer\/PHPMailer\/wiki\/Troubleshooting"]}
                                                                                                                                                                                                        
                                                                                                                                                                                            2. Василий
                                                                                                                                                                                              11 декабря 2019, 18:03
                                                                                                                                                                                              Здравствуйте уважаемый, Александр Мальцев
                                                                                                                                                                                              Замечательное решение и в тоже время не могу понять по какой причине в рандомном количестве приходят письма из формы! То 2 то 3 то 5 но чаще всего их падает по пять!
                                                                                                                                                                                              В чем может быть причина? подскажите пожалуйста.

                                                                                                                                                                                              с уважением
                                                                                                                                                                                              1. Александр Мальцев
                                                                                                                                                                                                12 декабря 2019, 15:15
                                                                                                                                                                                                Добрый день! При отправке письма у вас должен вызываться один раз php скрипт, указанный в JavaScript. Чтобы это проверить, откройте инструменты разработчика в браузере, перейдите на вкладку Network, установите фильтр на XHR и посмотрите сколько раз у вас вызывается php скрипт при отправке формы. Если несколько раз, то смотрите как вы настроили JavaScript, что-то у вас реализовано не так, как нужно.
                                                                                                                                                                                              2. Тимофей
                                                                                                                                                                                                05 декабря 2019, 22:11
                                                                                                                                                                                                Здравствуйте, не совсем понял почему при открытие формы высвечивается текст что все отправлено когда форма даже не заполнялась, так сразу из архива. Что то я не увидел-прочел?
                                                                                                                                                                                                1. Александр Мальцев
                                                                                                                                                                                                  06 декабря 2019, 13:28
                                                                                                                                                                                                  Добрый день! Проверьте подключение CSS И JavaScript файлов к странице.
                                                                                                                                                                                                  1. Тимофей
                                                                                                                                                                                                    06 декабря 2019, 13:35
                                                                                                                                                                                                    Как именно это сделать? Я не добавлял пока на сайт, решил так проверить, посмотреть. Закинул в Денвер, открыл index.html, и получается шаблон формы а поверх них, данные отправлены успешно нажмите ссылку…
                                                                                                                                                                                                    1. Александр Мальцев
                                                                                                                                                                                                      06 декабря 2019, 14:43
                                                                                                                                                                                                      Проверьте, вы должны поместить папку feedback из архива в корень сайта.
                                                                                                                                                                                                      После этого в браузере открыть страницу (вместо localhost указать свой хост):
                                                                                                                                                                                                      http://localhost/feedback/
                                                                                                                                                                                                2. AV
                                                                                                                                                                                                  04 декабря 2019, 00:14
                                                                                                                                                                                                  Александр доброй ночи! Отличная форма! 2 вопроса:
                                                                                                                                                                                                  1. как сделать так, чтобы в начальном состоянии флажок согласия на обработку персональных данных уже стоял и кнопка для отправки была активна?
                                                                                                                                                                                                  2. после отправки формы и нажатия на ссылку для повторной отправки, кнопка «отправить сообщение» находится в активном состоянии, а флажок при этом не стоит — как-то не логично. Как сделать так чтобы галочка тоже стояла?
                                                                                                                                                                                                  1. Александр Мальцев
                                                                                                                                                                                                    05 декабря 2019, 14:06
                                                                                                                                                                                                    Привет! Спасибо!
                                                                                                                                                                                                    Форму можно настроить так как нужно в конкретном случае.
                                                                                                                                                                                                    Эти задачи решаются простым редактированием HTML кода формы.
                                                                                                                                                                                                    Чтобы флажок согласия на обработку был активен по умолчанию к нему нужно добавить атрибут checked:
                                                                                                                                                                                                    <input type="checkbox" name="agree" class="custom-control-input" id="customCheck" checked>
                                                                                                                                                                                                    
                                                                                                                                                                                                    Чтобы кнопка была активна у неё нужно удалить атрибут disabled:
                                                                                                                                                                                                    <button type="submit" class="btn btn-primary position-relative">Отправить сообщение</button>
                                                                                                                                                                                                    
                                                                                                                                                                                                    1. AV
                                                                                                                                                                                                      06 декабря 2019, 11:12
                                                                                                                                                                                                      Отлично, спасибо большое!
                                                                                                                                                                                                  2. Accer de Cuba
                                                                                                                                                                                                    18 ноября 2019, 13:45
                                                                                                                                                                                                    Добрый день, Александр!
                                                                                                                                                                                                    «Исправьте данные и отправьте форму ещё раз» уже замучило. Все поля в зеленой рамке. В консоле XHR process.php Response: {«result»:«error»}
                                                                                                                                                                                                    ini_set('error_reporting', E_ALL); ini_set('display_errors', 1); ini_set('display_startup_errors', 1); перед header вставил,
                                                                                                                                                                                                    <form id=«feedback-form» action=«feedback/process/process.php» вставил method=«post»…
                                                                                                                                                                                                    Помогите разобраться!
                                                                                                                                                                                                    Спасибо!
                                                                                                                                                                                                    1. Александр Мальцев
                                                                                                                                                                                                      18 ноября 2019, 14:29
                                                                                                                                                                                                      Привет! Если поля зелёные, то значит они проходят проверку на сервере. Тут проблема скорее всего с отправкой email письма.
                                                                                                                                                                                                      $mail->send()
                                                                                                                                                                                                      
                                                                                                                                                                                                      Если вы тестируете форму на сервере, то проверьте поддерживает ли хостинг вообще отправку писем. В основном эта возможность предоставляется только на платных тарифах.
                                                                                                                                                                                                      Если с этим всё хорошо, то проверьте настройки (значения переменных) связанные с почтой.
                                                                                                                                                                                                    2. Алексей
                                                                                                                                                                                                      27 октября 2019, 19:18
                                                                                                                                                                                                      Добрый вечер! Александр, столкнулся со следующей проблемой: на странице форма (1)+ формы обратной связи в мод. окнах(2). Отправляя форму 1 происходит переадресация на страницу «спасибо» В модальном окне почему-то переадресация зависает. Появляется зеленая галочка, пробегает полоса загрузки и все, форма остается. Данные с нее приходят, но на страницу спасибо не перекидывает. Подскажите пожалуйста куда копать?
                                                                                                                                                                                                      1. Александр Мальцев
                                                                                                                                                                                                        28 октября 2019, 14:21
                                                                                                                                                                                                        Привет! А как реализовали? Может где-то что-то упустили.
                                                                                                                                                                                                        1. Алексей
                                                                                                                                                                                                          30 октября 2019, 12:00
                                                                                                                                                                                                          Может что-то с переходом на протокол https связано!? Так-как на других сайтах (на http) такая реализация работала. Может на самом деле просто допустил ошибку.
                                                                                                                                                                                                      2. tanya_slimak
                                                                                                                                                                                                        25 сентября 2019, 14:56
                                                                                                                                                                                                        Добрый день.

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

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

                                                                                                                                                                                                        Имеем следующий скрипт:
                                                                                                                                                                                                        <?php
                                                                                                                                                                                                        if (isset ($_POST['contactFF'])) {
                                                                                                                                                                                                        $to = «auto@avexcom.ru»;
                                                                                                                                                                                                        $from = $_POST['contactFF'];
                                                                                                                                                                                                        $subject = «Заполнена контактная форма с ».$_SERVER['HTTP_REFERER'];
                                                                                                                                                                                                        $message = «Имя: ».$_POST['nameFF']."\nEmail: ".$from."\nIP: ".$_SERVER['REMOTE_ADDR']."\nСообщение: ".$_POST['messageFF'];
                                                                                                                                                                                                        $boundary = md5(date('r', time()));
                                                                                                                                                                                                        $filesize = '';
                                                                                                                                                                                                        $headers = «MIME-Version: 1.0\r\n»;
                                                                                                                                                                                                        $headers .= «From: ». $from. "\r\n";
                                                                                                                                                                                                        $headers .= «Reply-To: ». $from. "\r\n";
                                                                                                                                                                                                        $headers .= «Content-Type: multipart/mixed; boundary=\»$boundary\"\r\n";
                                                                                                                                                                                                        $message="
                                                                                                                                                                                                        Content-Type: multipart/mixed; boundary=\"$boundary\"

                                                                                                                                                                                                        --$boundary
                                                                                                                                                                                                        Content-Type: text/plain; charset=\«utf-8\»
                                                                                                                                                                                                        Content-Transfer-Encoding: 7bit

                                                                                                                                                                                                        $message";
                                                                                                                                                                                                        for($i=0;$i<count($_FILES['fileFF']['name']);$i++) {
                                                                                                                                                                                                        if(is_uploaded_file($_FILES['fileFF']['tmp_name'][$i])) {
                                                                                                                                                                                                        $attachment = chunk_split(base64_encode(file_get_contents($_FILES['fileFF']['tmp_name'][$i])));
                                                                                                                                                                                                        $filename = $_FILES['fileFF']['name'][$i];
                                                                                                                                                                                                        $filetype = $_FILES['fileFF']['type'][$i];
                                                                                                                                                                                                        $filesize += $_FILES['fileFF']['size'][$i];
                                                                                                                                                                                                        $message.="
                                                                                                                                                                                                        --$boundary
                                                                                                                                                                                                        Content-Type: \"$filetype\"; name=\"$filename\"
                                                                                                                                                                                                        Content-Transfer-Encoding: base64
                                                                                                                                                                                                        Content-Disposition: attachment; filename=\"$filename\"
                                                                                                                                                                                                        $attachment";
                                                                                                                                                                                                        }
                                                                                                                                                                                                        }
                                                                                                                                                                                                        $message.="
                                                                                                                                                                                                        --$boundary--";

                                                                                                                                                                                                        mail($to, $subject, $message, $headers);
                                                                                                                                                                                                        $output = '';

                                                                                                                                                                                                        <!DOCTYPE HTML>

                                                                                                                                                                                                        Контактная форма


                                                                                                                                                                                                        <?php echo $output; ?>
                                                                                                                                                                                                        Имя:
                                                                                                                                                                                                        Email:
                                                                                                                                                                                                        Прикрепить файл: Сообщение:









                                                                                                                                                                                                        Вот скрипт для recaptcha:



                                                                                                                                                                                                        этот фрагмент как я поняла надо поставить в самый конец после

                                                                                                                                                                                                        Но совсем не могу понять куда надо вставить этот файл я впервые это делаю.
                                                                                                                                                                                                        $secret=«ххххххххххххххххххххххххххххххххххх»;
                                                                                                                                                                                                        $response = null;
                                                                                                                                                                                                        $reCaptcha = new ReCaptcha($secret);
                                                                                                                                                                                                        if ($_POST[«g-recaptcha-response»]) {
                                                                                                                                                                                                        $response = $reCaptcha->verifyResponse(
                                                                                                                                                                                                        $_SERVER[«REMOTE_ADDR»],
                                                                                                                                                                                                        $_POST[«g-recaptcha-response»]
                                                                                                                                                                                                        );
                                                                                                                                                                                                        }
                                                                                                                                                                                                        if ($response != null && $response->success) {
                                                                                                                                                                                                        // Капча проверена!!!
                                                                                                                                                                                                        } else {
                                                                                                                                                                                                        error(«Не верная капча. Попробуйте ещё раз.»);
                                                                                                                                                                                                        }

                                                                                                                                                                                                        Как я поняла у меня не происходит проверки на наличие ответа ReCaptcha перед отправкой письма, пробовала так:
                                                                                                                                                                                                        <?php
                                                                                                                                                                                                        if (isset ($_POST['contactFF'])) {
                                                                                                                                                                                                        $to = «auto@avexcom.ru»;
                                                                                                                                                                                                        $from = $_POST['contactFF'];
                                                                                                                                                                                                        $subject = «Заполнена контактная форма с ».$_SERVER['HTTP_REFERER'];
                                                                                                                                                                                                        $message = «Имя: ».$_POST['nameFF']."\nEmail: ".$from."\nIP: ".$_SERVER['REMOTE_ADDR']."\nСообщение: ".$_POST['messageFF'];
                                                                                                                                                                                                        $boundary = md5(date('r', time()));
                                                                                                                                                                                                        $filesize = '';
                                                                                                                                                                                                        $headers = «MIME-Version: 1.0\r\n»;
                                                                                                                                                                                                        $headers .= «From: ». $from. "\r\n";
                                                                                                                                                                                                        $headers .= «Reply-To: ». $from. "\r\n";
                                                                                                                                                                                                        $headers .= «Content-Type: multipart/mixed; boundary=\»$boundary\"\r\n";
                                                                                                                                                                                                        $message="
                                                                                                                                                                                                        Content-Type: multipart/mixed; boundary=\"$boundary\"

                                                                                                                                                                                                        --$boundary
                                                                                                                                                                                                        Content-Type: text/plain; charset=\«utf-8\»
                                                                                                                                                                                                        Content-Transfer-Encoding: 7bit

                                                                                                                                                                                                        $message";
                                                                                                                                                                                                        for($i=0;$i<count($_FILES['fileFF']['name']);$i++) {
                                                                                                                                                                                                        if(is_uploaded_file($_FILES['fileFF']['tmp_name'][$i])) {
                                                                                                                                                                                                        $attachment = chunk_split(base64_encode(file_get_contents($_FILES['fileFF']['tmp_name'][$i])));
                                                                                                                                                                                                        $filename = $_FILES['fileFF']['name'][$i];
                                                                                                                                                                                                        $filetype = $_FILES['fileFF']['type'][$i];
                                                                                                                                                                                                        $filesize += $_FILES['fileFF']['size'][$i];
                                                                                                                                                                                                        $secret=«ххххххххххххххххххххххххххх»;
                                                                                                                                                                                                        $response = null;
                                                                                                                                                                                                        $reCaptcha = new ReCaptcha($secret);

                                                                                                                                                                                                        $message.="
                                                                                                                                                                                                        --$boundary
                                                                                                                                                                                                        Content-Type: \"$filetype\"; name=\"$filename\"
                                                                                                                                                                                                        Content-Transfer-Encoding: base64
                                                                                                                                                                                                        Content-Disposition: attachment; filename=\"$filename\"
                                                                                                                                                                                                        $attachment";
                                                                                                                                                                                                        }
                                                                                                                                                                                                        }
                                                                                                                                                                                                        $message.="
                                                                                                                                                                                                        --$boundary--";

                                                                                                                                                                                                        mail($to, $subject, $message, $headers);
                                                                                                                                                                                                        $output = '';
                                                                                                                                                                                                        if ($_POST[«g-recaptcha-response»]) {
                                                                                                                                                                                                        $response = $reCaptcha->verifyResponse(
                                                                                                                                                                                                        $_SERVER[«REMOTE_ADDR»],
                                                                                                                                                                                                        $_POST[«g-recaptcha-response»]
                                                                                                                                                                                                        );
                                                                                                                                                                                                        }
                                                                                                                                                                                                        if ($response != null && $response->success) {
                                                                                                                                                                                                        // Капча проверена!!!
                                                                                                                                                                                                        } else {
                                                                                                                                                                                                        error(«Не верная капча. Попробуйте ещё раз.»);
                                                                                                                                                                                                        }

                                                                                                                                                                                                        }
                                                                                                                                                                                                        ?>

                                                                                                                                                                                                        <!DOCTYPE HTML>
                                                                                                                                                                                                        … И далее, как в скрипте
                                                                                                                                                                                                        1. Александр Мальцев
                                                                                                                                                                                                          25 сентября 2019, 15:37
                                                                                                                                                                                                          Если код взят не из этой темы, то этот вопрос лучше поместить в раздел Вопросы, т.к. он не имеет прямого отношения к этой теме.
                                                                                                                                                                                                          1. tanya_slimak
                                                                                                                                                                                                            25 сентября 2019, 15:06
                                                                                                                                                                                                            Скрипт скопировался не полный avexcom.ru/raschet-ushcherba-avtomobilya-amts/
                                                                                                                                                                                                          2. tanya_slimak
                                                                                                                                                                                                            25 сентября 2019, 14:43
                                                                                                                                                                                                            Добрый день.

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

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

                                                                                                                                                                                                            Имеем следующий скрипт:
                                                                                                                                                                                                            <?php
                                                                                                                                                                                                            if (isset ($_POST['contactFF'])) {
                                                                                                                                                                                                            $to = «хххх@avexcom.ru»;
                                                                                                                                                                                                            $from = $_POST['contactFF'];
                                                                                                                                                                                                            $subject = «Заполнена контактная форма с ».$_SERVER['HTTP_REFERER'];
                                                                                                                                                                                                            $message = «Имя: ».$_POST['nameFF']."\nEmail: ".$from."\nIP: ".$_SERVER['REMOTE_ADDR']."\nСообщение: ".$_POST['messageFF'];
                                                                                                                                                                                                            $boundary = md5(date('r', time()));
                                                                                                                                                                                                            $filesize = '';
                                                                                                                                                                                                            $headers = «MIME-Version: 1.0\r\n»;
                                                                                                                                                                                                            $headers .= «From: ». $from. "\r\n";
                                                                                                                                                                                                            $headers .= «Reply-To: ». $from. "\r\n";
                                                                                                                                                                                                            $headers .= «Content-Type: multipart/mixed; boundary=\»$boundary\"\r\n";
                                                                                                                                                                                                            $message="
                                                                                                                                                                                                            Content-Type: multipart/mixed; boundary=\"$boundary\"

                                                                                                                                                                                                            --$boundary
                                                                                                                                                                                                            Content-Type: text/plain; charset=\«utf-8\»
                                                                                                                                                                                                            Content-Transfer-Encoding: 7bit

                                                                                                                                                                                                            $message";
                                                                                                                                                                                                            for($i=0;$i<count($_FILES['fileFF']['name']);$i++) {
                                                                                                                                                                                                            if(is_uploaded_file($_FILES['fileFF']['tmp_name'][$i])) {
                                                                                                                                                                                                            $attachment = chunk_split(base64_encode(file_get_contents($_FILES['fileFF']['tmp_name'][$i])));
                                                                                                                                                                                                            $filename = $_FILES['fileFF']['name'][$i];
                                                                                                                                                                                                            $filetype = $_FILES['fileFF']['type'][$i];
                                                                                                                                                                                                            $filesize += $_FILES['fileFF']['size'][$i];
                                                                                                                                                                                                            $message.="
                                                                                                                                                                                                            --$boundary
                                                                                                                                                                                                            Content-Type: \"$filetype\"; name=\"$filename\"
                                                                                                                                                                                                            Content-Transfer-Encoding: base64
                                                                                                                                                                                                            Content-Disposition: attachment; filename=\"$filename\"
                                                                                                                                                                                                            $attachment";
                                                                                                                                                                                                            }
                                                                                                                                                                                                            }
                                                                                                                                                                                                            $message.="
                                                                                                                                                                                                            --$boundary--";

                                                                                                                                                                                                            mail($to, $subject, $message, $headers);
                                                                                                                                                                                                            $output = '';

                                                                                                                                                                                                            }
                                                                                                                                                                                                            ?>

                                                                                                                                                                                                            <!DOCTYPE HTML>

                                                                                                                                                                                                            Контактная форма


                                                                                                                                                                                                            <?php echo $output; ?>
                                                                                                                                                                                                            Имя:
                                                                                                                                                                                                            Email:
                                                                                                                                                                                                            Прикрепить файл: Сообщение:









                                                                                                                                                                                                            Вот скрипт для recaptcha:



                                                                                                                                                                                                            этот фрагмент как я поняла надо поставить в самый конец после



                                                                                                                                                                                                            Но совсем не могу понять куда надо вставить этот файл я впервые это делаю.
                                                                                                                                                                                                            $secret=«хххххххххххххххххххххххх»;
                                                                                                                                                                                                            $response = null;
                                                                                                                                                                                                            $reCaptcha = new ReCaptcha($secret);

                                                                                                                                                                                                            if ($_POST[«g-recaptcha-response»]) {
                                                                                                                                                                                                            $response = $reCaptcha->verifyResponse(
                                                                                                                                                                                                            $_SERVER[«REMOTE_ADDR»],
                                                                                                                                                                                                            $_POST[«g-recaptcha-response»]
                                                                                                                                                                                                            );
                                                                                                                                                                                                            }
                                                                                                                                                                                                            if ($response != null && $response->success) {
                                                                                                                                                                                                            // Капча проверена!!!
                                                                                                                                                                                                            } else {
                                                                                                                                                                                                            error(«Не верная капча. Попробуйте ещё раз.»);
                                                                                                                                                                                                            }

                                                                                                                                                                                                            Как я поняла у меня не происходит проверки на наличие ответа ReCaptcha перед отправкой письма:
                                                                                                                                                                                                            <?php
                                                                                                                                                                                                            if (isset ($_POST['contactFF'])) {
                                                                                                                                                                                                            $to = «хххх@avexcom.ru»;
                                                                                                                                                                                                            $from = $_POST['contactFF'];
                                                                                                                                                                                                            $subject = «Заполнена контактная форма с ».$_SERVER['HTTP_REFERER'];
                                                                                                                                                                                                            $message = «Имя: ».$_POST['nameFF']."\nEmail: ".$from."\nIP: ".$_SERVER['REMOTE_ADDR']."\nСообщение: ".$_POST['messageFF'];
                                                                                                                                                                                                            $boundary = md5(date('r', time()));
                                                                                                                                                                                                            $filesize = '';
                                                                                                                                                                                                            $headers = «MIME-Version: 1.0\r\n»;
                                                                                                                                                                                                            $headers .= «From: ». $from. "\r\n";
                                                                                                                                                                                                            $headers .= «Reply-To: ». $from. "\r\n";
                                                                                                                                                                                                            $headers .= «Content-Type: multipart/mixed; boundary=\»$boundary\"\r\n";
                                                                                                                                                                                                            $message="
                                                                                                                                                                                                            Content-Type: multipart/mixed; boundary=\"$boundary\"

                                                                                                                                                                                                            --$boundary
                                                                                                                                                                                                            Content-Type: text/plain; charset=\«utf-8\»
                                                                                                                                                                                                            Content-Transfer-Encoding: 7bit

                                                                                                                                                                                                            $message";
                                                                                                                                                                                                            for($i=0;$i<count($_FILES['fileFF']['name']);$i++) {
                                                                                                                                                                                                            if(is_uploaded_file($_FILES['fileFF']['tmp_name'][$i])) {
                                                                                                                                                                                                            $attachment = chunk_split(base64_encode(file_get_contents($_FILES['fileFF']['tmp_name'][$i])));
                                                                                                                                                                                                            $filename = $_FILES['fileFF']['name'][$i];
                                                                                                                                                                                                            $filetype = $_FILES['fileFF']['type'][$i];
                                                                                                                                                                                                            $filesize += $_FILES['fileFF']['size'][$i];
                                                                                                                                                                                                            $secret=«хххххххххххххххххххххххххх»;
                                                                                                                                                                                                            $response = null;
                                                                                                                                                                                                            $reCaptcha = new ReCaptcha($secret);

                                                                                                                                                                                                            $message.="
                                                                                                                                                                                                            --$boundary
                                                                                                                                                                                                            Content-Type: \"$filetype\"; name=\"$filename\"
                                                                                                                                                                                                            Content-Transfer-Encoding: base64
                                                                                                                                                                                                            Content-Disposition: attachment; filename=\"$filename\"
                                                                                                                                                                                                            $attachment";
                                                                                                                                                                                                            }
                                                                                                                                                                                                            }
                                                                                                                                                                                                            $message.="
                                                                                                                                                                                                            --$boundary--";

                                                                                                                                                                                                            mail($to, $subject, $message, $headers);
                                                                                                                                                                                                            $output = '';
                                                                                                                                                                                                            if ($_POST[«g-recaptcha-response»]) {
                                                                                                                                                                                                            $response = $reCaptcha->verifyResponse(
                                                                                                                                                                                                            $_SERVER[«REMOTE_ADDR»],
                                                                                                                                                                                                            $_POST[«g-recaptcha-response»]
                                                                                                                                                                                                            );
                                                                                                                                                                                                            }
                                                                                                                                                                                                            if ($response != null && $response->success) {
                                                                                                                                                                                                            // Капча проверена!!!
                                                                                                                                                                                                            } else {
                                                                                                                                                                                                            error(«Не верная капча. Попробуйте ещё раз.»);
                                                                                                                                                                                                            }

                                                                                                                                                                                                            }
                                                                                                                                                                                                            ?>
                                                                                                                                                                                                            1. Александр Мальцев
                                                                                                                                                                                                              25 сентября 2019, 15:10
                                                                                                                                                                                                              Если письма попадают в спам, то скорее всего они не имеют DKIM-подпись. Как настроить Google reCaptcha можно посмотреть здесь или тут.

                                                                                                                                                                                                            2. Sergey
                                                                                                                                                                                                              06 сентября 2019, 23:49
                                                                                                                                                                                                              Александр, добрый день!
                                                                                                                                                                                                              Пробую установить форму на свой сайт.
                                                                                                                                                                                                              После заполнения полей и нажатию кнопки вываливает сообщение как уже писал тут «Исправьте данные и отправьте форму ещё раз»
                                                                                                                                                                                                              Я комментировал отправку почты, коментил проверку капчи. Все не помогло.
                                                                                                                                                                                                              В сети в этот момент ошибка 500 xhr
                                                                                                                                                                                                              Попробовал с текущего сайта и GitHub
                                                                                                                                                                                                              Подскажите, пожалуйста, что еще можно предпринять
                                                                                                                                                                                                              1. Александр Мальцев
                                                                                                                                                                                                                09 сентября 2019, 13:24
                                                                                                                                                                                                                Добрый день! Попробуйте проверить настройки конфигурационного файла веб-сервера или убрать его на время (для Apache — это «.htaccess»). Также можно обратиться к «process.php» напрямую и посмотреть, что он возвращает.
                                                                                                                                                                                                                Для отладки в «process.php» можно добавить строки:
                                                                                                                                                                                                                ini_set('error_reporting', E_ALL);
                                                                                                                                                                                                                ini_set('display_errors', 1);
                                                                                                                                                                                                                ini_set('display_startup_errors', 1);
                                                                                                                                                                                                                
                                                                                                                                                                                                                После этого будут выводиться все ошибки.
                                                                                                                                                                                                                Кроме этого, нужно проверить права доступа к файлам. Для отладки можно просто выставить папке feedback и всему что там находится 777.
                                                                                                                                                                                                              2. Сергей
                                                                                                                                                                                                                26 августа 2019, 09:40
                                                                                                                                                                                                                Здравствуйте, как настроить отправку письма написано Исправьте данные и отправьте форму ещё раз. хост inmotionhosting.com
                                                                                                                                                                                                                вот что написали тех поддержка
                                                                                                                                                                                                                Username: mail@razvitiesluha.ru
                                                                                                                                                                                                                Password: Use the email account’s password.
                                                                                                                                                                                                                Incoming Server: razvitiesluha.ru
                                                                                                                                                                                                                IMAP Port: 993

                                                                                                                                                                                                                POP3 Port: 995
                                                                                                                                                                                                                Outgoing Server: razvitiesluha.ru
                                                                                                                                                                                                                SMTP Port: 465
                                                                                                                                                                                                                IMAP, POP3, and SMTP require authentication.
                                                                                                                                                                                                                1. Евгений
                                                                                                                                                                                                                  14 августа 2019, 11:41
                                                                                                                                                                                                                  Александр, подскажите, форма с коробки 2.0.3, настроили отправку используя smtp, письмо не приходит.
                                                                                                                                                                                                                  $mail->SMTPDebug = 3; выдало сообщение
                                                                                                                                                                                                                  SyntaxError: JSON.parse: unexpected non-whitespace character after JSON data at line 1 column 5 of the JSON data

                                                                                                                                                                                                                  Форма которая была в комментах ссылка работает корректно!

                                                                                                                                                                                                                  В форму 2.0.3 поправок не вносили кроме правки smtp
                                                                                                                                                                                                                  1. Александр Мальцев
                                                                                                                                                                                                                    14 августа 2019, 14:42
                                                                                                                                                                                                                    Не знаю, протестировал форму с последними версиями файлов с github, т.к. и 2.0.2 — всё нормально. Проверку выполнял на виртуальном хостинге.
                                                                                                                                                                                                                    Использовал следующие настройки:
                                                                                                                                                                                                                    // устанавливаем параметры
                                                                                                                                                                                                                    $mail = new PHPMailer;
                                                                                                                                                                                                                    $mail->CharSet = 'UTF-8';
                                                                                                                                                                                                                    
                                                                                                                                                                                                                    // Настройки SMTP
                                                                                                                                                                                                                    $mail->isSMTP();
                                                                                                                                                                                                                    $mail->SMTPAuth = true;
                                                                                                                                                                                                                    $mail->SMTPDebug = 0;
                                                                                                                                                                                                                    $mail->Host = 'ssl://smtp.yandex.ru';
                                                                                                                                                                                                                    $mail->Port = 465;
                                                                                                                                                                                                                    $mail->Username = 'Логин';
                                                                                                                                                                                                                    $mail->Password = 'Пароль';
                                                                                                                                                                                                                    
                                                                                                                                                                                                                    $mail->Encoding = 'base64';
                                                                                                                                                                                                                    $mail->IsHTML(true);
                                                                                                                                                                                                                    $mail->setFrom(MAIL_FROM, MAIL_FROM_NAME);
                                                                                                                                                                                                                    $mail->Subject = MAIL_SUBJECT;
                                                                                                                                                                                                                    $mail->Body = $bodyMail;
                                                                                                                                                                                                                    
                                                                                                                                                                                                                    Ну и конечно установил нужные адреса в константах:
                                                                                                                                                                                                                    MAIL_FROM = '...', // от какого email будет отправляться письмо
                                                                                                                                                                                                                    MAIL_ADDRESS = '...', // кому необходимо отправить письмо
                                                                                                                                                                                                                    
                                                                                                                                                                                                                    1. Евгений
                                                                                                                                                                                                                      14 августа 2019, 15:33
                                                                                                                                                                                                                      С вашими настройками, пишет что сообщение отправлено успешно.
                                                                                                                                                                                                                      Но на почту оно не приходит(((
                                                                                                                                                                                                                      1. Евгений
                                                                                                                                                                                                                        14 августа 2019, 15:47
                                                                                                                                                                                                                        Если $mail->SMTPDebug = 4;
                                                                                                                                                                                                                        smtp.JPG
                                                                                                                                                                                                                        1. Александр Мальцев
                                                                                                                                                                                                                          17 августа 2019, 15:26
                                                                                                                                                                                                                          А у тебя какая версия php? Попробуй обновить или изменить на более новую.
                                                                                                                                                                                                                          1. Евгений
                                                                                                                                                                                                                            17 августа 2019, 15:56
                                                                                                                                                                                                                            Пробовал на 7.0 и 7.1
                                                                                                                                                                                                                            Еще раз повторюсь та форма которая была по ссылке в комментах работает корректно не зависимо от версии php. А вот форма которая на гитхабе с настройками smtp не отправляет(((
                                                                                                                                                                                                                  2. Евгений
                                                                                                                                                                                                                    07 августа 2019, 14:28
                                                                                                                                                                                                                    Добрый день!
                                                                                                                                                                                                                    Огромное спасибо за форму, лучшего решения в рунете найти думаю не реально.
                                                                                                                                                                                                                    Александр, подскажите как реализовать в вашей форме отправку значений выбранных флажками (checkbox)
                                                                                                                                                                                                                    Заранее, Спасибо!
                                                                                                                                                                                                                    1. Александр Мальцев
                                                                                                                                                                                                                      09 августа 2019, 14:54
                                                                                                                                                                                                                      Добрый! Спасибо!
                                                                                                                                                                                                                      Вам нужно просто добавить чекбоксы в форму. Скрипт JavaScript самостоятельно собирёт их значения и отправит их на сервер (если они конечно checked). Тут больше никаких действий выполнять не надо.
                                                                                                                                                                                                                      Например, добавление в форму одиночного чекбокса с именем one:
                                                                                                                                                                                                                      <div class="custom-control custom-checkbox">
                                                                                                                                                                                                                        <input type="checkbox" class="custom-control-input" id="checkbox-one" name="one" value="один">
                                                                                                                                                                                                                        <label class="custom-control-label" for="checkbox-one">заголовок чекбокса</label>
                                                                                                                                                                                                                      </div> 
                                                                                                                                                                                                                      
                                                                                                                                                                                                                      На сервере (в php) его можно будет получить так:
                                                                                                                                                                                                                      if (isset($_POST['one'])) {
                                                                                                                                                                                                                        // $_POST['one'] - значение чекбокса one
                                                                                                                                                                                                                      }
                                                                                                                                                                                                                      
                                                                                                                                                                                                                      Если чекбокс не checked, то на сервер он не отправляется.

                                                                                                                                                                                                                      Например, добавление в форму нескольких чекбоксов с одним именем multi[] (как массив):
                                                                                                                                                                                                                      <div class="custom-control custom-checkbox">
                                                                                                                                                                                                                        <input type="checkbox" class="custom-control-input" id="multi-1" name="multi[]" value="один">
                                                                                                                                                                                                                        <label class="custom-control-label" for="multi-1">multi-1</label>
                                                                                                                                                                                                                      </div>    
                                                                                                                                                                                                                      <div class="custom-control custom-checkbox">
                                                                                                                                                                                                                        <input type="checkbox" class="custom-control-input" id="multi-2" name="multi[]" value="два">
                                                                                                                                                                                                                        <label class="custom-control-label" for="multi-2">multi-2</label>
                                                                                                                                                                                                                      </div>
                                                                                                                                                                                                                      
                                                                                                                                                                                                                      На сервере (в php) их можно будет получить так:
                                                                                                                                                                                                                      if (isset($_POST['multi'])) {
                                                                                                                                                                                                                        if (is_array($_POST['multi'])) {
                                                                                                                                                                                                                          foreach ($_POST['multi'] as $value) {
                                                                                                                                                                                                                            // $value - значение элемента  
                                                                                                                                                                                                                          }
                                                                                                                                                                                                                        }
                                                                                                                                                                                                                      }
                                                                                                                                                                                                                      
                                                                                                                                                                                                                      1. Владимир
                                                                                                                                                                                                                        12 января 2020, 13:51
                                                                                                                                                                                                                        Александр, благодарю за огромнейшие труды! Я так понял код вше нужно вставить в process.php и создать в tpl соответствующее место, но на почту всеравно приходять пустые значения. Нужно ли для чекбоксов реализовывать валидацию и как-то еще дорабатывать скрипт?
                                                                                                                                                                                                                        1. Александр Мальцев
                                                                                                                                                                                                                          26 января 2020, 09:40
                                                                                                                                                                                                                          Спасибо! Вот готовый пример формы с чекбоксами. Посмотрите как там всё реализовано.
                                                                                                                                                                                                                    2. Oleksa
                                                                                                                                                                                                                      23 июля 2019, 23:23
                                                                                                                                                                                                                      Добрый день, Александр!
                                                                                                                                                                                                                      Большое вам спасибо за вашу работу. Форма и инструкция по ее изменению написаны интуитивно понятно.
                                                                                                                                                                                                                      Форму поставил себе на сайт и настроил, правда пришлось включать отправку почты через SMTP.
                                                                                                                                                                                                                      Но нет предела совершенству.
                                                                                                                                                                                                                      Возникла необходимость добавить детализирующие radio к одному из полей. Пользователь заполняет само поле и по желанию доп. radio.
                                                                                                                                                                                                                      Поле, которое будет детализироваться:
                                                                                                                                                                                                                      
                                                                                                                                                                                                                      <div class="form-group border border-dark p-2 rounded bg-light">            
                                                                                                                                                                                                                      <input type="text" class="form-control" id="Standard" name="Standard" placeholder="Стандарт" value="">            
                                                                                                                                                                                                                      </div>
                                                                                                                                                                                                                      
                                                                                                                                                                                                                      Checkbox для скрытия/показа доп. полей:
                                                                                                                                                                                                                      
                                                                                                                                                                                                                      <div class="custom-control was-validated custom-checkbox mb-3">
                                                                                                                                                                                                                       <input type="checkbox" class="custom-control-input" name="Detailed" value="DetailedOn" id="hidediv" novalidate>
                                                                                                                                                                                                                       <label class="custom-control-label" for="hidediv">Расширенные параметры:</label> 
                                                                                                                                                                                                                      </div>
                                                                                                                                                                                                                      
                                                                                                                                                                                                                      Собственно сам DIV:
                                                                                                                                                                                                                      
                                                                                                                                                                                                                      <div class="form-group has-feedback" id="myDIV">
                                                                                                                                                                                                                        <label for="mmORtpi" class="control-label">Выберите единицу измерения:</label>
                                                                                                                                                                                                                        <!-- Выберите единицу измерения: -->
                                                                                                                                                                                                                        <div class="custom-control custom-radio">
                                                                                                                                                                                                                          <input type="radio" class="custom-control-input" name="mmORtpi" value="mm" id="mmORtpi-mm" required>
                                                                                                                                                                                                                          <label class="custom-control-label" for="mmORtpi-mm">мм</label>
                                                                                                                                                                                                                        </div>
                                                                                                                                                                                                                        <div class="custom-control custom-radio">
                                                                                                                                                                                                                          <input type="radio" class="custom-control-input" name="mmORtpi" value="tpi" id="mmORtpi-tpi" required>
                                                                                                                                                                                                                          <label class="custom-control-label" for="mmORtpi-tpi">tpi</label>
                                                                                                                                                                                                                        </div>                         
                                                                                                                                                                                                                        <span class="glyphicon form-control-feedback"></span>
                                                                                                                                                                                                                        <p class="error"></p>
                                                                                                                                                                                                                      </div>
                                                                                                                                                                                                                      
                                                                                                                                                                                                                      JS script, который а) при загрузке страницы скрывает "myDIV" б) Показывает, если включен checkbox "hidediv":
                                                                                                                                                                                                                      
                                                                                                                                                                                                                      <script>
                                                                                                                                                                                                                      var btn = document.querySelector('#hidediv');
                                                                                                                                                                                                                      var x = document.getElementById("myDIV");
                                                                                                                                                                                                                      document.addEventListener('DOMContentLoaded', function() {
                                                                                                                                                                                                                          x.style.display = "none";
                                                                                                                                                                                                                      }, false);
                                                                                                                                                                                                                      btn.addEventListener('click',method1);
                                                                                                                                                                                                                      function method1(){
                                                                                                                                                                                                                        if (btn.checked) {
                                                                                                                                                                                                                          x.style.display = "block";        
                                                                                                                                                                                                                        } else {
                                                                                                                                                                                                                          x.style.display = "none";
                                                                                                                                                                                                                        }
                                                                                                                                                                                                                      }
                                                                                                                                                                                                                      </script>
                                                                                                                                                                                                                      
                                                                                                                                                                                                                      
                                                                                                                                                                                                                      Собственно проблема в том, что не хватает знаний, как настроить в process.php валидацию radio «mmORtpi», чтобы она зависила от состояния checkbox #hidediv.
                                                                                                                                                                                                                      Буду признателен за помощь.
                                                                                                                                                                                                                      1. Александр Мальцев
                                                                                                                                                                                                                        05 августа 2019, 14:05
                                                                                                                                                                                                                        Добрый день!
                                                                                                                                                                                                                        Тут вам сначало нужно проверить установлен ли чекбокс, и если да, то проверить уже «mmORtpi».
                                                                                                                                                                                                                        if (isset($_POST['Detailed'])) { // если установлен чекбокс "Расширенные параметры"
                                                                                                                                                                                                                          if (isset($_POST['mmORtpi'])) {
                                                                                                                                                                                                                            $mmORtpi = filter_var($_POST['mmORtpi'], FILTER_SANITIZE_STRING);
                                                                                                                                                                                                                            if ($mmORtpi <> 'mm' || $mmORtpi <> 'tpi') {
                                                                                                                                                                                                                              $data['mmORtpi'] = 'Единица измерения установлена не корректно';
                                                                                                                                                                                                                              $data['result'] = 'error';
                                                                                                                                                                                                                            }
                                                                                                                                                                                                                          } else {
                                                                                                                                                                                                                            $data['mmORtpi'] = 'Заполните это поле.';
                                                                                                                                                                                                                            $data['result'] = 'error';
                                                                                                                                                                                                                          }
                                                                                                                                                                                                                        }
                                                                                                                                                                                                                        
                                                                                                                                                                                                                        1. Oleksa
                                                                                                                                                                                                                          06 августа 2019, 00:03
                                                                                                                                                                                                                          Спасибо, Александр!
                                                                                                                                                                                                                          Все вроде просто, но «не шмогла» :-)))
                                                                                                                                                                                                                          С вашей помощью все заработало!
                                                                                                                                                                                                                      2. Alexander
                                                                                                                                                                                                                        22 июля 2019, 11:08
                                                                                                                                                                                                                        Добрый день, Александр!
                                                                                                                                                                                                                        Большое вам спасибо за ваш сайт, и работу которую вы для всех нас делаете.
                                                                                                                                                                                                                        Я давно использую вашу форму обратной связи, на разных сайтах и никогда не было проблем.
                                                                                                                                                                                                                        Всё идеально работает.
                                                                                                                                                                                                                        Но сейчас начал использовать:
                                                                                                                                                                                                                        «Bootstrap 4 — Сборка проекта с помощью Gulp», и столкнулся с проблемой.
                                                                                                                                                                                                                        Нужна ваша помощь.
                                                                                                                                                                                                                        Не отображается фоновая картинка «captcha»
                                                                                                                                                                                                                        <img src="" />
                                                                                                                                                                                                                        Я выкладывал на хост готовый проект, результат тот же не отображается.
                                                                                                                                                                                                                        Подскажите в какую сторону смотреть.
                                                                                                                                                                                                                        1. Александр Мальцев
                                                                                                                                                                                                                          22 июля 2019, 15:51
                                                                                                                                                                                                                          Привет! Благодарю за отзыв.
                                                                                                                                                                                                                          Это скорее связано с тем, что у тебя не подключено или не установлено расширение gd для php. В captcha.php используются функции из этого пакета.
                                                                                                                                                                                                                          У меня было нечто похожее под WSL в Windows 10. Устранил я это с помощью установки расширения gd:
                                                                                                                                                                                                                          sudp apt-get install php-gd
                                                                                                                                                                                                                          
                                                                                                                                                                                                                          Если это у тебя на локальном сервере, то тогда нужно в файле php.ini расскомментировать строчку, отвечающую за подключение этого расширения.
                                                                                                                                                                                                                          Если на хостинге, то тогда можно обратиться в техподдержку чтобы они подключили это расширения или подсказали как это сделать.

                                                                                                                                                                                                                          Для дебага файла captcha.php в него можно добавить строчки для вывода всех ошибок, чтобы видеть в каком месте они произошли, а также получить более детальную информацию по ним:
                                                                                                                                                                                                                          ini_set('error_reporting', E_ALL);
                                                                                                                                                                                                                          ini_set('display_errors', 1);
                                                                                                                                                                                                                          ini_set('display_startup_errors', 1);
                                                                                                                                                                                                                          
                                                                                                                                                                                                                          После этого открыть в браузере страницу в браузере:
                                                                                                                                                                                                                          http://localhost/feedback/captcha/captcha.php
                                                                                                                                                                                                                          1. Alexander
                                                                                                                                                                                                                            22 июля 2019, 18:17
                                                                                                                                                                                                                            Спасибо вам огромное!
                                                                                                                                                                                                                            sudp apt-get install php-gd
                                                                                                                                                                                                                            Решило все проблемы на локальном сервере.
                                                                                                                                                                                                                            С хостом уверен справлюсь.

                                                                                                                                                                                                                            P.S. Я видел в каком-то вашем посте, что в знак признательности вам можно перечислить сумму.
                                                                                                                                                                                                                            Но если я не ошибаюсь там у вас Yandex, к сожалению этот способ для меня не подходит.
                                                                                                                                                                                                                            Есть ли у вас PayPal.
                                                                                                                                                                                                                            1. Александр Мальцев
                                                                                                                                                                                                                              23 июля 2019, 16:01
                                                                                                                                                                                                                              Пожалуйста. На этой странице есть адрес: itchief.ru/gift
                                                                                                                                                                                                                        2. Константин
                                                                                                                                                                                                                          10 июля 2019, 21:05
                                                                                                                                                                                                                          Здравствуйте, у меня такая же проблема как и у предыдущего человека. «Пожалуйста исправьте данные и отправьте форму ещё раз, при это все поля зеленые». Такая ошибка появляется на удаленном сервере (smtp настройки не помогли), а на локальном все работает. на удаленном сервере sendmail, smtp на удаленном сервере установлены. Может какие-то для меня не очевидные настройки есть? (в сайтостроении новичок).

                                                                                                                                                                                                                          Может где нужно указать только 1 файл для отправки…
                                                                                                                                                                                                                          1. Александр Мальцев
                                                                                                                                                                                                                            12 июля 2019, 03:00
                                                                                                                                                                                                                            Здравствуйте!
                                                                                                                                                                                                                            Скорее что-то с отправкой. Попробуйте закомментировать отправку почты:
                                                                                                                                                                                                                            /*
                                                                                                                                                                                                                            if (!$mail->send()) {
                                                                                                                                                                                                                              $data['result'] = 'error';
                                                                                                                                                                                                                            }
                                                                                                                                                                                                                            */
                                                                                                                                                                                                                            
                                                                                                                                                                                                                            Если у вас после этого появится сообщение об успешной отправке, то значит у вас происходит ошибка при отправке сообщения на email.
                                                                                                                                                                                                                            В этом случае вам необходимо проверить правильность своих настроек почты или написать хостеру.

                                                                                                                                                                                                                            Количество файлов для отправки настраивается с помощью атрибута data-counts:
                                                                                                                                                                                                                            <div class="attachments" data-counts="5">
                                                                                                                                                                                                                            
                                                                                                                                                                                                                            1. Константин
                                                                                                                                                                                                                              14 июля 2019, 18:48
                                                                                                                                                                                                                              Да, отправка не работает, а на какие настройки почты мне нужно обратить внимание?
                                                                                                                                                                                                                              1. Александр Мальцев
                                                                                                                                                                                                                                15 июля 2019, 03:51
                                                                                                                                                                                                                                Воспользуйтесь советом Романа, который он предложил в этом комментарии.
                                                                                                                                                                                                                                1. Константин
                                                                                                                                                                                                                                  16 июля 2019, 13:55
                                                                                                                                                                                                                                  Ура, ошибки были у меня: не указал в настройках procces.php почтовый адрес — куда отправляется почта. Теперь все работает!!!

                                                                                                                                                                                                                                  Форма обратной связи — действительно зачетная!
                                                                                                                                                                                                                              2. Роман
                                                                                                                                                                                                                                12 июля 2019, 23:04
                                                                                                                                                                                                                                Еще можно вместо комментирования (или вместе с ним) добавить
                                                                                                                                                                                                                                if(!$mail->send()) {
                                                                                                                                                                                                                                echo 'Message could not be sent.';
                                                                                                                                                                                                                                echo 'Mailer Error: '. $mail->ErrorInfo;
                                                                                                                                                                                                                                } else {
                                                                                                                                                                                                                                echo 'Message has been sent';
                                                                                                                                                                                                                                }
                                                                                                                                                                                                                                выведется какая-то человеческая ошибка в консоль, я для себя так и смог и правильно задать вопрос гуглу)
                                                                                                                                                                                                                            2. Роман
                                                                                                                                                                                                                              09 июля 2019, 21:55
                                                                                                                                                                                                                              Здравствуйте! Получаю ошибку Пожалуйста исправьте данные и отправьте форму ещё раз, при это все поля зеленые. На двух разных конфигурациях web server-ов, подскажите пожалуйста как можно отловить что не так? В dev tools — network вижу такой результат:

                                                                                                                                                                                                                              Request Method: POST
                                                                                                                                                                                                                              Status Code: 200 OK
                                                                                                                                                                                                                              Remote Address: — (тут данные удалил специально)
                                                                                                                                                                                                                              Referrer Policy: no-referrer-when-downgrade

                                                                                                                                                                                                                              В response соответственно error. Пробовал как и свою доработанную версию (удалил там каптчу, приложение файлов), так и чистую версию с сайта без каких-то доработок(добавил в корень сайта папку feedback, в process.php поменял почту получателя только).
                                                                                                                                                                                                                              1. Роман
                                                                                                                                                                                                                                10 июля 2019, 01:07
                                                                                                                                                                                                                                Решил для себя проблему добавлением smtp в функцию отправки по формату
                                                                                                                                                                                                                                $mail->IsSMTP(); // telling the class to use SMTP
                                                                                                                                                                                                                                $mail->SMTPAuth = true; // enable SMTP authentication
                                                                                                                                                                                                                                $mail->Host = «mail.yourdomain.com»; // set the SMTP server
                                                                                                                                                                                                                                $mail->Port = 26; // set the SMTP port
                                                                                                                                                                                                                                $mail->Username = «yourname@yourdomain»; // SMTP account username
                                                                                                                                                                                                                                $mail->Password = «yourpassword»; // SMTP account password
                                                                                                                                                                                                                                Самое парадоксальное что на одном из трех веб-серверов все отправлялось и так, причем два сервера по идею имеют одинаковый конфиг (MAMP для Windows и для MacOS), а работают со скриптом по-разному.
                                                                                                                                                                                                                                1. Александр Мальцев
                                                                                                                                                                                                                                  10 июля 2019, 16:21
                                                                                                                                                                                                                                  Отлично! Конечно, лучше использовать SMTP.
                                                                                                                                                                                                                              2. Wird
                                                                                                                                                                                                                                14 июня 2019, 17:13
                                                                                                                                                                                                                                Добрый день Александр! Не перестаю хвалить ваш скрипт формы )
                                                                                                                                                                                                                                Но мне кажется у меня она как-то не правильно работает. Я уже писал вам с просьбой написать как сделать появление валидации до нажатия на галочку согласия с условиями. Но сейчас у меня ошибки валидации не исчезают совсем. Даже после нажатия на кнопку обновить. Если не сложно — подскажите где кроется этот код и где что поправить. Хотелось бы чтобы после повторного нажатия на кнопку отправить при правильной валидации исчезали ошибки.
                                                                                                                                                                                                                                yadi.sk/i/WugtzvpVx9ZuGA
                                                                                                                                                                                                                                Заранее огромное спасибо
                                                                                                                                                                                                                                1. Александр Мальцев
                                                                                                                                                                                                                                  20 июня 2019, 14:41
                                                                                                                                                                                                                                  Добрый день. Очистка формы осуществляется посредством функции _showForm, находящейся в файле «process-form.js».
                                                                                                                                                                                                                                  1. Wird
                                                                                                                                                                                                                                    20 июня 2019, 17:45
                                                                                                                                                                                                                                    Хорошо, спасибо, рассмотрю функцию поближе
                                                                                                                                                                                                                                2. Архаил
                                                                                                                                                                                                                                  13 июня 2019, 14:44
                                                                                                                                                                                                                                  Добрый день. Подскажите пожалуйста. Я отправляю файл на сервер для записи данных в БД, методом Ajax, указываю dataType: 'text', в место dataType: 'json' обратно мне надо вернуть массив с сервера для вывода на страницу. Мне приходит от сервера строка в другой кодировке \u0418\u0432\. Как мне нормально можно получить и обработать массив отправленный с сервера?
                                                                                                                                                                                                                                  1. Александр Мальцев
                                                                                                                                                                                                                                    20 июня 2019, 14:04
                                                                                                                                                                                                                                    Добрый! Лучше использовать JSON. Массив, который нужно вернуть, просто назначьте в качестве значения одному из ключей JSON.
                                                                                                                                                                                                                                  2. Wird
                                                                                                                                                                                                                                    27 мая 2019, 12:35
                                                                                                                                                                                                                                    Добрый день Александр! Подскажите пожалуйста, как можно исправить…
                                                                                                                                                                                                                                    drive.google.com/file/d/14Smb0u0eQsZlPLxher5omE7V813MP86t/view?usp=sharing

                                                                                                                                                                                                                                    Тело в том что валидация запускается, только если согласиться с условиями, а пока галочка отжата — при нажатии на отправку ничего не происходит… как можно иницировать валидацию до нажатия на галочку?

                                                                                                                                                                                                                                    Заранее спасибо
                                                                                                                                                                                                                                    1. Александр Мальцев
                                                                                                                                                                                                                                      06 июня 2019, 14:27
                                                                                                                                                                                                                                      Добрый день!
                                                                                                                                                                                                                                      Основные действия:
                                                                                                                                                                                                                                      1. Убрать в HTML коде у кнопки «Отправить сообщение» атрибут disabled.
                                                                                                                                                                                                                                      2. Добавить к checkbox с name=«agree» атрибут required.
                                                                                                                                                                                                                                      3. Закомментировать следующие строчки в файле «process-forms.js»:
                                                                                                                                                                                                                                       // переключить во включенное или выключенное состояние кнопку submit
                                                                                                                                                                                                                                       var _changeStateSubmit = function (form, state) {
                                                                                                                                                                                                                                         //$(form).find('[type="submit"]').prop('disabled', state);
                                                                                                                                                                                                                                       };
                                                                                                                                                                                                                                      // изменение состояния кнопки submit в зависимости от состояния checkbox agree
                                                                                                                                                                                                                                      var _changeAgreement = function (form, state) {
                                                                                                                                                                                                                                        //_changeStateSubmit(form, state);
                                                                                                                                                                                                                                      };
                                                                                                                                                                                                                                      
                                                                                                                                                                                                                                      4. Удалить [name=«agree»] из строчки:
                                                                                                                                                                                                                                      $(form).find('input, textarea').not('[type="file"]').each(function () {
                                                                                                                                                                                                                                      
                                                                                                                                                                                                                                      1. Wird
                                                                                                                                                                                                                                        06 июня 2019, 15:15
                                                                                                                                                                                                                                        Спасибо большое Александр!
                                                                                                                                                                                                                                    2. Олег
                                                                                                                                                                                                                                      18 апреля 2019, 06:04
                                                                                                                                                                                                                                      Добрый день Александр! Давно пользуюсь формой обратной связью очень доволен, большое спасибо! Но есть некоторые нюансы. Хочу отключить Капчу но всё без успешно, форма не последней версии у меня установлен, если не ошибаюсь (версия 1.0.0.0) для Bootstrap 3, сетка сайта у меня так и есть стоит Bootstrap 3. Пробовал поставить версию (формы версия 2.0.2) где легко отключается Капчу, но к сожалению не хочет работать точней работает но на половину, т.е. при отправке писем уходит и приходит по назначению, а вот на сайте не появляются всплывающие окна с сообщениями например как (Ваше сообщение отправлено и т.д.) при этом форма не обновляется, скажем зависает. По этому я остановился на (версия 1.0.0.0) поскольку прекрасно работает. Александр если не сложно помогите пожалуйста, как можно отключить Капчу в форме версии 1.0.0.0?
                                                                                                                                                                                                                                      1. Александр Мальцев
                                                                                                                                                                                                                                        22 апреля 2019, 14:47
                                                                                                                                                                                                                                        Добрый! Новая версия работает с использованием Bootstrap 4. Поэтому у вас что-то может не работать на Bootstrap 3. Укажите ссылку на эту версию?
                                                                                                                                                                                                                                      2. Denis
                                                                                                                                                                                                                                        03 марта 2019, 11:19
                                                                                                                                                                                                                                        Добрый день!
                                                                                                                                                                                                                                        Александр подскажи как к форме правильно подключить Чекбоксы и кнопки «радио» (особенно радио кнопки), с проверкой в файле php. За ранее спасибо.
                                                                                                                                                                                                                                        1. Denis
                                                                                                                                                                                                                                          03 марта 2019, 11:37
                                                                                                                                                                                                                                          С помощью знаний которые освоил с вашими уроками, я смог сам реализовать данную возможность. Но хотелось бы посмотреть ваш вариант. Спасибо большое за ваши труды. Жизнь стала еще интересней.
                                                                                                                                                                                                                                          1. Александр Мальцев
                                                                                                                                                                                                                                            06 марта 2019, 17:20
                                                                                                                                                                                                                                            Пример, как можно вставить радиокнопки в форму.
                                                                                                                                                                                                                                            1. Добавляем их в HTML форму:
                                                                                                                                                                                                                                            <div class="form-group">
                                                                                                                                                                                                                                              Выберите цвет:
                                                                                                                                                                                                                                              <div class="custom-control custom-radio">
                                                                                                                                                                                                                                                <input type="radio" class="custom-control-input" name="color" value="green" id="color-green" required>
                                                                                                                                                                                                                                                <label class="custom-control-label" for="color-green">
                                                                                                                                                                                                                                                  Зеленый
                                                                                                                                                                                                                                                </label>
                                                                                                                                                                                                                                              </div>
                                                                                                                                                                                                                                              <div class="custom-control custom-radio">
                                                                                                                                                                                                                                                <input type="radio" class="custom-control-input" name="color" value="red" id="color-red" required>
                                                                                                                                                                                                                                                <label class="custom-control-label" for="color-red">
                                                                                                                                                                                                                                                  Красный
                                                                                                                                                                                                                                                </label>
                                                                                                                                                                                                                                              </div>
                                                                                                                                                                                                                                              <div class="custom-control custom-radio">
                                                                                                                                                                                                                                                <input type="radio" class="custom-control-input" name="color" value="yellow" id="color-yellow" required>
                                                                                                                                                                                                                                                <label class="custom-control-label" for="color-yellow">
                                                                                                                                                                                                                                                  Желтый
                                                                                                                                                                                                                                                </label>
                                                                                                                                                                                                                                                <div class="invalid-feedback"></div>
                                                                                                                                                                                                                                              </div>
                                                                                                                                                                                                                                            </div>
                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                            2. Выполняем обработку значения радиокнопки в process.php:
                                                                                                                                                                                                                                            const ALLOWED_COLORS = array('green' => 'Зеленый', 'red' => 'Красный', 'yellow' => 'Желтый');
                                                                                                                                                                                                                                            ...
                                                                                                                                                                                                                                            // проверка поля color
                                                                                                                                                                                                                                            if (isset($_POST['color'])) {
                                                                                                                                                                                                                                              $color = filter_var($_POST['color'], FILTER_SANITIZE_STRING);
                                                                                                                                                                                                                                              if (!array_key_exists($color, ALLOWED_COLORS)) {
                                                                                                                                                                                                                                                $data['color'] = 'Указан не правильный цвет.';
                                                                                                                                                                                                                                                $data['result'] = 'error';
                                                                                                                                                                                                                                              }
                                                                                                                                                                                                                                            } else {
                                                                                                                                                                                                                                              $data['color'] = 'Заполните это поле.';
                                                                                                                                                                                                                                              $data['result'] = 'error';
                                                                                                                                                                                                                                            }
                                                                                                                                                                                                                                            ...  
                                                                                                                                                                                                                                            $bodyMail = str_replace('%email.color%', ALLOWED_COLORS[$color], $bodyMail);
                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                            Архив формы можно загрузить отсюда.
                                                                                                                                                                                                                                            1. Denis
                                                                                                                                                                                                                                              06 марта 2019, 19:55
                                                                                                                                                                                                                                              Спасибо! У вашей формы PHP реализован по другому. Буду пробовать ваш вариант.
                                                                                                                                                                                                                                        2. Denis
                                                                                                                                                                                                                                          27 февраля 2019, 07:11
                                                                                                                                                                                                                                          Добрый день!
                                                                                                                                                                                                                                          Александр, подскажите как с помощью вашей формы реализовать функционал отправки письма в формате pdf?
                                                                                                                                                                                                                                          За ранее спасибо!
                                                                                                                                                                                                                                          1. Александр Мальцев
                                                                                                                                                                                                                                            03 марта 2019, 03:43
                                                                                                                                                                                                                                            Добрый!
                                                                                                                                                                                                                                            Это можно реализовать, например, с помощью php библиотеки Dompdf. С помощью неё можно преобразовать подготовленный HTML код в pdf-файл, а затем прикрепить его к письму в качестве вложения.

                                                                                                                                                                                                                                            Для этого необходимо скачать архив Dompdf со страницы «Релизы».
                                                                                                                                                                                                                                            Распаковать его, например, в каталог "/feedback/dompdf".
                                                                                                                                                                                                                                            Далее в «process.php» добавить следующий код:

                                                                                                                                                                                                                                            require_once '../dompdf/autoload.inc.php';
                                                                                                                                                                                                                                            use Dompdf\Dompdf;

                                                                                                                                                                                                                                            // прикрепление текста письма как pdf-вложение
                                                                                                                                                                                                                                            $dompdf = new Dompdf();

                                                                                                                                                                                                                                            $bodyMail = ''. $bodyMail. '';
                                                                                                                                                                                                                                            $dompdf->loadHtml($bodyMail);
                                                                                                                                                                                                                                            $dompdf->setPaper('A4', 'landscape');
                                                                                                                                                                                                                                            $dompdf->render();
                                                                                                                                                                                                                                            $output = $dompdf->output();
                                                                                                                                                                                                                                            $pdfPath = '../pdf/'. uniqid('pdf_', true). '.pdf';
                                                                                                                                                                                                                                            file_put_contents($pdfPath, $output);
                                                                                                                                                                                                                                            // прикрепление сформированного pdf-файла к письму
                                                                                                                                                                                                                                            $mail->addAttachment($pdfPath);


                                                                                                                                                                                                                                            Создать каталог "/feedback/pdf" для хранения файлов.

                                                                                                                                                                                                                                            Готовый пример формы обратной связи, текст письма которого дополнительно оформляется в виде pdf и прикрепляется к нему можно скачать по этой ссылке.
                                                                                                                                                                                                                                            1. Denis
                                                                                                                                                                                                                                              03 марта 2019, 08:42
                                                                                                                                                                                                                                              Большое спасибо!
                                                                                                                                                                                                                                          2. Denis
                                                                                                                                                                                                                                            26 февраля 2019, 18:20
                                                                                                                                                                                                                                            Здравствуйте,
                                                                                                                                                                                                                                            У меня возникает ошибка при отправке формы: Parse error: syntax error, unexpected T_CONST in /home/koncer/public_html/feedback/process/process.php on line 19
                                                                                                                                                                                                                                            подскажите в какой стороне копать, все что мог перепробовал.
                                                                                                                                                                                                                                            За ранее спасибо!
                                                                                                                                                                                                                                            1. Denis
                                                                                                                                                                                                                                              26 февраля 2019, 18:45
                                                                                                                                                                                                                                              Разобрался, на сайте PHP 5.2 стоял. Поставил 5.6.
                                                                                                                                                                                                                                            2. Denis
                                                                                                                                                                                                                                              26 февраля 2019, 08:43
                                                                                                                                                                                                                                              Добрый день!
                                                                                                                                                                                                                                              Александр, подскажите ка к вашей форме добавить маски с помощью (masked_input_1.4.1-min.js):
                                                                                                                                                                                                                                              для даты
                                                                                                                                                                                                                                              для номера паспорта
                                                                                                                                                                                                                                              За ранее спасибо!
                                                                                                                                                                                                                                              1. Александр Мальцев
                                                                                                                                                                                                                                                02 марта 2019, 09:01
                                                                                                                                                                                                                                                Добрый!
                                                                                                                                                                                                                                                Сейчас все современные браузеры уже поддерживают input с типом, равным «date».
                                                                                                                                                                                                                                                <div class="form-group">
                                                                                                                                                                                                                                                  <label for="date" class="control-label">Дата</label>
                                                                                                                                                                                                                                                  <input id="date" type="date" name="date" required="required" class="form-control" value="" placeholder="">
                                                                                                                                                                                                                                                  <div class="invalid-feedback"></div>
                                                                                                                                                                                                                                                </div>
                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                Если не хотите использовать стандартные средства встроенные в браузеры, то в этом случае для даты лучше использовать плагин datepicker или datetimepicker.
                                                                                                                                                                                                                                                В случае с «masked_input_1.4.1-min.js» это решается так (в этом варианте полю input, необходимо установить type, равный text):
                                                                                                                                                                                                                                                $('#date').mask('99.99.9999');
                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                Номер и серия паспорта:
                                                                                                                                                                                                                                                <div class="form-group">
                                                                                                                                                                                                                                                  <label for="passport" class="control-label">Номер и серия паспорта:</label>
                                                                                                                                                                                                                                                  <input id="passport" type="text" name="passport" required="required" class="form-control" value="" placeholder="" pattern="^\d{4} \d{6}$">
                                                                                                                                                                                                                                                  <div class="invalid-feedback"></div>
                                                                                                                                                                                                                                                </div>
                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                <script>
                                                                                                                                                                                                                                                $("#passport").mask("9999 999999");
                                                                                                                                                                                                                                                </script>
                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                1. Denis
                                                                                                                                                                                                                                                  02 марта 2019, 11:35
                                                                                                                                                                                                                                                  Большое спасибо. Очень полезная информация. Буду экспериментировать.
                                                                                                                                                                                                                                              2. Denis
                                                                                                                                                                                                                                                25 февраля 2019, 14:30
                                                                                                                                                                                                                                                Добрый день!
                                                                                                                                                                                                                                                Александр, подскажите как к вашей форме добавить функционал динамического добавления поля. За ранее спасибо. P.S У вас лучшая форма интернета.
                                                                                                                                                                                                                                                1. Александр Мальцев
                                                                                                                                                                                                                                                  26 февраля 2019, 16:02
                                                                                                                                                                                                                                                  Добрый! Спасибо за отзыв!
                                                                                                                                                                                                                                                  Динамическое добавление полей в форму можно, например, осуществить следующим образом.
                                                                                                                                                                                                                                                  1. Необходимо в HTML добавить кнопку и поле:
                                                                                                                                                                                                                                                  <!-- Поле 1 (при необходимости) -->
                                                                                                                                                                                                                                                  <div class="opt-fields">
                                                                                                                                                                                                                                                    <div class="form-group">
                                                                                                                                                                                                                                                      <label for="opt1" class="control-label">Поле 1</label>
                                                                                                                                                                                                                                                        <input id="opt1" type="text" name="opt1" class="form-control" value="" placeholder="">
                                                                                                                                                                                                                                                        <div class="invalid-feedback"></div>
                                                                                                                                                                                                                                                      </div>
                                                                                                                                                                                                                                                    </div>
                                                                                                                                                                                                                                                  
                                                                                                                                                                                                                                                     <!-- Кнопка для отправки формы -->
                                                                                                                                                                                                                                                     <div class="form-group">
                                                                                                                                                                                                                                                       <button id="add-opt" type="button" class="btn btn-primary">Добавить поле</button>
                                                                                                                                                                                                                                                     </div>
                                                                                                                                                                                                                                                  
                                                                                                                                                                                                                                                  2. Добавить на страницу JavaScript код, который будет при клике по кнопке добавлять ещё одно поле:
                                                                                                                                                                                                                                                  <script> 
                                                                                                                                                                                                                                                  var index = 2;
                                                                                                                                                                                                                                                  
                                                                                                                                                                                                                                                  $('#add-opt').click(function () {
                                                                                                                                                                                                                                                    var input = '<div class="form-group">' +
                                                                                                                                                                                                                                                      '<label for="opt' + index + '" class="control-label">Поле ' + index + '</label>' +
                                                                                                                                                                                                                                                      '<input id="opt' + index + '" type="text" name="opt' + index + '" class="form-control" value="" placeholder="">' +
                                                                                                                                                                                                                                                      '<div class="invalid-feedback"></div>' +
                                                                                                                                                                                                                                                      '</div>';
                                                                                                                                                                                                                                                    $('.opt-fields').append(input);
                                                                                                                                                                                                                                                    index++;
                                                                                                                                                                                                                                                  });
                                                                                                                                                                                                                                                  </script>
                                                                                                                                                                                                                                                  
                                                                                                                                                                                                                                                  3. В process.php добавить код:
                                                                                                                                                                                                                                                  //...
                                                                                                                                                                                                                                                  $opt = array();
                                                                                                                                                                                                                                                  $i = 1;
                                                                                                                                                                                                                                                  $res = true;
                                                                                                                                                                                                                                                  while ($res) {
                                                                                                                                                                                                                                                    if (isset($_POST['opt' . $i])) {
                                                                                                                                                                                                                                                      $opt[] = filter_var($_POST['opt' . $i], FILTER_SANITIZE_STRING);
                                                                                                                                                                                                                                                    } else {
                                                                                                                                                                                                                                                      $res = false;
                                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                                    $i++;
                                                                                                                                                                                                                                                  }
                                                                                                                                                                                                                                                  //...
                                                                                                                                                                                                                                                  $out = '<ul>';
                                                                                                                                                                                                                                                  foreach ($opt as $key => $value) {
                                                                                                                                                                                                                                                    $out .= '</li>' . ($key + 1) . ': ' . $value . '</li>';
                                                                                                                                                                                                                                                  }
                                                                                                                                                                                                                                                  $out .= '</ul>';
                                                                                                                                                                                                                                                  
                                                                                                                                                                                                                                                  $bodyMail = str_replace('%opt%', $out, $bodyMail); 
                                                                                                                                                                                                                                                  
                                                                                                                                                                                                                                                  4. В «emal.tpl» добавить код:
                                                                                                                                                                                                                                                  Opt:
                                                                                                                                                                                                                                                  %opt%
                                                                                                                                                                                                                                                  
                                                                                                                                                                                                                                                  Посмотреть пример можно в этом архиве.
                                                                                                                                                                                                                                                  1. Denis
                                                                                                                                                                                                                                                    22 сентября 2019, 13:54
                                                                                                                                                                                                                                                    Добрый день!
                                                                                                                                                                                                                                                    Александр, подскажите как модифицировать данный код. Использовать не одно поле, а 3 (три)(например: фамилия, имя, отчество.). Динамически добавлять по 3(три) поля.
                                                                                                                                                                                                                                                    За ранее спасибо, вы очень помогаете и грамотно описываете изложенный материал.
                                                                                                                                                                                                                                                    1. Александр Мальцев
                                                                                                                                                                                                                                                      23 сентября 2019, 14:09
                                                                                                                                                                                                                                                      Привет!
                                                                                                                                                                                                                                                      Для этого можно использовать массив, в котором описать что нужно добавить. После этого с помощью цикла добавить эти поля в форму:
                                                                                                                                                                                                                                                      var arrFields = [
                                                                                                                                                                                                                                                        { name: 'surname', text: 'Фамилия' },
                                                                                                                                                                                                                                                        { name: 'name', text: 'Имя' },
                                                                                                                                                                                                                                                        { name: 'fathername', text: 'Отчество' },
                                                                                                                                                                                                                                                      ];
                                                                                                                                                                                                                                                      $('#add-opt').click(function () {
                                                                                                                                                                                                                                                        arrFields.forEach(function (item) {
                                                                                                                                                                                                                                                          var input = '<div class="form-group">' +
                                                                                                                                                                                                                                                            '<label for="' + item.name + '" class="control-label">' + item.text + '</label>' +
                                                                                                                                                                                                                                                            '<input id="' + item.name + '" type="text" name="' + item.name + '" class="form-control" value="" placeholder="">' +
                                                                                                                                                                                                                                                            '<div class="invalid-feedback"></div>' +
                                                                                                                                                                                                                                                            '</div>';
                                                                                                                                                                                                                                                          $('.opt-fields').append(input);
                                                                                                                                                                                                                                                        });
                                                                                                                                                                                                                                                      });
                                                                                                                                                                                                                                                      
                                                                                                                                                                                                                                                      1. Denis
                                                                                                                                                                                                                                                        23 сентября 2019, 17:38
                                                                                                                                                                                                                                                        Большое спасибо!
                                                                                                                                                                                                                                                        Подскажи пожалуйста, а в обработчике, что нужно в таком случае добавлять (process.php)?
                                                                                                                                                                                                                                                        1. Александр Мальцев
                                                                                                                                                                                                                                                          24 сентября 2019, 13:32
                                                                                                                                                                                                                                                          Этот процесс описан в разделе статьи «Как добавить в форму новое поле». Т.е. это стандартные действия. Сначала нужно получить поле, используя суперглобальный массив POST. Например, получение поля surname выполняется так $_POST['surname'], поля name так $_POST['name'] и т.д. Далее нужно выполнить фильтрацию данных, после этого вставить его куда нужно.
                                                                                                                                                                                                                                                          1. Denis
                                                                                                                                                                                                                                                            27 сентября 2019, 11:53
                                                                                                                                                                                                                                                            Спасибо.
                                                                                                                                                                                                                                                    2. Denis
                                                                                                                                                                                                                                                      03 марта 2019, 10:05
                                                                                                                                                                                                                                                      Все работает, безотказно.
                                                                                                                                                                                                                                                      Замечена опечатка:
                                                                                                                                                                                                                                                      $out .= '</li>' . ($key + 1) . ': ' . $value . '</li>';  - у 1-го <li> лишний "/".
                                                                                                                                                                                                                                                      1. Denis
                                                                                                                                                                                                                                                        01 марта 2019, 13:13
                                                                                                                                                                                                                                                        Супер! Большое спасибо.
                                                                                                                                                                                                                                                      2. нат
                                                                                                                                                                                                                                                        02 февраля 2019, 18:19
                                                                                                                                                                                                                                                        Помогите, пожалуйста, может у вас есть вариант проверки формы без документов и капчи? Просто имя, телефон и емейл? А то начинаю удалять лишнее и понимаю, что могу накосячить и удалить не то, что надо…
                                                                                                                                                                                                                                                        1. Александр Мальцев
                                                                                                                                                                                                                                                          07 февраля 2019, 15:01
                                                                                                                                                                                                                                                          Подобная просьба уже была. Попробуйте найти форму, которую вы ищите в этой папке.
                                                                                                                                                                                                                                                        2. Александр
                                                                                                                                                                                                                                                          26 января 2019, 13:07
                                                                                                                                                                                                                                                          Добрый день! Форма обратной связи просто шикарная. Но не во всем разобрался. Подскажите пожалуйста как сделать поле для ввода сообщения (где минимум требуется ввести 20 символов) не обязательным. То есть что бы в форме оно присутствовало, но не было обязательным для заполнения.
                                                                                                                                                                                                                                                          1. Александр
                                                                                                                                                                                                                                                            26 января 2019, 15:04
                                                                                                                                                                                                                                                            Прошу прощения! Ответ нашел в ветке комментариев.

                                                                                                                                                                                                                                                            itchief.ru/php/feedback-form-for-website#comment-2810
                                                                                                                                                                                                                                                          2. Nikita
                                                                                                                                                                                                                                                            23 января 2019, 17:14
                                                                                                                                                                                                                                                            Все работает, но есть маленькая проблема, форма во всплывающем окне работает странно: ничего не заполнил, нажал на кнопку — не отправилось, сообщение об ошибке, все как надо; а когда заполнил имя, но не заполнил телефон, то при нажатии на кнопку окно просто закрывается — сообщение не отправляется, но все же лучше было бы, если б оно не закрывалось, а просто писало ЗАПОЛНИТЕ ПОЛЕ С ТЕЛЕФОНОМ ПРАВИЛЬНО. В чем может быть проблема? В обычной форме (не всплывающей) такой проблемы нет. (хотя там же не в окне, поэтому логично)

                                                                                                                                                                                                                                                            P.S. Вашу новую форму я скачал, глянул, но пока не стал устанавливать, дабы не переделывать все. Просто доделал старую, с Вашей помощью.
                                                                                                                                                                                                                                                            1. Александр Мальцев
                                                                                                                                                                                                                                                              29 января 2019, 15:20
                                                                                                                                                                                                                                                              Не знаю, сложно что посоветовать, надо смотреть код.
                                                                                                                                                                                                                                                            2. Nikita
                                                                                                                                                                                                                                                              22 января 2019, 07:28
                                                                                                                                                                                                                                                              А еще, если не сложно, подскажите, пожалуйста, а как мне для формы, которая без всплывающего окна, сделать, чтобы оно там всплывало по нажатию? Но чтобы и остальные формы тоже работали. Может есть возможность как-то js отдельный под нее создать?
                                                                                                                                                                                                                                                              1. Александр Мальцев
                                                                                                                                                                                                                                                                22 января 2019, 15:10
                                                                                                                                                                                                                                                                Да, конечно можно. Добавьте в CSS стили, с помощью которых спозиционируйте форму абсолютно.
                                                                                                                                                                                                                                                                .popup-form {
                                                                                                                                                                                                                                                                  posution: absolute;
                                                                                                                                                                                                                                                                  ...
                                                                                                                                                                                                                                                                }
                                                                                                                                                                                                                                                                А потом с помощью JavaScript при клике по нужному элементу просто добавьте этот класс форме.
                                                                                                                                                                                                                                                                1. Nikita
                                                                                                                                                                                                                                                                  22 января 2019, 07:43
                                                                                                                                                                                                                                                                  Решил дублировав код
                                                                                                                                                                                                                                                                  1. Nikita
                                                                                                                                                                                                                                                                    22 января 2019, 08:08
                                                                                                                                                                                                                                                                    Желательно, конечно, узнать как это правильно делается. А то у меня за раз приходят по 2 письма с одной формы.
                                                                                                                                                                                                                                                                2. Kvarcus
                                                                                                                                                                                                                                                                  21 января 2019, 01:04
                                                                                                                                                                                                                                                                  Здравствуйте.
                                                                                                                                                                                                                                                                  Форма отличная все работает исправно использую без капчи.
                                                                                                                                                                                                                                                                  Возник вопрос можно ли поменять index.html на index.php
                                                                                                                                                                                                                                                                  хотелось бы оформить input type=«file» в своем стиле.
                                                                                                                                                                                                                                                                  Я пробовал менять расширение, почта перестает доставляться, точнее
                                                                                                                                                                                                                                                                  приходит только если добавить картинку без загрузки на почте пусто хотя и пишет спасибо все отправлено.
                                                                                                                                                                                                                                                                  Спасибо
                                                                                                                                                                                                                                                                  1. Александр Мальцев
                                                                                                                                                                                                                                                                    22 января 2019, 15:18
                                                                                                                                                                                                                                                                    Здравствуйте! Конечно, можно. Проверяйте настройки сервера, скорее всего что-то не достроено.
                                                                                                                                                                                                                                                                    Для оформления input type=«file» нужен только CSS, расширение тут ни на что не может повлиять.
                                                                                                                                                                                                                                                                    1. Kvarcus
                                                                                                                                                                                                                                                                      22 января 2019, 21:15
                                                                                                                                                                                                                                                                      Знать бы что не достроено или хотя бы в какую сторону смотреть…

                                                                                                                                                                                                                                                                      Не совсем так, я хотел для оформления использовать bootstrap-fileinput для этого и пришлось менять расширение.
                                                                                                                                                                                                                                                                  2. Nikita
                                                                                                                                                                                                                                                                    19 января 2019, 14:49
                                                                                                                                                                                                                                                                    Добрый день! Александр, подскажите пожалуйста, я поставил вашу форму, и работает она у меня через модальное окно. Но я хотел бы поменять одну деталь. После нажатия кнопки submit вызывается alert, который очень некрасиво смотрится в модальном окне и на мобильных устройствах с маленьким экраном это вызывает проблемы с функциональностью. Скажите, как мне заместо вызова alerta, прописать все так, чтобы мое модальное окно с формой обратной связи после нажатия на кнопку submit и проверки закрывалось, и после, открывалось новое модальное окно, в котором написано «Ваше сообщение отправлено!»?
                                                                                                                                                                                                                                                                    Заранее, спасибо!
                                                                                                                                                                                                                                                                    1. Александр Мальцев
                                                                                                                                                                                                                                                                      19 января 2019, 15:15
                                                                                                                                                                                                                                                                      Добрый день! Нужно всё сделать так, как вы написали.
                                                                                                                                                                                                                                                                      1. Закрыть модальное окно с id равным, например, myModal:
                                                                                                                                                                                                                                                                      $('#myModal').modal('hide');
                                                                                                                                                                                                                                                                      2. В обработчике, который выполняется после закрытия модального окна, написать код, который будет в зависимости от результата открывать или нет новое модальное окно:
                                                                                                                                                                                                                                                                      $('#myModal').on('hidden.bs.modal', function (e) {
                                                                                                                                                                                                                                                                        if (data.result === "success") {
                                                                                                                                                                                                                                                                          $('#myModal2').modal('show');
                                                                                                                                                                                                                                                                        }
                                                                                                                                                                                                                                                                      })
                                                                                                                                                                                                                                                                      1. Nikita
                                                                                                                                                                                                                                                                        19 января 2019, 15:19
                                                                                                                                                                                                                                                                        Если я правильно понял, то второе нужно вставить заместо этого?
                                                                                                                                                                                                                                                                        // при успешной отправки формы
                                                                                                                                                                                                                                                                        if (data.result === «success») {
                                                                                                                                                                                                                                                                        $(this).parent().find('.form-result-success')
                                                                                                                                                                                                                                                                        .removeClass('d-none')
                                                                                                                                                                                                                                                                        .addClass('d-flex');
                                                                                                                                                                                                                                                                        return;
                                                                                                                                                                                                                                                                        А куда в таком случае первое?
                                                                                                                                                                                                                                                                        1. Александр Мальцев
                                                                                                                                                                                                                                                                          19 января 2019, 15:49
                                                                                                                                                                                                                                                                          Первое нужно добавить до второго.
                                                                                                                                                                                                                                                                          1. Nikita
                                                                                                                                                                                                                                                                            19 января 2019, 15:41
                                                                                                                                                                                                                                                                            И что можно сделать, чтобы это сработало и на других модальных формах (id) (просто у меня их 5 всплывающих форм)
                                                                                                                                                                                                                                                                            1. Александр Мальцев
                                                                                                                                                                                                                                                                              22 января 2019, 14:44
                                                                                                                                                                                                                                                                              Пример как это выполнить можно посмотреть в этом файле.
                                                                                                                                                                                                                                                                              1. Александр Мальцев
                                                                                                                                                                                                                                                                                19 января 2019, 15:53
                                                                                                                                                                                                                                                                                В зависимости от того как у вас это реализовано.
                                                                                                                                                                                                                                                                                Можно, например, написать, поиск элемента относительно текущего:
                                                                                                                                                                                                                                                                                $(this).closest('.modal').modal('hide');
                                                                                                                                                                                                                                                                                ...
                                                                                                                                                                                                                                                                                $(this).closest('.modal').on('hidden.bs.modal', function (e) {
                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                1. Nikita
                                                                                                                                                                                                                                                                                  19 января 2019, 15:57
                                                                                                                                                                                                                                                                                  Ну вот я пока еще ничего не менял в process-forms.js, как считаете лучше сделать?
                                                                                                                                                                                                                                                                                  А в main.js у меня вот что:
                                                                                                                                                                                                                                                                                  $(function () {

                                                                                                                                                                                                                                                                                  var form1 = new ProcessForm();
                                                                                                                                                                                                                                                                                  form1.init();

                                                                                                                                                                                                                                                                                  var form3 = new ProcessForm({
                                                                                                                                                                                                                                                                                  selector: '#feedback-form-3'
                                                                                                                                                                                                                                                                                  });
                                                                                                                                                                                                                                                                                  form3.init();

                                                                                                                                                                                                                                                                                  var form2 = new ProcessForm({
                                                                                                                                                                                                                                                                                  selector: '#feedback-form-2'
                                                                                                                                                                                                                                                                                  });
                                                                                                                                                                                                                                                                                  form2.init();

                                                                                                                                                                                                                                                                                  var form4 = new ProcessForm({
                                                                                                                                                                                                                                                                                  selector: '#feedback-form-4'
                                                                                                                                                                                                                                                                                  });
                                                                                                                                                                                                                                                                                  form4.init();

                                                                                                                                                                                                                                                                                  var form5 = new ProcessForm({
                                                                                                                                                                                                                                                                                  selector: '#feedback-form-5'
                                                                                                                                                                                                                                                                                  });
                                                                                                                                                                                                                                                                                  form5.init();

                                                                                                                                                                                                                                                                                  var form6 = new ProcessForm({
                                                                                                                                                                                                                                                                                  selector: '#feedback-form-6'
                                                                                                                                                                                                                                                                                  });
                                                                                                                                                                                                                                                                                  form6.init();

                                                                                                                                                                                                                                                                                  });
                                                                                                                                                                                                                                                                                  1. Александр Мальцев
                                                                                                                                                                                                                                                                                    22 января 2019, 15:01
                                                                                                                                                                                                                                                                                    Не знаю, наверно не стал бы использовать столько форм обратной связи на сайте.
                                                                                                                                                                                                                                                                                    1. Nikita
                                                                                                                                                                                                                                                                                      19 января 2019, 20:03
                                                                                                                                                                                                                                                                                      Вставил код таким образом:
                                                                                                                                                                                                                                                                                      // при успешной отправки формы
                                                                                                                                                                                                                                                                                      $('#modal-1').modal('hide');
                                                                                                                                                                                                                                                                                      $('#modal-1').on('hidden.bs.modal', function (e) {
                                                                                                                                                                                                                                                                                      if (data.result === «success») {
                                                                                                                                                                                                                                                                                      $('#modal-12').modal('show');
                                                                                                                                                                                                                                                                                      }
                                                                                                                                                                                                                                                                                      })

                                                                                                                                                                                                                                                                                      Открыл форму modal-1, нажал на кнопку «отправить», но все глухо — данное окно не закрывается, да и окно modal-12 не открывается, просто кнопка становится нажатой и все.
                                                                                                                                                                                                                                                                                      1. Nikita
                                                                                                                                                                                                                                                                                        22 января 2019, 06:51
                                                                                                                                                                                                                                                                                        Сделал как вы сказали, все работает, вот только, если окно снова открыть, не обновляя страницу и самому закрыть, то тоже вылезает окошко с УСПЕШНОЙ ОТПРАВКОЙ.
                                                                                                                                                                                                                                                                                        1. Александр Мальцев
                                                                                                                                                                                                                                                                                          22 января 2019, 14:55
                                                                                                                                                                                                                                                                                          Как это корректно выполнить можете посмотреть в этом комментарии.
                                                                                                                                                                                                                                                                                          1. Nikita
                                                                                                                                                                                                                                                                                            22 января 2019, 08:00
                                                                                                                                                                                                                                                                                            Хотелось бы узнать еще, как отменить повторную отправку одним человеком.
                                                                                                                                                                                                                                                                                            1. Александр Мальцев
                                                                                                                                                                                                                                                                                              22 января 2019, 14:54
                                                                                                                                                                                                                                                                                              В зависимости от того, что вы хотите. А как определить повторная отправка эта или нет? Можно конечно записывать в базу все отправляемые сообщения, а затем сравнивать её с уже существующими. Или если есть, например, система авторизации, то можно написать вывод всех отправленных сообщений в личном кабинете и сделать, например, кнопку удалить или отменить с помощью которой пользователь сможет сам отменить дубль.
                                                                                                                                                                                                                                                                                              1. Nikita
                                                                                                                                                                                                                                                                                                22 января 2019, 14:57
                                                                                                                                                                                                                                                                                                Починил, вроде все шоколадно. Спасибо большое за помощь!
                                                                                                                                                                                                                                                                            2. Алексей
                                                                                                                                                                                                                                                                              19 января 2019, 09:32
                                                                                                                                                                                                                                                                              Прошу прощения, что оставляю комментарий под своим. Но возникла проблема с темой сообщения.
                                                                                                                                                                                                                                                                              В программе mozilla thunderbird выглядит тема вот так.



                                                                                                                                                                                                                                                                              Хотя в другом мобильном приложении почты все отлично.

                                                                                                                                                                                                                                                                              1. Александр Мальцев
                                                                                                                                                                                                                                                                                19 января 2019, 15:01
                                                                                                                                                                                                                                                                                Внёс изменения. Проверьте, исчезла ли проблема с кодировкой в теме.
                                                                                                                                                                                                                                                                                1. Алексей
                                                                                                                                                                                                                                                                                  19 января 2019, 15:13
                                                                                                                                                                                                                                                                                  Благодарю. Проблема ушла!
                                                                                                                                                                                                                                                                              2. Алексей
                                                                                                                                                                                                                                                                                18 января 2019, 20:46
                                                                                                                                                                                                                                                                                Доброго дня!
                                                                                                                                                                                                                                                                                Установил форму на сайт. PHP 7.3. Получаю ошибку после отправке формы — Исправьте данные и отправьте форму ещё раз.
                                                                                                                                                                                                                                                                                Ответ сервер
                                                                                                                                                                                                                                                                                <br />
                                                                                                                                                                                                                                                                                <b>Warning</b>:  Cannot modify header information - headers already sent by (output started at /home/c1866/az8.ru/www/process/process.php:1) in <b>/site.ru/www/process/process.php</b> on line <b>9</b><br />
                                                                                                                                                                                                                                                                                <br />
                                                                                                                                                                                                                                                                                <b>Warning</b>:  session_start(): Cannot start session when headers already sent in <b>site.ru/process/process.php</b> on line <b>42</b><br />
                                                                                                                                                                                                                                                                                {"result":"error","captcha":"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u043a\u043e\u0434\u0430."}
                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                1. Алексей
                                                                                                                                                                                                                                                                                  18 января 2019, 20:58
                                                                                                                                                                                                                                                                                  Разобрался. файл process.php нужно было сохранить в utf-8 без BOM
                                                                                                                                                                                                                                                                                2. Дарьян
                                                                                                                                                                                                                                                                                  10 января 2019, 12:13
                                                                                                                                                                                                                                                                                  Здравствуйте. Я тут форму переделывал под стандарты которые нам прислали. И чего то я поплыл:
                                                                                                                                                                                                                                                                                  1) Не может форма обработать капчу, хотя зареган и прописан открытый и закрытый ключ.
                                                                                                                                                                                                                                                                                  2) У брать капчу не вариант, так как хостинг блочит отправку сообщений без капчи.
                                                                                                                                                                                                                                                                                  Ссылка на код: codepen.io/qasp/pen/MZqOrQ
                                                                                                                                                                                                                                                                                  Вопрос в том чего делать и куда прописать в коде закрытый ключ, так как я уже вставлял в поле объявлений и не помогло?
                                                                                                                                                                                                                                                                                  Спасибо, а то я в скриптах не ахти.
                                                                                                                                                                                                                                                                                  1. Александр Мальцев
                                                                                                                                                                                                                                                                                    10 января 2019, 13:35
                                                                                                                                                                                                                                                                                    Здравствуйте. Инструкция как подключить гугловскую рекапчу приведена в этой статье.
                                                                                                                                                                                                                                                                                  2. ntym
                                                                                                                                                                                                                                                                                    21 декабря 2018, 17:30
                                                                                                                                                                                                                                                                                    Добрый день, пытаюсь сделать форму на отправку на несколько email адресов.
                                                                                                                                                                                                                                                                                    Пробовал такой вариант

                                                                                                                                                                                                                                                                                    Не отправляется форма, вот что выдает в логе
                                                                                                                                                                                                                                                                                    PHP Parse error:  syntax error, unexpected '$mailAddress' (T_VARIABLE), expecting identifier (T_STRING) in /.../public_html/feedback/process/process.php on line 21
                                                                                                                                                                                                                                                                                    Что не так?
                                                                                                                                                                                                                                                                                    1. Александр Мальцев
                                                                                                                                                                                                                                                                                      24 декабря 2018, 14:22
                                                                                                                                                                                                                                                                                      Добавил данную возможность в форму (v.2.0.2).
                                                                                                                                                                                                                                                                                      Осуществляется это посредством назначения константе MAIL_ADDRESS нужного количества email адресов, отделённых друг от друга с помощью запятой:
                                                                                                                                                                                                                                                                                      MAIL_ADDRESS = 'manager1@mail.ru, manager2@mail.ru', // кому необходимо отправить письмо
                                                                                                                                                                                                                                                                                      
                                                                                                                                                                                                                                                                                      1. ntym
                                                                                                                                                                                                                                                                                        26 декабря 2018, 12:06
                                                                                                                                                                                                                                                                                        Как узнать какой версии у меня форма, что можно сделать, чтоб не переделывать всю форму. Форму я качал совсем недавно
                                                                                                                                                                                                                                                                                        1. Александр Мальцев
                                                                                                                                                                                                                                                                                          26 декабря 2018, 13:55
                                                                                                                                                                                                                                                                                          Смотрите последний commit на гитхабе и произведите у себя такие же изменения.
                                                                                                                                                                                                                                                                                          1. ntym
                                                                                                                                                                                                                                                                                            26 декабря 2018, 14:47
                                                                                                                                                                                                                                                                                            спасибо, все пошло
                                                                                                                                                                                                                                                                                    2. Денис
                                                                                                                                                                                                                                                                                      12 декабря 2018, 10:50
                                                                                                                                                                                                                                                                                      Здравтвуйте! Ничего не получается, все время пишет Исправьте данные и отправьте форму ещё раз. Не могу понять, в чем причина. Помогите разобраться?
                                                                                                                                                                                                                                                                                      1. Александр Мальцев
                                                                                                                                                                                                                                                                                        13 декабря 2018, 14:42
                                                                                                                                                                                                                                                                                        Как смотреть ответ сервера посмотрите в этом комментарии. Только сейчас он называется не verify.php, а process.php.
                                                                                                                                                                                                                                                                                        Почитайте комментарии, это тоже может помочь разобраться как смотреть ошибки. Без этого навыка вы просто не сможете двигаться дальше.
                                                                                                                                                                                                                                                                                        Ошибка на сервере может быть из-за чего угодно, нужно смотреть ответ какой приходит с сервере. Может просто версия php ниже, чем 5.6.
                                                                                                                                                                                                                                                                                      2. ntym
                                                                                                                                                                                                                                                                                        03 декабря 2018, 17:44
                                                                                                                                                                                                                                                                                        Добрый день!
                                                                                                                                                                                                                                                                                        Залил форму, сделал стандартные настройки (мыло отправителя и мыло куда).

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

                                                                                                                                                                                                                                                                                        Исправьте данные и отправьте форму ещё раз.

                                                                                                                                                                                                                                                                                        куда обратить внимание???
                                                                                                                                                                                                                                                                                        1. Александр Мальцев
                                                                                                                                                                                                                                                                                          10 декабря 2018, 13:19
                                                                                                                                                                                                                                                                                          Добрый! Необходимо посмотреть ответ сервера. Для этого необходимо открыть в браузере вкладку Network в панели разработчика, а в ней process.php.
                                                                                                                                                                                                                                                                                        2. Олег
                                                                                                                                                                                                                                                                                          23 ноября 2018, 07:37
                                                                                                                                                                                                                                                                                          Александр, добрый день! Форма обратной связи просто супер! Я установил себе на сайт всё работает. Но столкнулся с одной проблемой, хотел поставить дополнительную форму обратной связи на той же странице, но увы работает только одна из двух. Вероятность появился конфликт между ними. Я читал комментарии на сайте и даже попадались такие подобные вопросы, как и у меня, например вот из комментариев –(((Александр Мальцев12 сентября 2016, 13:17 0 Самый простой способ — это всё продублировать… Т.е. и файлы и содержимое в них. Например, сделать копию captcha.php — captcha2.php. После этого открыть его и в нём изменить code на code2: ))) но эти комментарии это было очень давно за 2016г. видать форма со времени изменилась где то даже файлов нет которые редактировать. Таким образом я не смог подредактировать, если не сложно помогите пожалуйста разобраться, где и как поменять чтоб работали две формы на одной странице. Буду ждать вашего ответа. Спасибо!
                                                                                                                                                                                                                                                                                          1. Александр Мальцев
                                                                                                                                                                                                                                                                                            14 декабря 2018, 15:56
                                                                                                                                                                                                                                                                                            Добавил данную информацию и пример с последней версией формы в статью.
                                                                                                                                                                                                                                                                                            1. Александр Мальцев
                                                                                                                                                                                                                                                                                              26 ноября 2018, 14:57
                                                                                                                                                                                                                                                                                              Добрый! Покажу, как это выполнить, но немного позже уже в обновлённой версии формы.
                                                                                                                                                                                                                                                                                            2. Назар Притула
                                                                                                                                                                                                                                                                                              19 ноября 2018, 01:57
                                                                                                                                                                                                                                                                                              Здраствуйте. Подскажите пожалуйста: в данной форме есть возможность сначала вывести выбранные пользователем файлы списком и дать возможность удалять пользователю ненужные файлы перед отправкой формы? Спасибо!
                                                                                                                                                                                                                                                                                              1. Александр Мальцев
                                                                                                                                                                                                                                                                                                19 ноября 2018, 16:34
                                                                                                                                                                                                                                                                                                Здравствуйте! Этот функционала нет в форме, но его можно добавить.
                                                                                                                                                                                                                                                                                                Посмотрите пример с dropzone может он подойдёт.
                                                                                                                                                                                                                                                                                              2. Александр
                                                                                                                                                                                                                                                                                                24 октября 2018, 10:39
                                                                                                                                                                                                                                                                                                Добрый день! а как несколько форм на одной странице забацать?
                                                                                                                                                                                                                                                                                                1. Александр Мальцев
                                                                                                                                                                                                                                                                                                  19 ноября 2018, 16:36
                                                                                                                                                                                                                                                                                                  Добрый! В статье есть же ссылка на пример как это сделать.
                                                                                                                                                                                                                                                                                                2. stonegin
                                                                                                                                                                                                                                                                                                  16 октября 2018, 20:16
                                                                                                                                                                                                                                                                                                  для версии на github.com, файл index.html
                                                                                                                                                                                                                                                                                                  картинка в кнопке «Обновить» отображается некорректно,
                                                                                                                                                                                                                                                                                                  у Вас так:
                                                                                                                                                                                                                                                                                                  <div class="btn btn-default refresh-captcha">
                                                                                                                                                                                                                                                                                                  корректно отображается так:
                                                                                                                                                                                                                                                                                                  <div class="btn btn-default position-relative refresh-captcha">
                                                                                                                                                                                                                                                                                                  1. Александр Мальцев
                                                                                                                                                                                                                                                                                                    18 октября 2018, 15:53
                                                                                                                                                                                                                                                                                                    Текущая версия формы выполнена с использованием CSS фреймворка Bootstrap 3. В Bootstrap 3 нет класса position-relative.
                                                                                                                                                                                                                                                                                                  2. stonegin
                                                                                                                                                                                                                                                                                                    16 октября 2018, 20:10
                                                                                                                                                                                                                                                                                                    В блоке
                                                                                                                                                                                                                                                                                                    <!-- Капча -->
                                                                                                                                                                                                                                                                                                    <div class="captcha">
                                                                                                                                                                                                                                                                                                    <img class="img-captcha" src="/feedback/captcha/captcha.php"data-src="/feedback/captcha/captcha.php">
                                                                                                                                                                                                                                                                                                    <div class="btn btn-default refresh-captcha"><i class="glyphicon glyphicon-refresh"></i>Обновить</div>
                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                    класс для кнопки:
                                                                                                                                                                                                                                                                                                    <div class="btn btn-default refresh-captcha">
                                                                                                                                                                                                                                                                                                    замените на
                                                                                                                                                                                                                                                                                                    <div class="btn btn-default position-relative refresh-captcha">
                                                                                                                                                                                                                                                                                                    иначе картинка на кнопке обновления отображается некорректно.
                                                                                                                                                                                                                                                                                                    1. Алексей
                                                                                                                                                                                                                                                                                                      06 октября 2018, 18:20
                                                                                                                                                                                                                                                                                                      Александр, добрый вечер! Подскажите пожалуйста, как можно к этой форме прикрутить еще маленькую форму в модальном окне. Состоящую из трех полей: имя, телефон, почта, с чекбоксом о политике, с отправкой письма клиенту о доставке сообщения и с возможностью присваивать форме разные названия.
                                                                                                                                                                                                                                                                                                      1. Александр Мальцев
                                                                                                                                                                                                                                                                                                        23 октября 2018, 12:09
                                                                                                                                                                                                                                                                                                        Добрый! А зачем из одной формы открывать ещё какую-то другую форму? Они как-то связаны или как?
                                                                                                                                                                                                                                                                                                        1. Алексей
                                                                                                                                                                                                                                                                                                          20 октября 2018, 18:06
                                                                                                                                                                                                                                                                                                          Установил формы из «feedback-two-forms-with-captcha» на эту форму. Перекинул файлы: process, js, index. Капча и чекбокс почему то работают только в модальном окне. Александр подскажите пожалуйста, где нужно еще внести правки, куда нужно копать или какие могут быть причины. За формы огромное спасибо! по отдельности все работает идеально, а решить вышеописанную задачу не получается.
                                                                                                                                                                                                                                                                                                          1. Алексей
                                                                                                                                                                                                                                                                                                            22 октября 2018, 17:33
                                                                                                                                                                                                                                                                                                            Идем дальше)))) На одной странице несколько кнопок которые должны открывать в модальном окне формы с одинаковым содержимым полей, но с разным названием. Вытекает вопрос:
                                                                                                                                                                                                                                                                                                            1) какой параметр присвоить кнопке, чтобы она открывала нужную форму? если правильно понял, ПРИМЕР: «data-target=»#feedbackFormModal" а самой форме «id=»feedbackFormModal""
                                                                                                                                                                                                                                                                                                            2) Как присвоить форме название? (которое в последующем нужно переслать с содержимым полей. для идентификации формы с которой пришла заявка)
                                                                                                                                                                                                                                                                                                            3) Как передать это название (что и где нужно прописать)
                                                                                                                                                                                                                                                                                                            Спасибо! за ранее если кто нибудь поможет.
                                                                                                                                                                                                                                                                                                            1. Александр Мальцев
                                                                                                                                                                                                                                                                                                              25 октября 2018, 15:00
                                                                                                                                                                                                                                                                                                              1 — Да, это один из способов вызова модальных окон Bootstrap.
                                                                                                                                                                                                                                                                                                              2 — Наиболее простой вариант — это добавить скрытое поле.
                                                                                                                                                                                                                                                                                                              3 — Значение скрытого поля автоматически будет передаваться на сервер. В php его нужно обработать и вставить его, например, в тело письма.
                                                                                                                                                                                                                                                                                                        2. Валерий
                                                                                                                                                                                                                                                                                                          22 августа 2018, 11:41
                                                                                                                                                                                                                                                                                                          Добрый день! Сообщения будут отправляться от разных сайтов, поэтому эта константа —
                                                                                                                                                                                                                                                                                                          // от какого имени будет отправляться письмо
                                                                                                                                                                                                                                                                                                          const MAIL_FROM_NAME = 'Имя_сайта';
                                                                                                                                                                                                                                                                                                          должна быть заменена на переменную?
                                                                                                                                                                                                                                                                                                          Пожалуйста, подскажите как это реализовать?
                                                                                                                                                                                                                                                                                                          1. Александр Мальцев
                                                                                                                                                                                                                                                                                                            22 августа 2018, 14:46
                                                                                                                                                                                                                                                                                                            Добрый!
                                                                                                                                                                                                                                                                                                            Создать переменную и использовать её там где нужно.
                                                                                                                                                                                                                                                                                                            Например:
                                                                                                                                                                                                                                                                                                            $allowedHosts = array('myhost1.ru', 'myhost2.ru');
                                                                                                                                                                                                                                                                                                            if (!isset($_SERVER['HTTP_HOST']) || !in_array($_SERVER['HTTP_HOST'], $allowedHosts)) {
                                                                                                                                                                                                                                                                                                                header($_SERVER['SERVER_PROTOCOL'].' 400 Bad Request');
                                                                                                                                                                                                                                                                                                                exit();
                                                                                                                                                                                                                                                                                                            }
                                                                                                                                                                                                                                                                                                            $mailFromName = $_SERVER['HTTP_HOST']; // переменная
                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                            // ...
                                                                                                                                                                                                                                                                                                            $fromName = '=?UTF-8?B?'.base64_encode($mailFromName).'?=';
                                                                                                                                                                                                                                                                                                            1. Валерий
                                                                                                                                                                                                                                                                                                              23 августа 2018, 09:54
                                                                                                                                                                                                                                                                                                              Добрый день! Александр, спасибо большое за форму и за помощь!
                                                                                                                                                                                                                                                                                                              Теперь обнаружил, что если в const MAIL_ADDRESS написать значение кириллицей, например: const MAIL_ADDRESS = '1@щей.рф' (это ящик администратора), то сообщение адресату не отправляется и выводится в окне сообщение «Ошибка! Форму не удалось отправить».
                                                                                                                                                                                                                                                                                                              Но, в тоже время пользователь, отправлявший сообщение, получает письмо, что его сообщение успешно доставлено «Здравствуйте Валерий, ваше сообщение доставлено».
                                                                                                                                                                                                                                                                                                              Как это лечится?
                                                                                                                                                                                                                                                                                                              1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                23 августа 2018, 15:01
                                                                                                                                                                                                                                                                                                                Добрый! Внес исправления в проект на github. Пробуйте.
                                                                                                                                                                                                                                                                                                                1. Валерий
                                                                                                                                                                                                                                                                                                                  23 августа 2018, 18:20
                                                                                                                                                                                                                                                                                                                  Как я понял Вы изменили только в файле process строку 195 на if (isset($email) && $data['result'] != 'error').
                                                                                                                                                                                                                                                                                                                  Теперь при нажатии «Отправить сообщение» эта кнопка становится неактивная, во всех полях появляются зеленые галочки и больше ничего не изменяется. В окне не выводится никаких сообщений о ошибке.
                                                                                                                                                                                                                                                                                                                  На кириллический адрес сообщение по-прежнему не доставляется.
                                                                                                                                                                                                                                                                                                                  Но и на адрес пользователя теперь письмо об успешном доставлении сообщения не доставляется.
                                                                                                                                                                                                                                                                                                                  Получается, что адреса с кириллицей нельзя использовать в форме?
                                                                                                                                                                                                                                                                                                          2. Валерий
                                                                                                                                                                                                                                                                                                            21 августа 2018, 17:48
                                                                                                                                                                                                                                                                                                            Здравствуйте!
                                                                                                                                                                                                                                                                                                            Можно ли эту форму обратной связи в единственном числе использовать одновременно для множества разных сайтов на разных хостингах?
                                                                                                                                                                                                                                                                                                            Например:
                                                                                                                                                                                                                                                                                                            -разместить папку feedback формы на субдомене,
                                                                                                                                                                                                                                                                                                            -обращаться к html-форме с разных сайтов и с разных хостингов, и чтобы письма приходили на один адрес, но с указанием разных обратных адресов и имен.
                                                                                                                                                                                                                                                                                                            Если можно, то как?
                                                                                                                                                                                                                                                                                                            В документации ответа не нашел.
                                                                                                                                                                                                                                                                                                            1. Александр Мальцев
                                                                                                                                                                                                                                                                                                              22 августа 2018, 14:34
                                                                                                                                                                                                                                                                                                              Здравствуйте!
                                                                                                                                                                                                                                                                                                              Для этого случая нет готового решения. Это не типовая задача.
                                                                                                                                                                                                                                                                                                              Можно, например, попробовать это выполнить через iframe.
                                                                                                                                                                                                                                                                                                            2. Игорь
                                                                                                                                                                                                                                                                                                              13 августа 2018, 14:32
                                                                                                                                                                                                                                                                                                              получиться ли если заменить это:
                                                                                                                                                                                                                                                                                                              if (!checkTextLength($akk, 2, 30)) {
                                                                                                                                                                                                                                                                                                              на это:
                                                                                                                                                                                                                                                                                                              if (preg_match("#^[0-9\-_]+$#",$akk)) {
                                                                                                                                                                                                                                                                                                              1. Игорь
                                                                                                                                                                                                                                                                                                                13 августа 2018, 14:19
                                                                                                                                                                                                                                                                                                                Добрый день.
                                                                                                                                                                                                                                                                                                                Подскажите пожалуйста, как сделать валидацию по цифрам?

                                                                                                                                                                                                                                                                                                                Есть блок:
                                                                                                                                                                                                                                                                                                                //валидация поля Аккаунт
                                                                                                                                                                                                                                                                                                                if (isset($_POST['akk'])) {
                                                                                                                                                                                                                                                                                                                    $akk = filter_var($_POST['akk'], FILTER_SANITIZE_STRING); // защита от XSS
                                                                                                                                                                                                                                                                                                                    if (!checkTextLength($akk, 2, 30)) { // проверка на количество символов в тексте
                                                                                                                                                                                                                                                                                                                        $data['akk'] = 'Поле <b>Аккаунт</b> содержит недопустимые символы символов';
                                                                                                                                                                                                                                                                                                                        $data['result'] = 'error';
                                                                                                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                                                                                                } else {
                                                                                                                                                                                                                                                                                                                    $data['akk'] = 'Поле <b>Аккаунт</b> не заполнено';
                                                                                                                                                                                                                                                                                                                    $data['result'] = 'error';
                                                                                                                                                                                                                                                                                                                }
                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                как реализовать чтобы можно было вводить только символы от 0 до 9 ?
                                                                                                                                                                                                                                                                                                                1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                  13 августа 2018, 14:52
                                                                                                                                                                                                                                                                                                                  Для валидации по цифрам можно использовать ctype_digit:
                                                                                                                                                                                                                                                                                                                  if (ctype_digit($akk)) {
                                                                                                                                                                                                                                                                                                                    echo 'Строка содержит только цифры';
                                                                                                                                                                                                                                                                                                                  }
                                                                                                                                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                                                                  1. Игорь
                                                                                                                                                                                                                                                                                                                    14 августа 2018, 08:13
                                                                                                                                                                                                                                                                                                                    Не работает((

                                                                                                                                                                                                                                                                                                                    делаю следующим образом:

                                                                                                                                                                                                                                                                                                                    //валидация поля Аккаунт
                                                                                                                                                                                                                                                                                                                    if (isset($_POST['akk'])) {
                                                                                                                                                                                                                                                                                                                        $akk = filter_var($_POST['akk'], FILTER_SANITIZE_STRING); // защита от XSS
                                                                                                                                                                                                                                                                                                                    if (ctype_digit($akk)) {
                                                                                                                                                                                                                                                                                                                      echo 'Строка содержит только цифры';
                                                                                                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                                                                                                    

                                                                                                                                                                                                                                                                                                                    указываю в строчке аккаунт буквы, ошибку не выдает. куда еще копнуть?)
                                                                                                                                                                                                                                                                                                                    1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                      14 августа 2018, 14:18
                                                                                                                                                                                                                                                                                                                      Конкретно в этом случае будет так:
                                                                                                                                                                                                                                                                                                                      if (isset($_POST['akk'])) {
                                                                                                                                                                                                                                                                                                                          $akk = filter_var($_POST['akk'], FILTER_SANITIZE_STRING);
                                                                                                                                                                                                                                                                                                                          if (!ctype_digit($akk)) {
                                                                                                                                                                                                                                                                                                                              $data['akk'] = 'Поле аккаунт пустое или содержит не только цифры';
                                                                                                                                                                                                                                                                                                                              $data['result'] = 'error';
                                                                                                                                                                                                                                                                                                                          }
                                                                                                                                                                                                                                                                                                                      } else {
                                                                                                                                                                                                                                                                                                                          $data['akk'] = 'Поле <b>Аккаунт</b> не заполнено';
                                                                                                                                                                                                                                                                                                                          $data['result'] = 'error';
                                                                                                                                                                                                                                                                                                                      }
                                                                                                                                                                                                                                                                                                                      1. Игорь
                                                                                                                                                                                                                                                                                                                        15 августа 2018, 07:52
                                                                                                                                                                                                                                                                                                                        Спасибо, Все работает.
                                                                                                                                                                                                                                                                                                                2. Назар Притула
                                                                                                                                                                                                                                                                                                                  12 августа 2018, 03:07
                                                                                                                                                                                                                                                                                                                  Здраствуйте. Делал добавление поля для ввода телефона по инструкции, но столкнулся с такой проблемой (скрин из gmail). Сталкивались с подобным? Валидация телефона работает отлично, никаких ошибок нету. Спасибо!

                                                                                                                                                                                                                                                                                                                  1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                    12 августа 2018, 04:09
                                                                                                                                                                                                                                                                                                                    Здравствуйте!
                                                                                                                                                                                                                                                                                                                    Скорее всего, пропустили 4 пункт:
                                                                                                                                                                                                                                                                                                                    // выполняем замену плейсхолдеров реальными значениями
                                                                                                                                                                                                                                                                                                                    $bodyMail = str_replace('%email.title%', MAIL_SUBJECT, $bodyMail);
                                                                                                                                                                                                                                                                                                                    $bodyMail = str_replace('%email.nameuser%', isset($name) ? $name : '-', $bodyMail);
                                                                                                                                                                                                                                                                                                                    $bodyMail = str_replace('%email.message%', isset($message) ? $message : '-', $bodyMail);
                                                                                                                                                                                                                                                                                                                    $bodyMail = str_replace('%email.emailuser%', isset($email) ? $email : '-', $bodyMail);
                                                                                                                                                                                                                                                                                                                    $bodyMail = str_replace('%email.date%', date('d.m.Y H:i'), $bodyMail);
                                                                                                                                                                                                                                                                                                                    $bodyMail = str_replace('%email.phone%', isset($phone) ? $phone : 'не указан', $bodyMail);
                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                    1. Назар Притула
                                                                                                                                                                                                                                                                                                                      12 августа 2018, 07:38
                                                                                                                                                                                                                                                                                                                      Все работает:) Я не пропустил 4 пункт, просто его нужно указывать строго в соответствии с приведенным вами выше кодом (т.е 4-ю строчку указать после всех плейсхолдеров)
                                                                                                                                                                                                                                                                                                                  2. Юрий Бахур
                                                                                                                                                                                                                                                                                                                    11 августа 2018, 22:37
                                                                                                                                                                                                                                                                                                                    Здраствуйте. Есть возможность сделать загрузку файлов пользователем необязательной? Но если пользователь все-таки решил загружать файлы, то оставить весь функционал загрузки файлов (валидацию, показ сообщений об ошибках и т.д)

                                                                                                                                                                                                                                                                                                                    Спасибо!
                                                                                                                                                                                                                                                                                                                    1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                      12 августа 2018, 04:20
                                                                                                                                                                                                                                                                                                                      Здраствуйте.
                                                                                                                                                                                                                                                                                                                      Для этого необходимо установить параметр existenceUploadsFile равным true:
                                                                                                                                                                                                                                                                                                                      var formFeedback = new ProcessForm({
                                                                                                                                                                                                                                                                                                                        idForm: 'feedbackForm',
                                                                                                                                                                                                                                                                                                                        existenceUploadsFile: true
                                                                                                                                                                                                                                                                                                                      });
                                                                                                                                                                                                                                                                                                                      formFeedback.init();
                                                                                                                                                                                                                                                                                                                      
                                                                                                                                                                                                                                                                                                                      1. Назар Притула
                                                                                                                                                                                                                                                                                                                        12 августа 2018, 07:45
                                                                                                                                                                                                                                                                                                                        Спасибо, все работает. А можно как-то сохранить при этом валидацию загрузчика файлов? Т.е чтобы можно было проверить введен ли допустимый формат и т.д. Спасибо!
                                                                                                                                                                                                                                                                                                                        1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                          13 августа 2018, 15:13
                                                                                                                                                                                                                                                                                                                          А сейчас как? Если он не корректный, то выводится сообщение и он не отправляется. Как нужно?
                                                                                                                                                                                                                                                                                                                    2. Nik
                                                                                                                                                                                                                                                                                                                      09 августа 2018, 22:36
                                                                                                                                                                                                                                                                                                                      Здравствуйте! Спасибо за форму. Скажите пожалуйста в чем может быть проблема, замучился. Ошибка не загружает файлы в форму. Увеличил размер загрузки в php и js. Вот лог ошибки
                                                                                                                                                                                                                                                                                                                      root\feedback\process\process.php on line 131
                                                                                                                                                                                                                                                                                                                      [09-Aug-2018 22:18:44 Europe/Moscow] PHP Warning: move_uploaded_file(): Unable to move 'C:\Windows\Temp\phpC4E3.tmp' to root\feedbackuploads/upload_5b6c93948df532.23419623.png'
                                                                                                                                                                                                                                                                                                                      1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                        10 августа 2018, 02:41
                                                                                                                                                                                                                                                                                                                        Здравствуйте! Посмотрите этот комментарий.
                                                                                                                                                                                                                                                                                                                      2. mupaharo@zep-hyr.com
                                                                                                                                                                                                                                                                                                                        08 августа 2018, 00:44
                                                                                                                                                                                                                                                                                                                        Изменил права доступа к файлу message.txt вроде заработало
                                                                                                                                                                                                                                                                                                                        1. mupaharo@zep-hyr.com
                                                                                                                                                                                                                                                                                                                          08 августа 2018, 00:36
                                                                                                                                                                                                                                                                                                                          Logi ошибки
                                                                                                                                                                                                                                                                                                                          C:\inetpub\vhosts\u0523220.plsk.regruhosting.ru\httpdocs\xn----7sbaa5cfegjhos1o.xn--p1ai\feedback\process\process.php on line 228
                                                                                                                                                                                                                                                                                                                          [08-Aug-2018 00:32:52 Europe/Moscow] PHP Warning: file_put_contents(C:\inetpub\vhosts\u0523220.plsk.regruhosting.ru\httpdocs\xn----7sbaa5cfegjhos1o.xn--p1ai\feedback/info/message.txt): failed to open stream: Permission denied in C:\inetpub\vhosts\u0523220.plsk.regruhosting.ru\httpdocs\xn----7sbaa5cfegjhos1o.xn--p1ai\feedback\process\process.php on line 228
                                                                                                                                                                                                                                                                                                                          1. mupaharo@zep-hyr.com
                                                                                                                                                                                                                                                                                                                            08 августа 2018, 00:27
                                                                                                                                                                                                                                                                                                                            При загрузке на хост все отобразилось, но появилась ошибка при отправке. Что делать?
                                                                                                                                                                                                                                                                                                                            1. mupaharo@zep-hyr.com
                                                                                                                                                                                                                                                                                                                              07 августа 2018, 23:54
                                                                                                                                                                                                                                                                                                                              Здравствуйте! Скажите пожалуйста в чем может быть причина, не отображается изображение капчи. Проверил файл captcha.php все норм директории ваши прописаны и для шрифта тоже. Но у меня все равно не отображено, ошибок никаких нет. Как проверить причину пока никак не могу понять.
                                                                                                                                                                                                                                                                                                                              1. Евгений
                                                                                                                                                                                                                                                                                                                                02 августа 2018, 14:16
                                                                                                                                                                                                                                                                                                                                Здравствуйте. После отправки формы в консоли появляется ошибка:
                                                                                                                                                                                                                                                                                                                                main.js:303 Uncaught TypeError: Cannot read property 'indexOf' of undefined
                                                                                                                                                                                                                                                                                                                                at ProcessForm.refreshCaptcha (main.js:303)
                                                                                                                                                                                                                                                                                                                                at Object.success (main.js:233)
                                                                                                                                                                                                                                                                                                                                at u (jquery.min.js:2)
                                                                                                                                                                                                                                                                                                                                at Object.fireWith [as resolveWith] (jquery.min.js:2)
                                                                                                                                                                                                                                                                                                                                at k (jquery.min.js:2)
                                                                                                                                                                                                                                                                                                                                at XMLHttpRequest.(jquery.min.js:2)
                                                                                                                                                                                                                                                                                                                                Что за ошибка?
                                                                                                                                                                                                                                                                                                                                И еще вопрос. Я использую несколько форм обратной связи, но только в одной я использую капчу. При добавлении блока валидации капчи перестают работать все формы. Если убрать валидацию, то всё работает. Как это исправить?
                                                                                                                                                                                                                                                                                                                                1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                  04 августа 2018, 11:15
                                                                                                                                                                                                                                                                                                                                  Здравствуйте.
                                                                                                                                                                                                                                                                                                                                  Вам нужно добавить ключ existenceCaptcha со значением false при инициализации формы:
                                                                                                                                                                                                                                                                                                                                  var formFeedback = new ProcessForm({
                                                                                                                                                                                                                                                                                                                                    idForm: 'feedbackForm',
                                                                                                                                                                                                                                                                                                                                    existenceCaptcha: false
                                                                                                                                                                                                                                                                                                                                  });
                                                                                                                                                                                                                                                                                                                                  1. Евгений
                                                                                                                                                                                                                                                                                                                                    07 августа 2018, 10:48
                                                                                                                                                                                                                                                                                                                                    Так в том-то и дело, что ключ добавлен!
                                                                                                                                                                                                                                                                                                                                    1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                      07 августа 2018, 16:35
                                                                                                                                                                                                                                                                                                                                      Поправил этот момент в файле main.js.
                                                                                                                                                                                                                                                                                                                                2. Константин
                                                                                                                                                                                                                                                                                                                                  01 августа 2018, 16:39
                                                                                                                                                                                                                                                                                                                                  Александр, добрый день!
                                                                                                                                                                                                                                                                                                                                  Если Вам не сложно сделайте, пожалуйста, готовый вариант обратной формы с reCAPTCHA и с дополнительным полем для ввода мобильного. Я новичок в этом деле, ничего не получается следуя вашим рекомендациям. Заранее Вам благодарен!
                                                                                                                                                                                                                                                                                                                                  1. Слава
                                                                                                                                                                                                                                                                                                                                    31 июля 2018, 18:56
                                                                                                                                                                                                                                                                                                                                    Добрый день! Помогите пожалуйста разобраться!
                                                                                                                                                                                                                                                                                                                                    Письмо не доходит. В консоли ошибка:
                                                                                                                                                                                                                                                                                                                                    XML Parsing Error: unclosed token
                                                                                                                                                                                                                                                                                                                                    Location: localhost:8080/HTML/feedback/process/process.php
                                                                                                                                                                                                                                                                                                                                    Line Number 1, Column 1: process.php:1:1
                                                                                                                                                                                                                                                                                                                                    [Show/hide message details.] SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data[Learn More] main.js:215:24
                                                                                                                                                                                                                                                                                                                                    1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                      01 августа 2018, 14:16
                                                                                                                                                                                                                                                                                                                                      Добрый! Посмотрите в этом комментарии. Там приведена инструкия.
                                                                                                                                                                                                                                                                                                                                      1. Слава
                                                                                                                                                                                                                                                                                                                                        01 августа 2018, 16:57
                                                                                                                                                                                                                                                                                                                                        Спасибо! Ответ нашелся в другом, причиной моих мучений было то, что я это запускал на tomcat, а он не поддерживает php. Сейчас запустил на Apache, но тоже не гладко прошло, не работает капча, когда ее убераю, то ловлю HTTP 500 неизвестно откуда.
                                                                                                                                                                                                                                                                                                                                        1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                          02 августа 2018, 14:08
                                                                                                                                                                                                                                                                                                                                          Необходимо проверить какой ответ возвращает капча.
                                                                                                                                                                                                                                                                                                                                          1. Слава
                                                                                                                                                                                                                                                                                                                                            02 августа 2018, 16:05
                                                                                                                                                                                                                                                                                                                                            На капчу забил из-за ненадобности. Остальные ошибки посмотрел в error log в apatche. Все быстро гуглится, в основном надо было добавить расширения разные для php. Единственное пришлось права менять у директории /info/, чтобы можно было записывать в message.txt. Правда теперь при каждых изменениях файлов приходится пароль вбивать. Ещё раз спасибо за отличную форму!
                                                                                                                                                                                                                                                                                                                                    2. Евгений
                                                                                                                                                                                                                                                                                                                                      17 июля 2018, 20:37
                                                                                                                                                                                                                                                                                                                                      Здравствуйте! Форма работает. Спасибо за скрипт. Но все время отображается «Форма успешно отправлена.Нажмите на ссылку, чтобы отправить ещё одно сообщение.»
                                                                                                                                                                                                                                                                                                                                      1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                        19 июля 2018, 15:47
                                                                                                                                                                                                                                                                                                                                        Здравствуйте! А какой вариант формы не работает?
                                                                                                                                                                                                                                                                                                                                        1. Евгений
                                                                                                                                                                                                                                                                                                                                          19 июля 2018, 16:32
                                                                                                                                                                                                                                                                                                                                          Я уже разобрался. Подскажите пожалуйста, как сделать так, чтобы в сообщении выводилось с какой именно формы было отправлено? Заранее спасибо.
                                                                                                                                                                                                                                                                                                                                          1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                            19 июля 2018, 16:45
                                                                                                                                                                                                                                                                                                                                            Для этого можно использовать скрытое поле. Его можно добавить вручную в форму или выполнять это программно.
                                                                                                                                                                                                                                                                                                                                            Вот несколько примеров:
                                                                                                                                                                                                                                                                                                                                            itchief.ru/lessons/php/feedback-form-for-website#comment-6141
                                                                                                                                                                                                                                                                                                                                            itchief.ru/lessons/php/feedback-form-for-website#comment-5024
                                                                                                                                                                                                                                                                                                                                      2. nik
                                                                                                                                                                                                                                                                                                                                        28 июня 2018, 15:07
                                                                                                                                                                                                                                                                                                                                        Я извиняюсь за навязчивость, лицензия mit предполагает безвозмездное использование, за исключением удаления файла LICENSE в своем проекте?
                                                                                                                                                                                                                                                                                                                                        1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                          28 июня 2018, 15:54
                                                                                                                                                                                                                                                                                                                                          Да, это единственное требование (сохранение информации об авторском праве и условия лицензции).
                                                                                                                                                                                                                                                                                                                                        2. nik
                                                                                                                                                                                                                                                                                                                                          28 июня 2018, 13:21
                                                                                                                                                                                                                                                                                                                                          Здравствуйте!
                                                                                                                                                                                                                                                                                                                                          Скажите пожалуйста, а данный код формы обратной связи я могу использовать в коммерческих целях?
                                                                                                                                                                                                                                                                                                                                          1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                            28 июня 2018, 14:05
                                                                                                                                                                                                                                                                                                                                            Да, можно. Данный проект распространяется под лицензией MIT.
                                                                                                                                                                                                                                                                                                                                            Другие продукты, включенные в состав данной формы (jQuery, Bootstrap, PHPMailer) в соответствии с их лицензиями.
                                                                                                                                                                                                                                                                                                                                          2. Павел В
                                                                                                                                                                                                                                                                                                                                            07 июня 2018, 13:25
                                                                                                                                                                                                                                                                                                                                            Александр, добрый день! Я писал вам на почту, но думаю сюда можно также опубликовать, кому 100% будет полезно.!

                                                                                                                                                                                                                                                                                                                                            Вопрос в слд.:
                                                                                                                                                                                                                                                                                                                                            мне нужно чтобы в сообщение которое приходит админу писалось с какой страницы была отправлена форма. По искал тут в коментах и кое-что похожее нащешл. и я так сделал:

                                                                                                                                                                                                                                                                                                                                            1. Добавить скрипт после подключения библиотеки jQuery:
                                                                                                                                                                                                                                                                                                                                            <script>
                                                                                                                                                                                                                                                                                                                                            $(function(){
                                                                                                                                                                                                                                                                                                                                              var pagetitle = $('h1').text();
                                                                                                                                                                                                                                                                                                                                              // feedbackForm - id формы
                                                                                                                                                                                                                                                                                                                                              $('#feedbackForm').prepend('<input type="hidden" name="pagetitle" value="' + pagetitle + '">');
                                                                                                                                                                                                                                                                                                                                            });
                                                                                                                                                                                                                                                                                                                                            </script>
                                                                                                                                                                                                                                                                                                                                            2. В process.php добавить в соответствующие места:
                                                                                                                                                                                                                                                                                                                                            //...
                                                                                                                                                                                                                                                                                                                                            //получение и очистка значения pagetitle
                                                                                                                                                                                                                                                                                                                                            if (isset($_POST['pagetitle'])) {
                                                                                                                                                                                                                                                                                                                                              $pagetitle = filter_var($_POST['pagetitle'], FILTER_SANITIZE_STRING);
                                                                                                                                                                                                                                                                                                                                            }
                                                                                                                                                                                                                                                                                                                                            //...
                                                                                                                                                                                                                                                                                                                                            $bodyMail = str_replace('%email.pagetitle%', isset($pagetitle) ? $pagetitle : '-', $bodyMail);
                                                                                                                                                                                                                                                                                                                                            //...
                                                                                                                                                                                                                                                                                                                                            3. В email.tpl:
                                                                                                                                                                                                                                                                                                                                            Страница, с которой было отправлено сообщение:
                                                                                                                                                                                                                                                                                                                                            <b>%email.pagetitle%</b>
                                                                                                                                                                                                                                                                                                                                            — В итоге в письме пишет с какой стр. было отправлено.
                                                                                                                                                                                                                                                                                                                                            А как сделать чтобы оно было кликабельным, ввиде ссылки на эту стр.?
                                                                                                                                                                                                                                                                                                                                            1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                              07 июня 2018, 14:32
                                                                                                                                                                                                                                                                                                                                              Добрый!
                                                                                                                                                                                                                                                                                                                                              Необходимо добавить ещё одно скрытое поле, содержащее URL:
                                                                                                                                                                                                                                                                                                                                              var url = location.protocol+'//'+location.hostname+location.pathname;
                                                                                                                                                                                                                                                                                                                                              // или так (если нужен ещё и хеш)
                                                                                                                                                                                                                                                                                                                                              // var url = location.href;
                                                                                                                                                                                                                                                                                                                                              $('#feedbackForm').prepend('<input type="hidden" name="url" value="' + url + '">');
                                                                                                                                                                                                                                                                                                                                              });
                                                                                                                                                                                                                                                                                                                                              
                                                                                                                                                                                                                                                                                                                                              В process.php добавить:
                                                                                                                                                                                                                                                                                                                                              //...
                                                                                                                                                                                                                                                                                                                                              //получение и очистка значения pagetitle
                                                                                                                                                                                                                                                                                                                                              if (isset($_POST['url'])) {
                                                                                                                                                                                                                                                                                                                                                $url = filter_var($_POST['url'], FILTER_SANITIZE_STRING);
                                                                                                                                                                                                                                                                                                                                              }
                                                                                                                                                                                                                                                                                                                                              //...
                                                                                                                                                                                                                                                                                                                                              $bodyMail = str_replace('%email.url%', isset($url) ? $url : '-', $bodyMail);
                                                                                                                                                                                                                                                                                                                                              //...
                                                                                                                                                                                                                                                                                                                                              
                                                                                                                                                                                                                                                                                                                                              3. В email.tpl:
                                                                                                                                                                                                                                                                                                                                              Страница, с которой было отправлено сообщение:
                                                                                                                                                                                                                                                                                                                                              <a href="%email.url%">%email.pagetitle%</a>
                                                                                                                                                                                                                                                                                                                                              
                                                                                                                                                                                                                                                                                                                                              1. Daser
                                                                                                                                                                                                                                                                                                                                                03 июня 2019, 10:30
                                                                                                                                                                                                                                                                                                                                                Добрый день, Александр! Форма отличная, поставил к себе на сайт. Возник один нюанс: не уходит Page Title в сообщении. Добавил все как написали. Кажется что не так или не туда вставляю код в первом шаге.

                                                                                                                                                                                                                                                                                                                                                Вставляю перед закрывающим тегом body следующий код:

                                                                                                                                                                                                                                                                                                                                                <script src="/feedback/vendors/jquery/jquery-3.3.1.min.js"></script>
                                                                                                                                                                                                                                                                                                                                                    <script>
                                                                                                                                                                                                                                                                                                                                                $(function(){
                                                                                                                                                                                                                                                                                                                                                  var pagetitle = $('h1').text();
                                                                                                                                                                                                                                                                                                                                                  // feedbackForm - id формы
                                                                                                                                                                                                                                                                                                                                                  $('form1').prepend('<input type="hidden" name="pagetitle" value="' + pagetitle + '">');
                                                                                                                                                                                                                                                                                                                                                  var url = location.protocol+'//'+location.hostname+location.pathname;
                                                                                                                                                                                                                                                                                                                                                // или так (если нужен ещё и хеш)
                                                                                                                                                                                                                                                                                                                                                // var url = location.href;
                                                                                                                                                                                                                                                                                                                                                $('form1').prepend('<input type="hidden" name="url" value="' + url + '">');
                                                                                                                                                                                                                                                                                                                                                });
                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                </script>
                                                                                                                                                                                                                                                                                                                                                  <script src="/feedback/vendors/bootstrap/js/bootstrap.bundle.min.js"></script>
                                                                                                                                                                                                                                                                                                                                                  <script src="/feedback/js/process-forms.js"></script>
                                                                                                                                                                                                                                                                                                                                                  <script src="/feedback/js/main.js"></script>
                                                                                                                                                                                                                                                                                                                                                В чем может быть проблема?
                                                                                                                                                                                                                                                                                                                                                1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                  03 июня 2019, 14:11
                                                                                                                                                                                                                                                                                                                                                  Добрый!
                                                                                                                                                                                                                                                                                                                                                  Выполняйте всё по шагам, и проверяйте свои действия после каждого выполненного шага.
                                                                                                                                                                                                                                                                                                                                                  1. Добавьте на страницу скрипт:
                                                                                                                                                                                                                                                                                                                                                  <script>
                                                                                                                                                                                                                                                                                                                                                    var title = $('title').text();
                                                                                                                                                                                                                                                                                                                                                    // feedback-form - это id формы
                                                                                                                                                                                                                                                                                                                                                    $('#feedback-form').prepend('<input type="hidden" name="title" value="' + title + '">');
                                                                                                                                                                                                                                                                                                                                                  </script>
                                                                                                                                                                                                                                                                                                                                                  После этого проверьте добавился ли этот элемент в форму. В браузере, например, Chrome это можно выполнить посредством "Инструментов разработчика" на вкладке Elements.
                                                                                                                                                                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                                                                                                  2. Добавьте вышепреведённый код в process.php и email.tpl. Но, т.к. поле назвали title, то вместо url используйте title.
                                                                                                                                                                                                                                                                                                                                                  1. Daser
                                                                                                                                                                                                                                                                                                                                                    03 июня 2019, 15:38
                                                                                                                                                                                                                                                                                                                                                    Спасибо, Александр! Все получилось
                                                                                                                                                                                                                                                                                                                                                2. Павел В
                                                                                                                                                                                                                                                                                                                                                  07 июня 2018, 16:08
                                                                                                                                                                                                                                                                                                                                                  Александр, огромное спасибо! Как всегда все идеально работает!!!
                                                                                                                                                                                                                                                                                                                                              2. Алексей
                                                                                                                                                                                                                                                                                                                                                04 апреля 2018, 10:59
                                                                                                                                                                                                                                                                                                                                                Подскажите, пожалуйста как можно убрать всплывающие блоки в правом верхнем углу экрана, которые возникают при незаполненных полях формы (или ошибках в заполнении)?
                                                                                                                                                                                                                                                                                                                                                И не могли бы Вы поподробнее рассказать что нужно сделать, чтобы прикрепленные файлы поступали на почту, но не сохранялись бы (не заполняли) папку «uploads» на сервере.
                                                                                                                                                                                                                                                                                                                                                Заранее Вам благодарен.
                                                                                                                                                                                                                                                                                                                                                1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                  05 апреля 2018, 13:55
                                                                                                                                                                                                                                                                                                                                                  В этом примере сообщения не отображаются с помощью всплывающих сообщений, а отображаются рядом с формой. Можете этот пример взять за основу.
                                                                                                                                                                                                                                                                                                                                                  Для очистки папки uploads, можно написать простенький php-скриптик и запускать его например, с помощью cron раз в неделю.
                                                                                                                                                                                                                                                                                                                                                2. Алексей
                                                                                                                                                                                                                                                                                                                                                  04 апреля 2018, 07:16
                                                                                                                                                                                                                                                                                                                                                  Здравствуйте.
                                                                                                                                                                                                                                                                                                                                                  Форма супер!!!
                                                                                                                                                                                                                                                                                                                                                  Подскажите, пожалуйста, как можно адаптировать скрипт для кодировки windows-1251
                                                                                                                                                                                                                                                                                                                                                  1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                    05 апреля 2018, 13:41
                                                                                                                                                                                                                                                                                                                                                    Здравствуйте! Спасибо!
                                                                                                                                                                                                                                                                                                                                                    Изменить кодировку файлов можно с помощью любого текстового редактора, в котором присутствует эта возможность. Например, в Notepad++ это можно сделать с помощью Encoding -> Convert to ANSI.
                                                                                                                                                                                                                                                                                                                                                  2. Николай
                                                                                                                                                                                                                                                                                                                                                    18 февраля 2018, 16:58
                                                                                                                                                                                                                                                                                                                                                    Все отлично, но почему в последней версии не ReCaptcha? С ней удобнее же. А то по несколько раз приходится вводить буквы, так как все время неправильно. Можно ли вернуть рекапчу? :)
                                                                                                                                                                                                                                                                                                                                                    1. Sergey
                                                                                                                                                                                                                                                                                                                                                      15 февраля 2018, 16:14
                                                                                                                                                                                                                                                                                                                                                      Здравствуйте, нашел хороший код для отправки файлов (с прикреплением файлов) код сам работает но почему то не отправляет прикрепленные файлы… Посмотрите пожалуйста я думаю что где то ошибка в коде… С уважением Сергей…

                                                                                                                                                                                                                                                                                                                                                      {element label=«ФИО» type=«text» class=«inputtext» required=«required» error=«Введите ваше имя» /}

                                                                                                                                                                                                                                                                                                                                                      {element label=«Телефон» type=«text» class=«inputtext» required=«required» error=«Введите ваше имя» /}

                                                                                                                                                                                                                                                                                                                                                      {element label=«Email адрес » type=«text» class=«inputtext» required=«required» error=«Введите ваше имя» /}

                                                                                                                                                                                                                                                                                                                                                      Выберите файл для загрузки :


                                                                                                                                                                                                                                                                                                                                                      {element label=«Ваше сообщение» type=«textarea» class=«inputtext» required=«required» error=«Введите ваше сообщение» /}{element type=«captcha» class=«inputtext» width=«220» height=«50» label=«Проверочный код» /}{element type=«submit» value=«Отправить сообщение» /}
                                                                                                                                                                                                                                                                                                                                                      1. yakoffka
                                                                                                                                                                                                                                                                                                                                                        07 февраля 2018, 14:26
                                                                                                                                                                                                                                                                                                                                                        Здравствуйте, Александр!
                                                                                                                                                                                                                                                                                                                                                        Спасибо за скрипт.
                                                                                                                                                                                                                                                                                                                                                        Никак не получается прикрутить Dropzone…
                                                                                                                                                                                                                                                                                                                                                        Поглядите, пожалуйста, что я делаю не так, если Вам не сложно.
                                                                                                                                                                                                                                                                                                                                                        Для быстрой смены режимов прикрепления файлов в самом начале config.php вставил:
                                                                                                                                                                                                                                                                                                                                                        	$use_dropzone=TRUE;
                                                                                                                                                                                                                                                                                                                                                        	// $use_dropzone=FALSE;
                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                        Ошибка наверняка в js. мне бы увидеть что нибудь в массиве $_FILES['attachment'], а дальше я сам. ~ третий день сижу…
                                                                                                                                                                                                                                                                                                                                                        ЗЫ И еще содержимое инпута name=«attachment[]» не очищается, но эта проблема скорее всего решится при решении первой.
                                                                                                                                                                                                                                                                                                                                                        ЗЗЫ Eсли нужен доступ к ftp — скажите, куда скинуть.
                                                                                                                                                                                                                                                                                                                                                        1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                          08 февраля 2018, 15:18
                                                                                                                                                                                                                                                                                                                                                          Здравствуйте!
                                                                                                                                                                                                                                                                                                                                                          Посмотрите ответ в этом комментарии.
                                                                                                                                                                                                                                                                                                                                                          1. yakoffka
                                                                                                                                                                                                                                                                                                                                                            08 февраля 2018, 16:12
                                                                                                                                                                                                                                                                                                                                                            Здравствуйте, Александр!
                                                                                                                                                                                                                                                                                                                                                            Именно указанным Вами комментарием я и руководствовался. В меру понимания.

                                                                                                                                                                                                                                                                                                                                                            в index.php сделал замену:
                                                                                                                                                                                                                                                                                                                                                            вместо
                                                                                                                                                                                                                                                                                                                                                            <div class='form-group'>
                                                                                                                                                                                                                                                                                                                                                            	<p style='font-weight: 700; margin-bottom: 0;'>Прикрепить к сообщению файлы (до <span
                                                                                                                                                                                                                                                                                                                                                            		class='countFiles'></span>):</p>
                                                                                                                                                                                                                                                                                                                                                            	<p class='small success'>jpg, jpeg, bmp, gif, png (до 512 Кбайт)</p>
                                                                                                                                                                                                                                                                                                                                                            	<div class='attachments'>
                                                                                                                                                                                                                                                                                                                                                            		<input type='file' name='attachment[]'>
                                                                                                                                                                                                                                                                                                                                                            		<p style='margin-top: 3px; margin-bottom: 3px; color: #ff0000;'></p>
                                                                                                                                                                                                                                                                                                                                                            	</div>
                                                                                                                                                                                                                                                                                                                                                            </div>
                                                                                                                                                                                                                                                                                                                                                            вставил
                                                                                                                                                                                                                                                                                                                                                            <div class='form-group' id='mydropzone'>
                                                                                                                                                                                                                                                                                                                                                            	<input type='file' name='attachment[]' style='display: none !important;'>
                                                                                                                                                                                                                                                                                                                                                            </div>
                                                                                                                                                                                                                                                                                                                                                            в main.js: вместо
                                                                                                                                                                                                                                                                                                                                                            if (this.existenceUploadsFile) { // добавление новых элементов input с type="file" и изменение существующих
                                                                                                                                                                                                                                                                                                                                                            	$('#' + this.idForm + ' .countFiles').text(this.countFiles);
                                                                                                                                                                                                                                                                                                                                                            	// добавление нового элемента input с type="file"
                                                                                                                                                                                                                                                                                                                                                            	$(document).on('change', '#' + this.idForm + ' input[name="attachment[]"]', $.proxy(this.changeInputFile, this));
                                                                                                                                                                                                                                                                                                                                                            }
                                                                                                                                                                                                                                                                                                                                                            вставил
                                                                                                                                                                                                                                                                                                                                                            var isset_mydropzone=document.getElementById('mydropzone');
                                                                                                                                                                                                                                                                                                                                                            if(isset_mydropzone){
                                                                                                                                                                                                                                                                                                                                                            	Dropzone.autoDiscover=false;
                                                                                                                                                                                                                                                                                                                                                            	$('#mydropzone').addClass('dropzone');
                                                                                                                                                                                                                                                                                                                                                            	var mydropzone=new Dropzone('#mydropzone',{
                                                                                                                                                                                                                                                                                                                                                            		paramName:'attachment[]',method:'files',url:'random.php',autoProcessQueue:false,dictDefaultMessage:'для добавления вложений кликните здесь или просто перетащите файлы сюда<span class="glyphicon form-control-feedback glyphicon-paperclip"></span>',addRemoveLinks:true,dictRemoveFile:'Удалить'});
                                                                                                                                                                                                                                                                                                                                                            }
                                                                                                                                                                                                                                                                                                                                                            Пытался узнать в чем дело, но сподкнулся на том, что вывожу массив $_FILES в process.php (перед валидацией файлов) — а он пуст: $_FILES=Array().

                                                                                                                                                                                                                                                                                                                                                            Вот этого, собственно, решительно не могу понять.
                                                                                                                                                                                                                                                                                                                                                            1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                              08 февраля 2018, 16:32
                                                                                                                                                                                                                                                                                                                                                              Там есть ссылка на готовый пример. Можете в нём посмотреть как всё реализовано.
                                                                                                                                                                                                                                                                                                                                                              1. yakoffka
                                                                                                                                                                                                                                                                                                                                                                12 февраля 2018, 17:51
                                                                                                                                                                                                                                                                                                                                                                Александр! Я понимаю, что в чужом коде ковыряться некомильфо, но я действительно в тупике.
                                                                                                                                                                                                                                                                                                                                                                Прошу Вас, подскажите каким образом необходимо реализовать прикрепление файлов из dropzone?
                                                                                                                                                                                                                                                                                                                                                                Что я делаю не так?
                                                                                                                                                                                                                                                                                                                                                                1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                  13 марта 2018, 16:30
                                                                                                                                                                                                                                                                                                                                                                  Добрый день!
                                                                                                                                                                                                                                                                                                                                                                  Доступна первая тестовая версия с dropzone. Расположена она на гитхабе по этому адресу. Всё остальное (статья, доработка формы и др.) ещё впереди.
                                                                                                                                                                                                                                                                                                                                                                  1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                    13 февраля 2018, 08:48
                                                                                                                                                                                                                                                                                                                                                                    Представлю ответ, но уже в отдельном топике и на Bootstrap 4. Кроме этого в нём же опишу вариант, с загрузкой файлов прямо на Яндекс Диск.
                                                                                                                                                                                                                                                                                                                                                                  2. yakoffka
                                                                                                                                                                                                                                                                                                                                                                    08 февраля 2018, 19:22
                                                                                                                                                                                                                                                                                                                                                                    Я смотрел, более того, пользовал ту версию.
                                                                                                                                                                                                                                                                                                                                                                    Но ведь эта версия скрипта новее и лучше. Хотелось бы и сюда прикрутить dropzone.
                                                                                                                                                                                                                                                                                                                                                                    Присмотрелся внимательнее — нашел еще место, нуждающееся в правке.

                                                                                                                                                                                                                                                                                                                                                                    в script.js (предыдущей версии скрипта) начиная с 93 строки идет добавление прикрепленных файлов:
                                                                                                                                                                                                                                                                                                                                                                    // добавить в formData файлы
                                                                                                                                                                                                                                                                                                                                                                    var fileList = mydropzone.files;
                                                                                                                                                                                                                                                                                                                                                                    // если элемент не содержит файлов, то перейти к следующей
                                                                                                                                                                                                                                                                                                                                                                    if (fileList.length > 0) {
                                                                                                                                                                                                                                                                                                                                                                    	var count = fileList.length;
                                                                                                                                                                                                                                                                                                                                                                    	for (var i = 0; i < count; i++) {
                                                                                                                                                                                                                                                                                                                                                                    		formData.append('images[]', fileList[i], fileList[i].name);
                                                                                                                                                                                                                                                                                                                                                                    	}
                                                                                                                                                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                    чувствую, что вот этот кусок кода в main.js необходимо преобразовать:
                                                                                                                                                                                                                                                                                                                                                                    // disabled и enabled изображений для FormData
                                                                                                                                                                                                                                                                                                                                                                    ProcessForm.prototype.changeStateImages=function (state) {
                                                                                                                                                                                                                                                                                                                                                                    	if (!this.existenceUploadsFile) {
                                                                                                                                                                                                                                                                                                                                                                    		return;
                                                                                                                                                                                                                                                                                                                                                                    	}
                                                                                                                                                                                                                                                                                                                                                                    	var submitForm=document.getElementById(this.idForm);
                                                                                                                                                                                                                                                                                                                                                                    	var files=$(submitForm).find('[name="attachment[]"]');
                                                                                                                                                                                                                                                                                                                                                                    	for (var i=0; i < files.length; i++) {
                                                                                                                                                                                                                                                                                                                                                                    		// получить список файлов элемента input с type="file"
                                                                                                                                                                                                                                                                                                                                                                    		var fileList=files[i].files;
                                                                                                                                                                                                                                                                                                                                                                    		// если элемент не содержит файлов, то перейти к следующему
                                                                                                                                                                                                                                                                                                                                                                    		if (fileList.length > 0) {
                                                                                                                                                                                                                                                                                                                                                                    			// получить первый файл из списка
                                                                                                                                                                                                                                                                                                                                                                    			var file=fileList[0];
                                                                                                                                                                                                                                                                                                                                                                    			// проверить тип файла и размер
                                                                                                                                                                                                                                                                                                                                                                    			if (!((this.validateFileExtension(file.name)) && (file.size < this.maxSizeFile))) {
                                                                                                                                                                                                                                                                                                                                                                    				$(files[i]).prop('disabled', state);
                                                                                                                                                                                                                                                                                                                                                                    			}
                                                                                                                                                                                                                                                                                                                                                                    		} else {
                                                                                                                                                                                                                                                                                                                                                                    			$(files[i]).prop('disabled', state);
                                                                                                                                                                                                                                                                                                                                                                    		}
                                                                                                                                                                                                                                                                                                                                                                    	}
                                                                                                                                                                                                                                                                                                                                                                    };
                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                    вот на что меня хватило:
                                                                                                                                                                                                                                                                                                                                                                    // disabled и enabled изображений для FormData
                                                                                                                                                                                                                                                                                                                                                                    ProcessForm.prototype.changeStateImages=function (state) {
                                                                                                                                                                                                                                                                                                                                                                    	if (!this.existenceUploadsFile) {
                                                                                                                                                                                                                                                                                                                                                                    		return;
                                                                                                                                                                                                                                                                                                                                                                    	}
                                                                                                                                                                                                                                                                                                                                                                    	var submitForm=document.getElementById(this.idForm);
                                                                                                                                                                                                                                                                                                                                                                    	var files=$(submitForm).find('[name="attachment[]"]');
                                                                                                                                                                                                                                                                                                                                                                    	for (var i=0; i < files.length; i++) {
                                                                                                                                                                                                                                                                                                                                                                    		// получить список файлов элемента input с type="file"
                                                                                                                                                                                                                                                                                                                                                                    		// var fileList=files[i].files;
                                                                                                                                                                                                                                                                                                                                                                    		var fileList = mydropzone.files;
                                                                                                                                                                                                                                                                                                                                                                    		// если элемент не содержит файлов, то перейти к следующему
                                                                                                                                                                                                                                                                                                                                                                    			/*if (fileList.length > 0) {
                                                                                                                                                                                                                                                                                                                                                                    			// получить первый файл из списка
                                                                                                                                                                                                                                                                                                                                                                    			var file=fileList[0];
                                                                                                                                                                                                                                                                                                                                                                    			// проверить тип файла и размер
                                                                                                                                                                                                                                                                                                                                                                    			if (!((this.validateFileExtension(file.name)) && (file.size < this.maxSizeFile))) {
                                                                                                                                                                                                                                                                                                                                                                    				$(files[i]).prop('disabled', state);
                                                                                                                                                                                                                                                                                                                                                                    			}
                                                                                                                                                                                                                                                                                                                                                                    		} else {
                                                                                                                                                                                                                                                                                                                                                                    			$(files[i]).prop('disabled', state);
                                                                                                                                                                                                                                                                                                                                                                    		}*/ 
                                                                                                                                                                                                                                                                                                                                                                    		if (fileList.length > 0) {
                                                                                                                                                                                                                                                                                                                                                                    			var count = fileList.length;
                                                                                                                                                                                                                                                                                                                                                                    			for (var i = 0; i < count; i++) {
                                                                                                                                                                                                                                                                                                                                                                    				formData.append('images[]', fileList[i], fileList[i].name);
                                                                                                                                                                                                                                                                                                                                                                    			}
                                                                                                                                                                                                                                                                                                                                                                    		}
                                                                                                                                                                                                                                                                                                                                                                    	}
                                                                                                                                                                                                                                                                                                                                                                    };
                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                    но, как и следовало ожидать — не работает…
                                                                                                                                                                                                                                                                                                                                                                    TypeError: fileList is undefined
                                                                                                                                                                                                                                                                                                                                                                    не силен я в js…
                                                                                                                                                                                                                                                                                                                                                                    в таком состоянии скрипт выложен здесь.

                                                                                                                                                                                                                                                                                                                                                                    Помогите, пожалуйста, с правкой этого куска кода.
                                                                                                                                                                                                                                                                                                                                                                    1. yakoffka
                                                                                                                                                                                                                                                                                                                                                                      08 февраля 2018, 22:17
                                                                                                                                                                                                                                                                                                                                                                      присмотрелся — нашел вложенный цикл (лишний) и заменил 'images[]' на 'attachment[]', но все равно консоль кажет 'TypeError: fileList is undefined'… там же на 6 строке идет присвоение переменной??
                                                                                                                                                                                                                                                                                                                                                                      // disabled и enabled изображений для FormData
                                                                                                                                                                                                                                                                                                                                                                      ProcessForm.prototype.changeStateImages=function (state) {
                                                                                                                                                                                                                                                                                                                                                                       if (!this.existenceUploadsFile) {
                                                                                                                                                                                                                                                                                                                                                                        return;
                                                                                                                                                                                                                                                                                                                                                                       }
                                                                                                                                                                                                                                                                                                                                                                       var fileList = mydropzone.files;
                                                                                                                                                                                                                                                                                                                                                                       if (fileList.length > 0) {
                                                                                                                                                                                                                                                                                                                                                                        var count = fileList.length;
                                                                                                                                                                                                                                                                                                                                                                        for (var i = 0; i < count; i++) {
                                                                                                                                                                                                                                                                                                                                                                         formData.append('attachment[]', fileList[i], fileList[i].name);
                                                                                                                                                                                                                                                                                                                                                                        }
                                                                                                                                                                                                                                                                                                                                                                       }
                                                                                                                                                                                                                                                                                                                                                                      };
                                                                                                                                                                                                                                                                                                                                                                      
                                                                                                                                                                                                                                                                                                                                                            2. Алексей
                                                                                                                                                                                                                                                                                                                                                              01 февраля 2018, 22:34
                                                                                                                                                                                                                                                                                                                                                              Александр, Добрый вечер.
                                                                                                                                                                                                                                                                                                                                                              Помогите пожалуйста, возникла ошибка, при отправки формы
                                                                                                                                                                                                                                                                                                                                                              VM1082:1 Uncaught SyntaxError: Unexpected number in JSON at position 4
                                                                                                                                                                                                                                                                                                                                                              at JSON.parse ()
                                                                                                                                                                                                                                                                                                                                                              at Object.success (main.js:245)
                                                                                                                                                                                                                                                                                                                                                              at i (jquery-3.2.1.min.js:2)
                                                                                                                                                                                                                                                                                                                                                              at Object.fireWith [as resolveWith] (jquery-3.2.1.min.js:2)
                                                                                                                                                                                                                                                                                                                                                              at A (jquery-3.2.1.min.js:4)
                                                                                                                                                                                                                                                                                                                                                              at XMLHttpRequest.(jquery-3.2.1.min.js:4)

                                                                                                                                                                                                                                                                                                                                                              Содержимое строки: data = JSON.parse(data);
                                                                                                                                                                                                                                                                                                                                                              Сама форма уходит на почту, всё как и должно, но не появляется окно что успешна отправлена, как исправить ошибку?
                                                                                                                                                                                                                                                                                                                                                              1. Сергей
                                                                                                                                                                                                                                                                                                                                                                31 января 2018, 11:27
                                                                                                                                                                                                                                                                                                                                                                Александр, вопрос такой уже задавали, поставил форму «из коробки» yadi.sk/d/YcF2Qwwf3KxxQy,
                                                                                                                                                                                                                                                                                                                                                                все подключил как нужно, скриптов на странице не много, конфликтов нет, консоль без Errors. Форма кликабельна, но 1. не обновляется каптча, 2. не наживается кнопка отправить сообщение. Как это выглядит см.файл. Замечу, что пробовал ставить старую версию ту, что с verify.php в корне папки.
                                                                                                                                                                                                                                                                                                                                                                Какие мысли?
                                                                                                                                                                                                                                                                                                                                                                itchief.ru/assets/uploadify/8/f/0/8f02fbe290640769307c473c4bee9172.jpg
                                                                                                                                                                                                                                                                                                                                                                1. Сергей
                                                                                                                                                                                                                                                                                                                                                                  31 января 2018, 16:06
                                                                                                                                                                                                                                                                                                                                                                  Отвечаю сам себе, разобрался. Будьте внимательны, в HTML коде были остатки формы ввода, которую тестировал до установки ФОРМЫ от Александра. Форма Отличная, рабочая. Правда стили слетают, но это тут обсуждали, есть три варианта. Самый простой, выкинуть часть из bootstrap.min.css.
                                                                                                                                                                                                                                                                                                                                                                  1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                    31 января 2018, 16:44
                                                                                                                                                                                                                                                                                                                                                                    В следующем релизе формы (визуально будет выполнена на Bootstrap 4), оставлю только необходимый набор стилей. Это небольшой фрагмент CSS уже можно будет более просто изменить под свой дизайн.
                                                                                                                                                                                                                                                                                                                                                                2. Wird
                                                                                                                                                                                                                                                                                                                                                                  29 января 2018, 16:33
                                                                                                                                                                                                                                                                                                                                                                  Спасибо! Форма отличная! Но как добавить получателя?
                                                                                                                                                                                                                                                                                                                                                                  1. Сергей
                                                                                                                                                                                                                                                                                                                                                                    31 января 2018, 11:13
                                                                                                                                                                                                                                                                                                                                                                    Здравствуйте,
                                                                                                                                                                                                                                                                                                                                                                    feedback\process\process_settings.php
                                                                                                                                                                                                                                                                                                                                                                    в этом файле строка 19
                                                                                                                                                                                                                                                                                                                                                                    // кому необходимо отправить письмо
                                                                                                                                                                                                                                                                                                                                                                    const MAIL_ADDRESS = 'admin@вашсайт.ru';
                                                                                                                                                                                                                                                                                                                                                                    1. Wird
                                                                                                                                                                                                                                                                                                                                                                      31 января 2018, 11:29
                                                                                                                                                                                                                                                                                                                                                                      Спасибо Сергей! Но это я понял, тут написано, не написано как добавить к получателю новый адрес. Но, кажется разобрался… продублировал AddAdress в process.php и в него уже добавил адрес;
                                                                                                                                                                                                                                                                                                                                                                  2. Алексей
                                                                                                                                                                                                                                                                                                                                                                    24 января 2018, 22:21
                                                                                                                                                                                                                                                                                                                                                                    Добрый день.
                                                                                                                                                                                                                                                                                                                                                                    Стал тестировать форму на сервере и не отображается картинка капчи, что может быть? пишет: Fatal error: Uncaught Error: Call to undefined function imagecreatefrompng() in D:\F\ooo\of_contact\captcha\captcha.php:16 Stack trace: #0 {main} thrown in D:\F\ooo\of_contact\captcha\captcha.php on line 16
                                                                                                                                                                                                                                                                                                                                                                    1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                      27 января 2018, 15:45
                                                                                                                                                                                                                                                                                                                                                                      Здравствуйте! Значит, на сервере нет функции imagecreatefrompng() или не подключено расширение для неё.
                                                                                                                                                                                                                                                                                                                                                                      1. Алексей
                                                                                                                                                                                                                                                                                                                                                                        29 января 2018, 10:51
                                                                                                                                                                                                                                                                                                                                                                        Александр, данная функция подключена, не работает только на php 7, на остальных версиях всё срабатывает, помогите, что делать
                                                                                                                                                                                                                                                                                                                                                                        1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                          29 января 2018, 14:21
                                                                                                                                                                                                                                                                                                                                                                          Данная функция находится в GD библиотеке и она, конечно же, есть в php 7. Необходимо проверить настройки конфигурационного файла или если используете хостинг, то можно обратиться в техподдержку.
                                                                                                                                                                                                                                                                                                                                                                          1. Алексей
                                                                                                                                                                                                                                                                                                                                                                            30 января 2018, 13:29
                                                                                                                                                                                                                                                                                                                                                                            Александр, помоги пожалуйста
                                                                                                                                                                                                                                                                                                                                                                            у меня проблема скорее всего связана с тем, что на сервере используется прокси, как мне в файлу отправки формы на почту прописать(использовать) мои данные прокси(адрес прокси, логин и пароль)
                                                                                                                                                                                                                                                                                                                                                                            1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                              31 января 2018, 02:22
                                                                                                                                                                                                                                                                                                                                                                              PHPMailer не поддерживает отправку SMTP через прокси. Но это не означает, что вы не можете использовать прокси. Например, можно воспользоваться socat для создания прокси-тоннеля и отправки писем, подготовленных PHPMailer, уже через него.
                                                                                                                                                                                                                                                                                                                                                                              1. Алексей
                                                                                                                                                                                                                                                                                                                                                                                31 января 2018, 08:04
                                                                                                                                                                                                                                                                                                                                                                                Александр, подскажите пожалуйста как это можно сделать, большое вам спасибо
                                                                                                                                                                                                                                                                                                                                                                                1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                  31 января 2018, 15:57
                                                                                                                                                                                                                                                                                                                                                                                  Первое — это поставить socat, второе — написать правило. Это уже сетевая задача, к работе формы — она не относится.
                                                                                                                                                                                                                                                                                                                                                                            2. Алексей
                                                                                                                                                                                                                                                                                                                                                                              29 января 2018, 16:27
                                                                                                                                                                                                                                                                                                                                                                              и можно ли как то на самом сервере настроить отправку через smtp для определённой учётной записи(через свою гугл почту, с определенным портом)? это нужно где то в php.ini прописывать? или где то еще?
                                                                                                                                                                                                                                                                                                                                                                              1. Алексей
                                                                                                                                                                                                                                                                                                                                                                                29 января 2018, 16:21
                                                                                                                                                                                                                                                                                                                                                                                Заработала когда на сервере заново развернул php7
                                                                                                                                                                                                                                                                                                                                                                                А не подскажете, что может, при отправке формы высвечивается «Ошибка!
                                                                                                                                                                                                                                                                                                                                                                                Форму не удалось отправить.»
                                                                                                                                                                                                                                                                                                                                                                                В response пишет "{«result»:«error»}", всё это работало на хостинге, но после переноса на физический сервер не работает, дело в оправке на почту? что может быть?
                                                                                                                                                                                                                                                                                                                                                                                1. Алексей
                                                                                                                                                                                                                                                                                                                                                                                  29 января 2018, 18:26
                                                                                                                                                                                                                                                                                                                                                                                  настроил как сказано здесь
                                                                                                                                                                                                                                                                                                                                                                                  , пишет 2018-01-29 15:14:50 Connection: opening to ssl://smtp.yandex.ru:465, timeout=300, options=array (
                                                                                                                                                                                                                                                                                                                                                                                  )
                                                                                                                                                                                                                                                                                                                                                                                  что же делать, помогите пожалуйства, из вашего файла под тем же примером то же самое((
                                                                                                                                                                                                                                                                                                                                                                        2. Artem Shein
                                                                                                                                                                                                                                                                                                                                                                          23 января 2018, 22:44
                                                                                                                                                                                                                                                                                                                                                                          Доброй ночи
                                                                                                                                                                                                                                                                                                                                                                          Целый день пытался вставить исправно форму.
                                                                                                                                                                                                                                                                                                                                                                          Работает, но не работают оповещения и не трет строки после отправки.
                                                                                                                                                                                                                                                                                                                                                                          Молю о помощи.
                                                                                                                                                                                                                                                                                                                                                                          www.shart.pl/tlumaczenia-ukrainski01.html
                                                                                                                                                                                                                                                                                                                                                                          1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                            27 января 2018, 15:50
                                                                                                                                                                                                                                                                                                                                                                            Здравствуйте. Вам необходимо подключить js-скрипты формы. Кроме этого желательно также исправить другие js-ошибки на странице.
                                                                                                                                                                                                                                                                                                                                                                          2. Павел
                                                                                                                                                                                                                                                                                                                                                                            18 января 2018, 01:18
                                                                                                                                                                                                                                                                                                                                                                            Добрый день!
                                                                                                                                                                                                                                                                                                                                                                            А не подскажите как отправлять на email ещё и адрес страницы с которой пришёл заказ?
                                                                                                                                                                                                                                                                                                                                                                            1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                              18 января 2018, 15:23
                                                                                                                                                                                                                                                                                                                                                                              Здравствуйте. Посмотрите ответ в этом комментарии.
                                                                                                                                                                                                                                                                                                                                                                            2. Михаил
                                                                                                                                                                                                                                                                                                                                                                              15 ноября 2017, 16:27
                                                                                                                                                                                                                                                                                                                                                                              Здравствуйте, спасибо за форму но вот я не совсем понял. Если мне надо несколько таких форм что делать? id формы поменяю а код проверки в process.php, Если полей некоторых не будет например email он мне выводит ошибку данных.
                                                                                                                                                                                                                                                                                                                                                                              1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                18 ноября 2017, 17:02
                                                                                                                                                                                                                                                                                                                                                                                Здравствуйте, обновил проект на Github (https://github.com/itchief/feedback-form/commit/40b587634855e04bd9ae9be00fd9110bcf912698).
                                                                                                                                                                                                                                                                                                                                                                                Пример, как можно использовать несколько капч на странице:
                                                                                                                                                                                                                                                                                                                                                                                <!-- В первой форме: -->
                                                                                                                                                                                                                                                                                                                                                                                <img class="img-captcha" src="/feedback/captcha/captcha.php?id=captcha1" data-src="/feedback/captcha/captcha.php?id=captcha1">
                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                <!-- Во второй форме: -->
                                                                                                                                                                                                                                                                                                                                                                                <img class="img-captcha" src="/feedback/captcha/captcha.php?id=captcha2" data-src="/feedback/captcha/captcha.php?id=captcha2">
                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                Файлы для обработки форм необходимо использовать разные. Можно конечно использовать и один файл, но в этом случае в нём придётся писать дополнительные условия. Тут всё зависит от предпочтений.

                                                                                                                                                                                                                                                                                                                                                                                В этом случае валидация капчи 1 формы будет осуществляться так:
                                                                                                                                                                                                                                                                                                                                                                                //валидация капчи
                                                                                                                                                                                                                                                                                                                                                                                if (isset($_POST['captcha']) && isset($_SESSION['captcha1'])) {
                                                                                                                                                                                                                                                                                                                                                                                    $captcha = filter_var($_POST['captcha'], FILTER_SANITIZE_STRING);
                                                                                                                                                                                                                                                                                                                                                                                    if ($_SESSION['captcha1'] != $captcha) {
                                                                                                                                                                                                                                                                                                                                                                                        $data['captcha'] = 'Вы неправильно ввели код с картинки';
                                                                                                                                                                                                                                                                                                                                                                                        $data['result'] = 'error';
                                                                                                                                                                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                                                                                                                                                                } else {
                                                                                                                                                                                                                                                                                                                                                                                    $data['captcha'] = 'Произошла ошибка при проверке проверочного кода';
                                                                                                                                                                                                                                                                                                                                                                                    $data['result'] = 'error';
                                                                                                                                                                                                                                                                                                                                                                                }
                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                А второй так:
                                                                                                                                                                                                                                                                                                                                                                                //валидация капчи
                                                                                                                                                                                                                                                                                                                                                                                if (isset($_POST['captcha']) && isset($_SESSION['captcha2'])) {
                                                                                                                                                                                                                                                                                                                                                                                    $captcha = filter_var($_POST['captcha'], FILTER_SANITIZE_STRING);
                                                                                                                                                                                                                                                                                                                                                                                    if ($_SESSION['captcha2'] != $captcha) {
                                                                                                                                                                                                                                                                                                                                                                                        $data['captcha'] = 'Вы неправильно ввели код с картинки';
                                                                                                                                                                                                                                                                                                                                                                                        $data['result'] = 'error';
                                                                                                                                                                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                                                                                                                                                                } else {
                                                                                                                                                                                                                                                                                                                                                                                    $data['captcha'] = 'Произошла ошибка при проверке проверочного кода';
                                                                                                                                                                                                                                                                                                                                                                                    $data['result'] = 'error';
                                                                                                                                                                                                                                                                                                                                                                                }
                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                Пример с 2 формами на странице: yadi.sk/d/povyeXHh3MbGQL
                                                                                                                                                                                                                                                                                                                                                                              2. Евгений
                                                                                                                                                                                                                                                                                                                                                                                29 октября 2017, 16:39
                                                                                                                                                                                                                                                                                                                                                                                Добрый день, Александр!
                                                                                                                                                                                                                                                                                                                                                                                Установил форму, но ни как не могу добиться того, чтобы отправлялось сообщение. Нажимаю отправить и тишина. В консоли выходят ошибки
                                                                                                                                                                                                                                                                                                                                                                                xn--80abczomdcx1d7c.xn--p1ai/:1 Uncaught SyntaxError: Unexpected token < in JSON at position 0
                                                                                                                                                                                                                                                                                                                                                                                at JSON.parse ()
                                                                                                                                                                                                                                                                                                                                                                                at Object.success (main.js:208)
                                                                                                                                                                                                                                                                                                                                                                                at i (jquery-3.2.1.min.js:2)
                                                                                                                                                                                                                                                                                                                                                                                at Object.fireWith [as resolveWith] (jquery-3.2.1.min.js:2)
                                                                                                                                                                                                                                                                                                                                                                                at A (jquery-3.2.1.min.js:4)
                                                                                                                                                                                                                                                                                                                                                                                at XMLHttpRequest.(jquery-3.2.1.min.js:4)

                                                                                                                                                                                                                                                                                                                                                                                Process.php

                                                                                                                                                                                                                                                                                                                                                                                Fatal error: Call to undefined function filter_var() in /home/muzscrb/xn--90alorekx.xn--p1ai/docs/feedback/process/process.php on line 36
                                                                                                                                                                                                                                                                                                                                                                                С чем это связано, можете подсказать? Спасибо!
                                                                                                                                                                                                                                                                                                                                                                                1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                  29 октября 2017, 17:02
                                                                                                                                                                                                                                                                                                                                                                                  Добрый день! Это связано с тем, что у вас нет функции filter_var. Если вы используете версию PHP больше чем 5.2, то напишите в техподдержку.
                                                                                                                                                                                                                                                                                                                                                                                  1. Евгений
                                                                                                                                                                                                                                                                                                                                                                                    01 ноября 2017, 18:40
                                                                                                                                                                                                                                                                                                                                                                                    Спасибо! Да, в этом и была проблема. Очень Вам признателен.
                                                                                                                                                                                                                                                                                                                                                                                2. Nik
                                                                                                                                                                                                                                                                                                                                                                                  26 октября 2017, 10:27
                                                                                                                                                                                                                                                                                                                                                                                  Здравствуйте.
                                                                                                                                                                                                                                                                                                                                                                                  При выбора в форме файла с недопустимым расширением, выдается сообщение об ошибке типа файла, но сообщение отправляется. Не подскажите, как модифицировать скрипт, чтобы отправка блокировалась при неверном типе расширения файла?
                                                                                                                                                                                                                                                                                                                                                                                  1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                    26 октября 2017, 15:22
                                                                                                                                                                                                                                                                                                                                                                                    Здравствуйте.
                                                                                                                                                                                                                                                                                                                                                                                    Наиболее просто это сделать так.
                                                                                                                                                                                                                                                                                                                                                                                    1. Добавить новую функцию в main.js, например:
                                                                                                                                                                                                                                                                                                                                                                                    // проверка изображений
                                                                                                                                                                                                                                                                                                                                                                                    ProcessForm.prototype.checkImage = function () {
                                                                                                                                                                                                                                                                                                                                                                                        if (!this.existenceUploadsFile) {
                                                                                                                                                                                                                                                                                                                                                                                            return;
                                                                                                                                                                                                                                                                                                                                                                                        }
                                                                                                                                                                                                                                                                                                                                                                                        var submitForm = document.getElementById(this.idForm);
                                                                                                                                                                                                                                                                                                                                                                                        var files = $(submitForm).find('[name="attachment[]"]');
                                                                                                                                                                                                                                                                                                                                                                                        for (var i = 0; i < files.length; i++) {
                                                                                                                                                                                                                                                                                                                                                                                            // получить список файлов элемента input с type="file"
                                                                                                                                                                                                                                                                                                                                                                                            var fileList = files[i].files;
                                                                                                                                                                                                                                                                                                                                                                                            // если элемент не содержит файлов, то перейти к следующему
                                                                                                                                                                                                                                                                                                                                                                                            if (fileList.length > 0) {
                                                                                                                                                                                                                                                                                                                                                                                                // получить первый файл из списка
                                                                                                                                                                                                                                                                                                                                                                                                var file = fileList[0];
                                                                                                                                                                                                                                                                                                                                                                                                // проверить тип файла и размер
                                                                                                                                                                                                                                                                                                                                                                                                if (!this.validateFileExtension(file.name)) {
                                                                                                                                                                                                                                                                                                                                                                                                    $.jGrowl('Файл "<strong>' + file.name + '</strong>"
                                                                                                                                                                                                                                                                                                                                                                                     имеет не допустимое расширение', {
                                                                                                                                                                                                                                                                                                                                                                                                        theme: 'jgrowl-error',
                                                                                                                                                                                                                                                                                                                                                                                                        life: 10000
                                                                                                                                                                                                                                                                                                                                                                                                    });
                                                                                                                                                                                                                                                                                                                                                                                                    validForm = false;
                                                                                                                                                                                                                                                                                                                                                                                                } else if (file.size > this.maxSizeFile) {
                                                                                                                                                                                                                                                                                                                                                                                                    $.jGrowl('Файл "<strong>' + file.name + '</strong>"
                                                                                                                                                                                                                                                                                                                                                                                     имеет не допустимый размер', {
                                                                                                                                                                                                                                                                                                                                                                                                        theme: 'jgrowl-error',
                                                                                                                                                                                                                                                                                                                                                                                                        life: 10000
                                                                                                                                                                                                                                                                                                                                                                                                    });
                                                                                                                                                                                                                                                                                                                                                                                                    validForm = false;
                                                                                                                                                                                                                                                                                                                                                                                                }				
                                                                                                                                                                                                                                                                                                                                                                                            }
                                                                                                                                                                                                                                                                                                                                                                                        }
                                                                                                                                                                                                                                                                                                                                                                                    };
                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                    2. Изменить функцию validateForm:
                                                                                                                                                                                                                                                                                                                                                                                    // валилация формы
                                                                                                                                                                                                                                                                                                                                                                                    ProcessForm.prototype.validateForm = function () {
                                                                                                                                                                                                                                                                                                                                                                                        var _this = this;
                                                                                                                                                                                                                                                                                                                                                                                        var validForm = true;
                                                                                                                                                                                                                                                                                                                                                                                        var submitForm = document.getElementById(this.idForm);
                                                                                                                                                                                                                                                                                                                                                                                        $(submitForm).find('input,textarea').each(function () {
                                                                                                                                                                                                                                                                                                                                                                                            if (this.checkValidity()) {
                                                                                                                                                                                                                                                                                                                                                                                                _this.changeStateInput(this, 'success');
                                                                                                                                                                                                                                                                                                                                                                                            } else {
                                                                                                                                                                                                                                                                                                                                                                                                _this.changeStateInput(this, 'error');
                                                                                                                                                                                                                                                                                                                                                                                                $.jGrowl('Поле: "<strong>' + $(this).parent().find('label').text() + '</strong>"
                                                                                                                                                                                                                                                                                                                                                                                    ' + this.validationMessage, {
                                                                                                                                                                                                                                                                                                                                                                                                    theme: 'jgrowl-error',
                                                                                                                                                                                                                                                                                                                                                                                                    life: 10000
                                                                                                                                                                                                                                                                                                                                                                                                });
                                                                                                                                                                                                                                                                                                                                                                                                validForm = false;
                                                                                                                                                                                                                                                                                                                                                                                            }
                                                                                                                                                                                                                                                                                                                                                                                        });
                                                                                                                                                                                                                                                                                                                                                                                        this.checkImage(); // добавить эту строчку
                                                                                                                                                                                                                                                                                                                                                                                        return validForm;
                                                                                                                                                                                                                                                                                                                                                                                    };
                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                    Сборку формы можно скачать по URL: yadi.sk/d/VsvpcNOk3P7kQi
                                                                                                                                                                                                                                                                                                                                                                                    1. Nik
                                                                                                                                                                                                                                                                                                                                                                                      26 октября 2017, 15:56
                                                                                                                                                                                                                                                                                                                                                                                      Благодарю!
                                                                                                                                                                                                                                                                                                                                                                                      Неплохо бы разместить сверху страницы линк быстрого перехода к комментариям)
                                                                                                                                                                                                                                                                                                                                                                                  2. Александр
                                                                                                                                                                                                                                                                                                                                                                                    19 октября 2017, 13:50
                                                                                                                                                                                                                                                                                                                                                                                    Здравствуйте, Александр!
                                                                                                                                                                                                                                                                                                                                                                                    Установил форму и столкнулся с такой ошибкой:

                                                                                                                                                                                                                                                                                                                                                                                    VM2360:1 Uncaught SyntaxError: Unexpected number in JSON at position 4
                                                                                                                                                                                                                                                                                                                                                                                    at JSON.parse ()
                                                                                                                                                                                                                                                                                                                                                                                    at Object.success (main.js:208)
                                                                                                                                                                                                                                                                                                                                                                                    at l (jquery.min.js:4)
                                                                                                                                                                                                                                                                                                                                                                                    at Object.fireWith [as resolveWith] (jquery.min.js:4)
                                                                                                                                                                                                                                                                                                                                                                                    at k (jquery.min.js:6)
                                                                                                                                                                                                                                                                                                                                                                                    at XMLHttpRequest.(jquery.min.js:6)

                                                                                                                                                                                                                                                                                                                                                                                    Письма на почту приходят, но после нажатия отправить не приходит подтверждение об успехе. Подскажите, пожалуйста, в чем может быть проблема?
                                                                                                                                                                                                                                                                                                                                                                                    1. Вадим
                                                                                                                                                                                                                                                                                                                                                                                      19 октября 2017, 14:23
                                                                                                                                                                                                                                                                                                                                                                                      У меня тоже такая проблема с формой и подобные ошибки в JSON.parse, я тогда в файле php.ini отключил функцию:
                                                                                                                                                                                                                                                                                                                                                                                      error_reporting = E_ALL и почему-то подтверждение об успехе заработало. Какая связь между включением функции отчета об ошибках и возникшей после этого проблемой с формой, мне не понять. Как раз на днях хотел задать подобный вопрос Александру.
                                                                                                                                                                                                                                                                                                                                                                                      1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                        19 октября 2017, 15:37
                                                                                                                                                                                                                                                                                                                                                                                        Значит какие-то ошибки возникают в PHP. Для этого необходимо в браузере открыть панель «Инструменты разработчика», вкладку Network, запрос process.php, вкладку Response и посмотреть текст ответа. Предоставить данный ответ в комментарии.
                                                                                                                                                                                                                                                                                                                                                                                        1. Вадим
                                                                                                                                                                                                                                                                                                                                                                                          19 октября 2017, 16:19
                                                                                                                                                                                                                                                                                                                                                                                          Александр, вот что было во вкладке Response:


                                                                                                                                                                                                                                                                                                                                                                                          Notice: Use of undefined constant count — assumed 'count' in /var/www/u0410517/public_html/xn--b1afanfesxm8co9a.xn--p1acf/feedback/process/process.php on line 119
                                                                                                                                                                                                                                                                                                                                                                                          {«result»:«success»}

                                                                                                                                                                                                                                                                                                                                                                                          В логах ошибок на хостинге тоже указание на 119 строку:
                                                                                                                                                                                                                                                                                                                                                                                          /feedback/process/process.php on line 119
                                                                                                                                                                                                                                                                                                                                                                                          1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                            19 октября 2017, 16:46
                                                                                                                                                                                                                                                                                                                                                                                            В продакшене эту опцию (error_reporting = E_ALL) лучше отключать. Чтобы у вас на страницы не сыпались ошибки. Её необходимо использовать только для отладки.
                                                                                                                                                                                                                                                                                                                                                                                            1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                              19 октября 2017, 16:44
                                                                                                                                                                                                                                                                                                                                                                                              Поправьте следующее:
                                                                                                                                                                                                                                                                                                                                                                                              1.
                                                                                                                                                                                                                                                                                                                                                                                              // проверка существования count
                                                                                                                                                                                                                                                                                                                                                                                              $count = 0; // <-
                                                                                                                                                                                                                                                                                                                                                                                              if (isset($_POST['count'])) {
                                                                                                                                                                                                                                                                                                                                                                                                  $count = (int) $_POST['count'];
                                                                                                                                                                                                                                                                                                                                                                                              } else {
                                                                                                                                                                                                                                                                                                                                                                                                  $data['result'] = 'error';
                                                                                                                                                                                                                                                                                                                                                                                              }
                                                                                                                                                                                                                                                                                                                                                                                              
                                                                                                                                                                                                                                                                                                                                                                                              2.
                                                                                                                                                                                                                                                                                                                                                                                              if ($count) {
                                                                                                                                                                                                                                                                                                                                                                                                  $bodyMail = str_replace('%email.dir%', isset($dir) ? $dir : '-', $bodyMail);
                                                                                                                                                                                                                                                                                                                                                                                              } else {
                                                                                                                                                                                                                                                                                                                                                                                                  $bodyMail = str_replace('%email.dir%', '-', $bodyMail);
                                                                                                                                                                                                                                                                                                                                                                                              }
                                                                                                                                                                                                                                                                                                                                                                                              
                                                                                                                                                                                                                                                                                                                                                                                              1. Вадим
                                                                                                                                                                                                                                                                                                                                                                                                19 октября 2017, 17:34
                                                                                                                                                                                                                                                                                                                                                                                                Спасибо большое, поправил, сейчас ошибок нет.
                                                                                                                                                                                                                                                                                                                                                                                                А функцию «error_reporting = E_ALL» я включал, потому что не получается отравить каждый файл весом более 32Мб.
                                                                                                                                                                                                                                                                                                                                                                                                Прогресс бар замирает на месте в конце загрузки и висит.

                                                                                                                                                                                                                                                                                                                                                                                                Хостер клянется, что он не виноват, что у них лимит до 128 Мб на один файл, но кажется лукавит.

                                                                                                                                                                                                                                                                                                                                                                                                Вот что во вкладке Network:

                                                                                                                                                                                                                                                                                                                                                                                                Ошибок никаких нет.
                                                                                                                                                                                                                                                                                                                                                                                                В настройках php стоит: «max_execution_time=600»

                                                                                                                                                                                                                                                                                                                                                                                                Но тут вы уже, наверное, ничем не поможете, надо с хостером разбираться, видать дальше.
                                                                                                                                                                                                                                                                                                                                                                                                1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                                  26 октября 2017, 14:55
                                                                                                                                                                                                                                                                                                                                                                                                  Здравствуйте! Попробуйте добавить параметр timeout в main.js для Dropzone:
                                                                                                                                                                                                                                                                                                                                                                                                  var myDropzone = new Dropzone('#mydropzone', {
                                                                                                                                                                                                                                                                                                                                                                                                      timeout: 300000,
                                                                                                                                                                                                                                                                                                                                                                                                      ...
                                                                                                                                                                                                                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                                                                                                                                                  1. Вадим
                                                                                                                                                                                                                                                                                                                                                                                                    26 октября 2017, 15:28
                                                                                                                                                                                                                                                                                                                                                                                                    Огромное спасибо с переводом на поддержку сайта! Получилось теперь! Отправил через дропзону файл в 100 Мб!
                                                                                                                                                                                                                                                                                                                                                                                                    1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                                      26 октября 2017, 15:32
                                                                                                                                                                                                                                                                                                                                                                                                      Отлично! Спасибо.
                                                                                                                                                                                                                                                                                                                                                                                      2. Nik
                                                                                                                                                                                                                                                                                                                                                                                        17 октября 2017, 10:47
                                                                                                                                                                                                                                                                                                                                                                                        Здравствуйте!
                                                                                                                                                                                                                                                                                                                                                                                        Не могу разобраться с проблемой. Закачал на хостинг форму, прописал свою почту. Выводит сообщение об успешной отправке, а на почту не приходит письмо. Отправлял и с файлами и без прикрепленных файлов. Изменял несколько почтовых адресов и на трех хостингах заливал.
                                                                                                                                                                                                                                                                                                                                                                                        Не подскажите в чем может быть проблема?
                                                                                                                                                                                                                                                                                                                                                                                        1. Nik
                                                                                                                                                                                                                                                                                                                                                                                          17 октября 2017, 15:17
                                                                                                                                                                                                                                                                                                                                                                                          При изменении всех строк в process_settings.php c const на define заработало
                                                                                                                                                                                                                                                                                                                                                                                          define('MAX_FILE_SIZE', '524288');
                                                                                                                                                                                                                                                                                                                                                                                          // const MAX_FILE_SIZE = 524288;
                                                                                                                                                                                                                                                                                                                                                                                          1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                            17 октября 2017, 15:40
                                                                                                                                                                                                                                                                                                                                                                                            Отлично. Да, для старых версий PHP необходимо заменить const на define.
                                                                                                                                                                                                                                                                                                                                                                                            1. Александр
                                                                                                                                                                                                                                                                                                                                                                                              24 января 2018, 19:53
                                                                                                                                                                                                                                                                                                                                                                                              А у меня не вышло.
                                                                                                                                                                                                                                                                                                                                                                                              На локалке все нормально, а на хостинге пишет отправлено, но письмо не приходит.
                                                                                                                                                                                                                                                                                                                                                                                              Подскажите, что делать?
                                                                                                                                                                                                                                                                                                                                                                                              Спасибо.
                                                                                                                                                                                                                                                                                                                                                                                              1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                                01 февраля 2018, 17:03
                                                                                                                                                                                                                                                                                                                                                                                                Также проверьте, что в качестве домена почтового ящика указан домен сайта. Иначе вы можете просто попасть под фильтр хостера, и ваши письма будут игнорироваться.
                                                                                                                                                                                                                                                                                                                                                                                                // от какого email будет отправляться письмо
                                                                                                                                                                                                                                                                                                                                                                                                const MAIL_FROM = 'no-reply@mydomain.ru';
                                                                                                                                                                                                                                                                                                                                                                                                Кроме этого проверьте, что ваш тарифный план хостинга вообще позволяет отправлять письма.

                                                                                                                                                                                                                                                                                                                                                                                                Если эти рекомендации не помогли, то добавьте в начале php файла следующие строки. Это включит вывод всех ошибок и предупреждений:
                                                                                                                                                                                                                                                                                                                                                                                                ini_set('error_reporting', E_ALL);
                                                                                                                                                                                                                                                                                                                                                                                                ini_set('display_errors', 1);
                                                                                                                                                                                                                                                                                                                                                                                                ini_set('display_startup_errors', 1);
                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                После этого посмотрите результат ответа на вкладке Network.
                                                                                                                                                                                                                                                                                                                                                                                                1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                                  01 февраля 2018, 16:34
                                                                                                                                                                                                                                                                                                                                                                                                  В папке «Спам» нет?
                                                                                                                                                                                                                                                                                                                                                                                          2. Всеволод
                                                                                                                                                                                                                                                                                                                                                                                            13 октября 2017, 03:07
                                                                                                                                                                                                                                                                                                                                                                                            Александр, доброй ночи) Есть интересный вопрос, ломаю голову, как это сделать. Вторую ночь разбираюсь. Ранее передавал информацию через data: data, все приходило успешно. Теперь пришлось воспользоваться data: formData, т.к. форма передает прикрепленные файлы. Сложилась отсюда проблема… Нужно передать только отмеченные чекбоксы, то есть у которых есть имя name=«future[]».
                                                                                                                                                                                                                                                                                                                                                                                            Ранее передавал через функцию:
                                                                                                                                                                                                                                                                                                                                                                                            function checkboxValidate(name){
                                                                                                                                                                                                                                                                                                                                                                                                var min = 1 //minumum number of boxes to be checked for this form-group
                                                                                                                                                                                                                                                                                                                                                                                                if($('input[name="'+name+'"]:checked').length<min){
                                                                                                                                                                                                                                                                                                                                                                                                    $('input[name="'+name+'"]').prop('required',true);
                                                                                                                                                                                                                                                                                                                                                                                                }
                                                                                                                                                                                                                                                                                                                                                                                                else{
                                                                                                                                                                                                                                                                                                                                                                                                    $('input[name="'+name+'"]').prop('required',false);
                                                                                                                                                                                                                                                                                                                                                                                                }
                                                                                                                                                                                                                                                                                                                                                                                            }
                                                                                                                                                                                                                                                                                                                                                                                            А в пхп принимал вот так:
                                                                                                                                                                                                                                                                                                                                                                                            $future= isset($_POST['future'])?$_POST['future']:'';
                                                                                                                                                                                                                                                                                                                                                                                            if(isset($_POST['future'])){
                                                                                                                                                                                                                                                                                                                                                                                            foreach ($_POST['future'] as $key=>$value) echo "$value 
                                                                                                                                                                                                                                                                                                                                                                                            ";
                                                                                                                                                                                                                                                                                                                                                                                            $future= implode(", ", $_POST['future']);
                                                                                                                                                                                                                                                                                                                                                                                            }
                                                                                                                                                                                                                                                                                                                                                                                            Теперь, когда стоит data: formData эти значения не попадают…

                                                                                                                                                                                                                                                                                                                                                                                            Подскажите, как можно реализовать передачу несколько чекбоксов? Или же подскажите, может можно принимать не id полей, а через name=""? Или подскажите и ту и другую реализацию, я всё что мог перекопал и уже больше 100 раз пытался различными способами это сделать. Я думаю, эта информация будет полезна многим пользователям.
                                                                                                                                                                                                                                                                                                                                                                                            1. Всеволод
                                                                                                                                                                                                                                                                                                                                                                                              13 октября 2017, 04:32
                                                                                                                                                                                                                                                                                                                                                                                              Нашел решение! Вдруг кому пригодится, оказалось все легко… нужно добавить код:
                                                                                                                                                                                                                                                                                                                                                                                              var other_data = $('form').serializeArray();
                                                                                                                                                                                                                                                                                                                                                                                                  $.each(other_data,function(key,input){
                                                                                                                                                                                                                                                                                                                                                                                                      fd.append(input.name,input.value);
                                                                                                                                                                                                                                                                                                                                                                                                  });
                                                                                                                                                                                                                                                                                                                                                                                              И не нужно писать айди или объявлять их в js. Просто принимать в php.
                                                                                                                                                                                                                                                                                                                                                                                            2. ntym
                                                                                                                                                                                                                                                                                                                                                                                              09 октября 2017, 12:17
                                                                                                                                                                                                                                                                                                                                                                                              Как передать ID формы в main.js ??
                                                                                                                                                                                                                                                                                                                                                                                              на странице с товарами, сделал форму для заказа, нужно что бы после нажатия "заказать" передавало
                                                                                                                                                                                                                                                                                                                                                                                              this.idForm = parameters['idForm'] || 'feedbackForm<?=$result['id'];?>';
                                                                                                                                                                                                                                                                                                                                                                                              
                                                                                                                                                                                                                                                                                                                                                                                              естественно, так не канает
                                                                                                                                                                                                                                                                                                                                                                                              1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                                10 октября 2017, 14:20
                                                                                                                                                                                                                                                                                                                                                                                                Установить id нужно самой форме:
                                                                                                                                                                                                                                                                                                                                                                                                <!-- Форма обратной связи -->
                                                                                                                                                                                                                                                                                                                                                                                                <form id="feedbackForm<?=$result['id'];?>" action="/feedback/process/process.php" enctype="multipart/form-data" novalidate>
                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                После этого необходимо в JavaScript получить этот id и использовать его для инициализации формы:
                                                                                                                                                                                                                                                                                                                                                                                                if ($('form').length === 1) {
                                                                                                                                                                                                                                                                                                                                                                                                    var idForm = $('form').eq(0).attr('id');
                                                                                                                                                                                                                                                                                                                                                                                                    var formFeedback = new ProcessForm({
                                                                                                                                                                                                                                                                                                                                                                                                        idForm: idForm,
                                                                                                                                                                                                                                                                                                                                                                                                        disableAgreement: true,
                                                                                                                                                                                                                                                                                                                                                                                                        existenceUploadsFile: true,
                                                                                                                                                                                                                                                                                                                                                                                                        existenceCaptcha: false,
                                                                                                                                                                                                                                                                                                                                                                                                        hideForm: true
                                                                                                                                                                                                                                                                                                                                                                                                    });
                                                                                                                                                                                                                                                                                                                                                                                                    formFeedback.init();
                                                                                                                                                                                                                                                                                                                                                                                                }
                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                Если у вас несколько форм на странице, то тогда можно это сделать, например, с помощью each.
                                                                                                                                                                                                                                                                                                                                                                                              2. ntym
                                                                                                                                                                                                                                                                                                                                                                                                07 октября 2017, 22:21
                                                                                                                                                                                                                                                                                                                                                                                                Как организовать отправку на несколько адресов???
                                                                                                                                                                                                                                                                                                                                                                                                Пробовал так
                                                                                                                                                                                                                                                                                                                                                                                                const MAIL_ADDRESS = 'mail1@mail.mail, mail2@mail.mail, mail3@mail.mail';
                                                                                                                                                                                                                                                                                                                                                                                                и так
                                                                                                                                                                                                                                                                                                                                                                                                const MAIL_ADDRESS = 'mail1@mail.mail';
                                                                                                                                                                                                                                                                                                                                                                                                const MAIL_ADDRESS = 'mail2@mail.mail';
                                                                                                                                                                                                                                                                                                                                                                                                const MAIL_ADDRESS = 'mail3@mail.mail';
                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                не идет, какие еще есть варианты???
                                                                                                                                                                                                                                                                                                                                                                                                1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                                  10 октября 2017, 14:33
                                                                                                                                                                                                                                                                                                                                                                                                  Попробуйте сделать так.

                                                                                                                                                                                                                                                                                                                                                                                                  1. Вместо константы MAIL_ADDRESS заведите переменную $mailAddress:
                                                                                                                                                                                                                                                                                                                                                                                                  // кому необходимо отправить письмо
                                                                                                                                                                                                                                                                                                                                                                                                  $mailAddress = array('manager@mydomain.ru','manager2@mydomain.ru','manager3@mydomain.ru');
                                                                                                                                                                                                                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                                                                                                                                                  2. Конструкцию
                                                                                                                                                                                                                                                                                                                                                                                                  $mail->addAddress(MAIL_ADDRESS);
                                                                                                                                                                                                                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                                                                                                                                                  замените на:
                                                                                                                                                                                                                                                                                                                                                                                                  for ($i = 0; $i < count($mailAddress ); $i++) {
                                                                                                                                                                                                                                                                                                                                                                                                      $mail->addAddress($mailAddress[$i]);
                                                                                                                                                                                                                                                                                                                                                                                                  }
                                                                                                                                                                                                                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                                                                                                                                                2. lilboq
                                                                                                                                                                                                                                                                                                                                                                                                  07 октября 2017, 19:42
                                                                                                                                                                                                                                                                                                                                                                                                  Подскажите как добавить поле типа select с проверкой заполнения и отправкой на email:
                                                                                                                                                                                                                                                                                                                                                                                                  Вставляю вот такой код в HTML
                                                                                                                                                                                                                                                                                                                                                                                                  <select name="pol" id="pol">
                                                                                                                                                                                                                                                                                                                                                                                                                                  <option value="Мальчик">Мальчик</option>
                                                                                                                                                                                                                                                                                                                                                                                                                                  <option value="Девочка">Девочка</option>
                                                                                                                                                                                                                                                                                                                                                                                                                              </select>
                                                                                                                                                                                                                                                                                                                                                                                                  1. ntym
                                                                                                                                                                                                                                                                                                                                                                                                    07 октября 2017, 21:39
                                                                                                                                                                                                                                                                                                                                                                                                    <select name="pol" id="pol" required="required">
                                                                                                                                                                                                                                                                                                                                                                                                    <option value="">Укажите свой пол</option>
                                                                                                                                                                                                                                                                                                                                                                                                    <option value="Мальчик">Мальчик</option>
                                                                                                                                                                                                                                                                                                                                                                                                    <option value="Девочка">Девочка</option>
                                                                                                                                                                                                                                                                                                                                                                                                    </select>
                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                    1. lilboq
                                                                                                                                                                                                                                                                                                                                                                                                      07 октября 2017, 21:50
                                                                                                                                                                                                                                                                                                                                                                                                      Подскажи пожалуйста, а что нужно прописать в JS файле и PHP чтобы данные еще брались из формы и отправлялись на email?
                                                                                                                                                                                                                                                                                                                                                                                                      1. ntym
                                                                                                                                                                                                                                                                                                                                                                                                        07 октября 2017, 22:01
                                                                                                                                                                                                                                                                                                                                                                                                        Добавить в файл process.php
                                                                                                                                                                                                                                                                                                                                                                                                        if (isset($_POST['pol'])) {
                                                                                                                                                                                                                                                                                                                                                                                                            $message = filter_var($_POST['pol'], FILTER_SANITIZE_STRING); // защита от XSS
                                                                                                                                                                                                                                                                                                                                                                                                            if (!checkTextLength($pol, 3, 10)) { // проверка на количество символов в тексте
                                                                                                                                                                                                                                                                                                                                                                                                                $data['pol'] = 'Поле <b>pol</b> содержит недопустимое количество символов';
                                                                                                                                                                                                                                                                                                                                                                                                                $data['result'] = 'error';
                                                                                                                                                                                                                                                                                                                                                                                                            }
                                                                                                                                                                                                                                                                                                                                                                                                        }
                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                        Например, после
                                                                                                                                                                                                                                                                                                                                                                                                        // валидация поля name
                                                                                                                                                                                                                                                                                                                                                                                                        if (isset($_POST['name'])) {
                                                                                                                                                                                                                                                                                                                                                                                                            $name = filter_var($_POST['name'], FILTER_SANITIZE_STRING); // защита от XSS
                                                                                                                                                                                                                                                                                                                                                                                                            if (!checkTextLength($name, 2, 50)) { // проверка на количество символов в тексте
                                                                                                                                                                                                                                                                                                                                                                                                                $data['name'] = 'Поле <b>Имя</b> содержит недопустимое количество символов';
                                                                                                                                                                                                                                                                                                                                                                                                                $data['result'] = 'error';
                                                                                                                                                                                                                                                                                                                                                                                                            }
                                                                                                                                                                                                                                                                                                                                                                                                        } else {
                                                                                                                                                                                                                                                                                                                                                                                                            $data['name'] = 'Поле <b>Имя</b> не заполнено';
                                                                                                                                                                                                                                                                                                                                                                                                            $data['result'] = 'error';
                                                                                                                                                                                                                                                                                                                                                                                                        }
                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                        Далее найти комментарий // выполняем замену плейсхолдеров реальными значениями
                                                                                                                                                                                                                                                                                                                                                                                                        Вставляем после
                                                                                                                                                                                                                                                                                                                                                                                                        $bodyMail = str_replace('%email.nameuser%', isset($name) ? $name : '-', $bodyMail);
                                                                                                                                                                                                                                                                                                                                                                                                        это
                                                                                                                                                                                                                                                                                                                                                                                                        $bodyMail = str_replace('%email.poluser%', isset($pol) ? $pol : '-', $bodyMail);
                                                                                                                                                                                                                                                                                                                                                                                                        И добавляем в шаблоны email_client.tpl и email.tpl

                                                                                                                                                                                                                                                                                                                                                                                                        %email.poluser%
                                                                                                                                                                                                                                                                                                                                                                                                        В любом удобном месте…

                                                                                                                                                                                                                                                                                                                                                                                                        Вроде бы ничего не пропустил...
                                                                                                                                                                                                                                                                                                                                                                                                        1. lilboq
                                                                                                                                                                                                                                                                                                                                                                                                          07 октября 2017, 23:02
                                                                                                                                                                                                                                                                                                                                                                                                          Спасибо большое))))))
                                                                                                                                                                                                                                                                                                                                                                                                  2. ntym
                                                                                                                                                                                                                                                                                                                                                                                                    05 октября 2017, 23:24
                                                                                                                                                                                                                                                                                                                                                                                                    Добрый вечер!
                                                                                                                                                                                                                                                                                                                                                                                                    Новая проблемка, добавил несколько полей, убрал поле email и загрузку файлов. После отправки, все поля горят зеленым но ничего далее не происходит. Где что я упустил??
                                                                                                                                                                                                                                                                                                                                                                                                    Правил файлик process.php

                                                                                                                                                                                                                                                                                                                                                                                                    1. ntym
                                                                                                                                                                                                                                                                                                                                                                                                      07 октября 2017, 20:09
                                                                                                                                                                                                                                                                                                                                                                                                      Нашел решение, создаем файлик .htaccess в папке process с содержимым
                                                                                                                                                                                                                                                                                                                                                                                                      RewriteRule ^([a-zA-Z]{2})/process.php/$ /feedback/process/process.php [L]
                                                                                                                                                                                                                                                                                                                                                                                                    2. Oleg
                                                                                                                                                                                                                                                                                                                                                                                                      04 октября 2017, 01:46
                                                                                                                                                                                                                                                                                                                                                                                                      Всем привет:-)
                                                                                                                                                                                                                                                                                                                                                                                                      Люди добрые подскажите пожалуйста как решить проблему???
                                                                                                                                                                                                                                                                                                                                                                                                      установил форму, все работает вот только поля «Имя» и «email адрес» нужно подправить ( скрин прикладываю), в каком файле это сделать??? а то весь мозг уже сломал.
                                                                                                                                                                                                                                                                                                                                                                                                      1. ntym
                                                                                                                                                                                                                                                                                                                                                                                                        25 сентября 2017, 10:37
                                                                                                                                                                                                                                                                                                                                                                                                        ребята, помогите с проблемкой отображения капчи itchief.ru/lessons/php/feedback-form-for-website#comment-5424
                                                                                                                                                                                                                                                                                                                                                                                                        1. ntym
                                                                                                                                                                                                                                                                                                                                                                                                          28 сентября 2017, 13:54
                                                                                                                                                                                                                                                                                                                                                                                                          я так понимаю, никто не поможет…
                                                                                                                                                                                                                                                                                                                                                                                                        2. Юрий
                                                                                                                                                                                                                                                                                                                                                                                                          21 сентября 2017, 09:47
                                                                                                                                                                                                                                                                                                                                                                                                          Здравствуйте! Подскажите пожалуйста. Все установил, все работает добавил еще одно поле для ввода согласно инструкции. Сообщение отправляется на почту доходит, но после нажатия кнопки отправить, она залипает и не какого оповещение с формы об успешной либо ошибки не приходит, а сообщение на почту доходят. Как исправить данную проблему????
                                                                                                                                                                                                                                                                                                                                                                                                          1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                                            21 сентября 2017, 16:03
                                                                                                                                                                                                                                                                                                                                                                                                            Где-то допустили ошибку. Откройте в браузере «Инструменты разработчика», перейдите на вкладку Network и посмотрите, в какой строчки и какая ошибка возникает. После этого откройте файл process.php и исправьте её. Если форма уходит на почту, то значит после строчки $mail->send().
                                                                                                                                                                                                                                                                                                                                                                                                          2. ntym
                                                                                                                                                                                                                                                                                                                                                                                                            15 сентября 2017, 11:47
                                                                                                                                                                                                                                                                                                                                                                                                            подскажите, как правильно организовать запись в бд… чтото не получается…
                                                                                                                                                                                                                                                                                                                                                                                                            1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                                              16 сентября 2017, 16:23
                                                                                                                                                                                                                                                                                                                                                                                                              1. Создать таблицу в базе данных (пример таблицы). Можете вставить её в свою базу данных через экспорт.
                                                                                                                                                                                                                                                                                                                                                                                                              2. Добавить в php-файл process.php действия, которые будут записывать информацию в таблицу базы данных.
                                                                                                                                                                                                                                                                                                                                                                                                              // отправка формы в базу данных
                                                                                                                                                                                                                                                                                                                                                                                                              if ($data['result'] == 'success') {
                                                                                                                                                                                                                                                                                                                                                                                                                  // имя пользователя базы данных
                                                                                                                                                                                                                                                                                                                                                                                                                  $user = 'root';
                                                                                                                                                                                                                                                                                                                                                                                                                  // пароль пользователя базы данных	
                                                                                                                                                                                                                                                                                                                                                                                                                  $pass = '';
                                                                                                                                                                                                                                                                                                                                                                                                                  // mysitedb - имя базы данных
                                                                                                                                                                                                                                                                                                                                                                                                                  $dbh = new PDO('mysql:host=localhost;dbname=mysitedb', $user, $pass);
                                                                                                                                                                                                                                                                                                                                                                                                                  $stmt = $dbh->prepare("INSERT INTO feedback (name, email, message, attachments) VALUES (:name, :email, :message, :attachments)");
                                                                                                                                                                                                                                                                                                                                                                                                                  $stmt->bindParam(':name', $name);
                                                                                                                                                                                                                                                                                                                                                                                                                  $stmt->bindParam(':email', $email);
                                                                                                                                                                                                                                                                                                                                                                                                                  $stmt->bindParam(':message', $message);
                                                                                                                                                                                                                                                                                                                                                                                                                  $stmt->bindParam(':attachments', $str_attachments);
                                                                                                                                                                                                                                                                                                                                                                                                              
                                                                                                                                                                                                                                                                                                                                                                                                                  $str_attachments = '';
                                                                                                                                                                                                                                                                                                                                                                                                                  if (isset($attachments)) {
                                                                                                                                                                                                                                                                                                                                                                                                                      $str_attachments = json_encode($attachments);
                                                                                                                                                                                                                                                                                                                                                                                                                  }
                                                                                                                                                                                                                                                                                                                                                                                                              	
                                                                                                                                                                                                                                                                                                                                                                                                                  // вставим строку
                                                                                                                                                                                                                                                                                                                                                                                                                  if (!$stmt->execute()) {
                                                                                                                                                                                                                                                                                                                                                                                                                      $data['result'] = 'error';
                                                                                                                                                                                                                                                                                                                                                                                                                  }
                                                                                                                                                                                                                                                                                                                                                                                                              }
                                                                                                                                                                                                                                                                                                                                                                                                              
                                                                                                                                                                                                                                                                                                                                                                                                              Форму обратной связи с вышепредставленным фрагментом php-кода можно загрузить отсюда.
                                                                                                                                                                                                                                                                                                                                                                                                              1. Петр
                                                                                                                                                                                                                                                                                                                                                                                                                05 июня 2019, 17:03
                                                                                                                                                                                                                                                                                                                                                                                                                Александр, здравствуйте!

                                                                                                                                                                                                                                                                                                                                                                                                                Поставил для себя довольно интересную задачу — генерировать для каждого заполнения формы уникальный код (который не должен никогда повторяться) состоящий из цифр и букв и отправлять этот код в виде pdf файла этому самому пользователю на почту.

                                                                                                                                                                                                                                                                                                                                                                                                                Код я думаю генерировать в виде даты/времени+секунды, а потом отправлять его на проверку в базу данных (был ли уже такой до этого) и потом, если код уникален, прописывать его в готовый pdf-файлик (через, например, mPDF или TCPDF) и отправлять прикрепленным к письму.

                                                                                                                                                                                                                                                                                                                                                                                                                Можете помочь с курсом действий? Как это максимально правильно прописать в вашу форму? Очень бы помог совет профессионала вашего уровня
                                                                                                                                                                                                                                                                                                                                                                                                                1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                                                  06 июня 2019, 15:03
                                                                                                                                                                                                                                                                                                                                                                                                                  Здравствуйте!
                                                                                                                                                                                                                                                                                                                                                                                                                  А зачем пользователю этот код? Можно просто сохранять форму в базу данных, а в качестве первичного ключа использовать числовое поле с атрибутом AUTO_INCREMENT. В этом случае у вас будет понятный уникальный идентификатор формы, используя который можно будет её получить.

                                                                                                                                                                                                                                                                                                                                                                                                                  Порядок действий тут будет аналогичен вашему описанию.

                                                                                                                                                                                                                                                                                                                                                                                                                  Для генерирования уникального ID, основанного на текущем времени в микросекундах в PHP есть функция uniqid.
                                                                                                                                                                                                                                                                                                                                                                                                                  Например, генерирование уникального ID для пользователя с email равным $email:
                                                                                                                                                                                                                                                                                                                                                                                                                  $uniqid = uniqid(md5($email), true);
                                                                                                                                                                                                                                                                                                                                                                                                                  1. Петр
                                                                                                                                                                                                                                                                                                                                                                                                                    06 июня 2019, 15:27
                                                                                                                                                                                                                                                                                                                                                                                                                    Я хочу выстроить систему для акции с бонусными купонами (скидка на услуги). Пользователь оставляет свои данные, а в благодарность получает на почту файлик с бонусными кодом. Каждый код, как я и писал — уникальный.

                                                                                                                                                                                                                                                                                                                                                                                                                    А можете хотя одной левой показать, как отправить переменную uniqid для занесения + проверки в базу данных и дальнейшую отправку пользователю? :) Здорово бы помогли. Пока мои знания не покрывают запросы (но это временные страдания) :D
                                                                                                                                                                                                                                                                                                                                                                                                                2. ntym
                                                                                                                                                                                                                                                                                                                                                                                                                  16 сентября 2017, 23:14
                                                                                                                                                                                                                                                                                                                                                                                                                  супер, то что нужно! Огромное спасибо
                                                                                                                                                                                                                                                                                                                                                                                                                3. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                                                  15 сентября 2017, 16:09
                                                                                                                                                                                                                                                                                                                                                                                                                  Вы это хотите сделать для проекта, который использует какую-то CMS или с помощью PHP PDO?
                                                                                                                                                                                                                                                                                                                                                                                                                  1. ntym
                                                                                                                                                                                                                                                                                                                                                                                                                    15 сентября 2017, 20:07
                                                                                                                                                                                                                                                                                                                                                                                                                    скорее php7+mysqli
                                                                                                                                                                                                                                                                                                                                                                                                                4. Vit
                                                                                                                                                                                                                                                                                                                                                                                                                  27 августа 2017, 18:32
                                                                                                                                                                                                                                                                                                                                                                                                                  Здравствуйте, Александр. Огромное спасибо за Вашу работу и ответы на наши бесконечные вопросы. По поводу отключения чек-бокса о соглашении с правилами — все получилось благодаря Вашей помощи. Но (как обычно) новые достижения вызывают новые вопросы:
                                                                                                                                                                                                                                                                                                                                                                                                                  После успешной отправки формы появляется ссылка для отправки еще одного сообщения, при переходе по этой ссылке открывается форма, но только почему-то без перечисления допустимых расширений файлов при этом кнопка отправки опять становится нерабочей. Если перезагрузить страницу список допустимых расширений появляется и кнопка отправки вновь становится рабочей.
                                                                                                                                                                                                                                                                                                                                                                                                                  1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                                                    28 августа 2017, 13:55
                                                                                                                                                                                                                                                                                                                                                                                                                    Здавствуйте. Поправил эти ошибки. Изменения были приозведены в HTML файле и main.js. Обновленная версия на Github. Только не забывайте проверять форму в режиме инкгнито.
                                                                                                                                                                                                                                                                                                                                                                                                                    1. Vit
                                                                                                                                                                                                                                                                                                                                                                                                                      28 августа 2017, 15:21
                                                                                                                                                                                                                                                                                                                                                                                                                      Спасибо большое, вроде все работает. Тестировал в режиме приватного окна в FF (v 53).
                                                                                                                                                                                                                                                                                                                                                                                                                      Кстати, «неправильный» вариант тоже работает, если в нем убрать
                                                                                                                                                                                                                                                                                                                                                                                                                      // изменение состояния кнопки submit в зависимости от состояния checkbox agree ...
                                                                                                                                                                                                                                                                                                                                                                                                                      Проверял также загрузку файлов до 20 мб — после прохождения прогресс-бара до конца форма в статическом режиме загружает еще минуты 2-3 — сделал примечание для клиентов, чтобы дожидались окончания загрузки.
                                                                                                                                                                                                                                                                                                                                                                                                                  2. sasha
                                                                                                                                                                                                                                                                                                                                                                                                                    27 августа 2017, 08:26
                                                                                                                                                                                                                                                                                                                                                                                                                    Здравствуйте, подскажите как сделать чтобы оповещения работали в модальном окне?
                                                                                                                                                                                                                                                                                                                                                                                                                    Форма работает, но после нажатия кнопки отправить не появляется «ваше сообщение отправлено» спасибо.
                                                                                                                                                                                                                                                                                                                                                                                                                    подключал так:
                                                                                                                                                                                                                                                                                                                                                                                                                    <?php Modal::begin([
                                                                                                                                                                                                                                                                                                                                                                                                                    /*'header' => 'Вот это модальное окно!',*/
                                                                                                                                                                                                                                                                                                                                                                                                                    'size' => 'modal-lg',
                                                                                                                                                                                                                                                                                                                                                                                                                    'toggleButton' => [
                                                                                                                                                                                                                                                                                                                                                                                                                    'tag' => 'button',
                                                                                                                                                                                                                                                                                                                                                                                                                    'class' => 'btn-lg btn-success',
                                                                                                                                                                                                                                                                                                                                                                                                                    'label' => 'Отправить сообщение Администрации',
                                                                                                                                                                                                                                                                                                                                                                                                                    ]
                                                                                                                                                                                                                                                                                                                                                                                                                    ]);
                                                                                                                                                                                                                                                                                                                                                                                                                    readfile('Http://www/feedback/index.html');

                                                                                                                                                                                                                                                                                                                                                                                                                    Modal::end();?>
                                                                                                                                                                                                                                                                                                                                                                                                                    1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                                                      27 августа 2017, 15:42
                                                                                                                                                                                                                                                                                                                                                                                                                      Пример как сделать форму в модальном окне можно посмотреть здесь: github.com/itchief/feedback-form-in-modal
                                                                                                                                                                                                                                                                                                                                                                                                                      1. sasha
                                                                                                                                                                                                                                                                                                                                                                                                                        27 августа 2017, 16:28
                                                                                                                                                                                                                                                                                                                                                                                                                        форма то работает, заполняется, отправляется, но не выскакивает окно «Ваше сообщение успешно отправлено»
                                                                                                                                                                                                                                                                                                                                                                                                                        Может есть какие мысли?
                                                                                                                                                                                                                                                                                                                                                                                                                        1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                                                          27 августа 2017, 16:47
                                                                                                                                                                                                                                                                                                                                                                                                                          Yii Framework не использую. Но вам, наверное, необходимо назначить этому модальному окну id (например, id-modal) и добавить в необходимое место JavaScript его вызов:
                                                                                                                                                                                                                                                                                                                                                                                                                          $('#id-modal').modal('show');
                                                                                                                                                                                                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                                                                                                                                                                                                    2. Vit
                                                                                                                                                                                                                                                                                                                                                                                                                      25 августа 2017, 18:32
                                                                                                                                                                                                                                                                                                                                                                                                                      Александр, здравствуйте, подскажите, пожалуйста, как удалить блок с чек-боксом (согласие с пользовательским соглашением). Пробовал редактировать строчки в файле main.js и index.html но видимо не правильно — кнопка отправки не активизируется.
                                                                                                                                                                                                                                                                                                                                                                                                                      1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                                                        27 августа 2017, 15:37
                                                                                                                                                                                                                                                                                                                                                                                                                        Добрый день!
                                                                                                                                                                                                                                                                                                                                                                                                                        Для этого необходимо:
                                                                                                                                                                                                                                                                                                                                                                                                                        1. Удалить блок с чекбоксом:
                                                                                                                                                                                                                                                                                                                                                                                                                        <div class="checkbox">...</div>
                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                        2. Удалить у кнопки submit атрибут:
                                                                                                                                                                                                                                                                                                                                                                                                                        disabled="disabled"
                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                        3. При инициализации объекта формы в файле main.js нужно добавить параметр disableAgreement со значением true:
                                                                                                                                                                                                                                                                                                                                                                                                                        var formFeedback = new ProcessForm({idForm: 'feedbackForm', disableAgreement: true});
                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                        Чтобы этот параметр работал, необходимо обновить файл main.js с гитхаба.
                                                                                                                                                                                                                                                                                                                                                                                                                      2. vagadd
                                                                                                                                                                                                                                                                                                                                                                                                                        24 августа 2017, 16:43
                                                                                                                                                                                                                                                                                                                                                                                                                        … по поводу расширения прикрепляемых файлов: фильтр регистрозависимый. т.е. *.jpg пропустит *.JPG — нет. выход — прописывать и то и другое.
                                                                                                                                                                                                                                                                                                                                                                                                                        1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                                                          24 августа 2017, 17:01
                                                                                                                                                                                                                                                                                                                                                                                                                          Нет, не надо. Уже поправил этот момент на странице проекта.
                                                                                                                                                                                                                                                                                                                                                                                                                        2. ntym
                                                                                                                                                                                                                                                                                                                                                                                                                          24 августа 2017, 10:40
                                                                                                                                                                                                                                                                                                                                                                                                                          Добрый день!
                                                                                                                                                                                                                                                                                                                                                                                                                          Столкнулся с такой проблемой, не отображается капча

                                                                                                                                                                                                                                                                                                                                                                                                                          есть страница контакта путь к ней идет: /ua/contact/

                                                                                                                                                                                                                                                                                                                                                                                                                          файл расположен: template/contact.php в нем выводиться файл из бабки формы через include 'feedback/index.php';

                                                                                                                                                                                                                                                                                                                                                                                                                          прописывал путь к капче, как угодно и жесткий путь и адрес сайта и тд… хочу использовать данную форму, но как разобраться с капчей, подскажите…
                                                                                                                                                                                                                                                                                                                                                                                                                          1. ntym
                                                                                                                                                                                                                                                                                                                                                                                                                            24 августа 2017, 10:52
                                                                                                                                                                                                                                                                                                                                                                                                                            И так, я нашел решение:
                                                                                                                                                                                                                                                                                                                                                                                                                            1. Идем в папку feedback/captcha в ней создаем файл .htaccess, в нем правило:
                                                                                                                                                                                                                                                                                                                                                                                                                            RewriteRule ^([a-zA-Z]{2})/capcha.png/$ /feedback/captcha/captcha.php [L]
                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                            и все полетело… всем спасибо за внимание…
                                                                                                                                                                                                                                                                                                                                                                                                                          2. Vit
                                                                                                                                                                                                                                                                                                                                                                                                                            24 августа 2017, 10:30
                                                                                                                                                                                                                                                                                                                                                                                                                            и еще + к ошибкам в комменте
                                                                                                                                                                                                                                                                                                                                                                                                                            itchief.ru/lessons/php/feedback-form-for-website#comment-5266:
                                                                                                                                                                                                                                                                                                                                                                                                                            в форме не отображается несколько полей для загрузки 5 файлов, и в строчке «Прикрепить к сообщению файлы (до ):» после «до» нет количества файлов — хотя количества файлов по умолчанию (5) нигде не менял, думал причина — в файле index.html
                                                                                                                                                                                                                                                                                                                                                                                                                            <p style="font-weight: 700; margin-bottom: 0;">Прикрепить к сообщению файлы (до <span class="countFiles"></span>):</p>
                                                                                                                                                                                                                                                                                                                                                                                                                            после <span был «лишний» перевод строки — но исправление этого не помогло.
                                                                                                                                                                                                                                                                                                                                                                                                                            Как быть?
                                                                                                                                                                                                                                                                                                                                                                                                                            1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                                                              24 августа 2017, 14:08
                                                                                                                                                                                                                                                                                                                                                                                                                              Перевод строки используется для форматирования HTML кода. Как он может быть лишним или нет. Он не влияет на отображение. Ошибка связана с тем, что у вас блокируются скрипты и не подключена библиотека jQuery.
                                                                                                                                                                                                                                                                                                                                                                                                                              1. Vit
                                                                                                                                                                                                                                                                                                                                                                                                                                24 августа 2017, 19:38
                                                                                                                                                                                                                                                                                                                                                                                                                                Ошибка связана с тем, что у вас блокируются скрипты и не подключена библиотека jQuery.
                                                                                                                                                                                                                                                                                                                                                                                                                                так и я об этом — в архиве на github нет каталога с jquery, нет каталога папки загрузок — поэтому и не может работать ни капча, ни файлы прикрепляться.
                                                                                                                                                                                                                                                                                                                                                                                                                                а проблема с No Such User Here решилась благодаря настройке SMTP, спасибо Александр за форму! Еще много есть всяких «хотелок» — но главное, начало положено — форма заработала! И еще, тот факт, что много людей устанавливают Вашу форму — помогает также постоянно усовершенствовать хорошую идею, согласны?
                                                                                                                                                                                                                                                                                                                                                                                                                                1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                                                                  27 августа 2017, 16:22
                                                                                                                                                                                                                                                                                                                                                                                                                                  Добавил в проект на гитхабе библиотеку jQuery и каталог uploads. Насчёт формы с вами полностью согласен. Если бы её ни кто не использовал, то она навряд ли бы совершенствовалась.
                                                                                                                                                                                                                                                                                                                                                                                                                              2. Vit
                                                                                                                                                                                                                                                                                                                                                                                                                                24 августа 2017, 11:11
                                                                                                                                                                                                                                                                                                                                                                                                                                сам спросил — сам отвечаю. Скачал архив с яндекса без изменений — установил — вроде стало работать. Есть, конечно, и там проблемки (так в приходящем письме подтверждении — лишний кусочек тега p>. И еще не увидел, как отключить подтверждение клиенту об успешной отправке.
                                                                                                                                                                                                                                                                                                                                                                                                                                И самое главное — при указании почты админа как почты своего домена — письмо не пересылается — пишет такую ошибку в сипанели не хостинге: No Such User Here
                                                                                                                                                                                                                                                                                                                                                                                                                                Хотя такой пользователь, естественно, есть и письма к нему и от него нормально доходят!
                                                                                                                                                                                                                                                                                                                                                                                                                                1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                                                                  24 августа 2017, 14:20
                                                                                                                                                                                                                                                                                                                                                                                                                                  Спасибо, HTML разметку поправил.
                                                                                                                                                                                                                                                                                                                                                                                                                                  1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                                                                    24 августа 2017, 14:13
                                                                                                                                                                                                                                                                                                                                                                                                                                    Для отключения подтверждения об отправке, необходимо открыть файл process.php и удалить фрагмент кода, снабжённый комментарием «информируем пользователя по email о доставке». Для отправки письма необходимо корректно выставить настройки.
                                                                                                                                                                                                                                                                                                                                                                                                                                2. vagadd
                                                                                                                                                                                                                                                                                                                                                                                                                                  24 августа 2017, 10:16
                                                                                                                                                                                                                                                                                                                                                                                                                                  Приветствую. Что сделать что бы прикреплённые файлы оставались в папке на сервере?
                                                                                                                                                                                                                                                                                                                                                                                                                                  1. Vit
                                                                                                                                                                                                                                                                                                                                                                                                                                    24 августа 2017, 11:15
                                                                                                                                                                                                                                                                                                                                                                                                                                    прикрепленные файлы остаются — в установочном архиве обратной связи с Яндекса есть папка feedback\uploads — они там!
                                                                                                                                                                                                                                                                                                                                                                                                                                    1. vagadd
                                                                                                                                                                                                                                                                                                                                                                                                                                      24 августа 2017, 11:43
                                                                                                                                                                                                                                                                                                                                                                                                                                      юзаю размещённую выше «Feedback form (последняя версия)»
                                                                                                                                                                                                                                                                                                                                                                                                                                      аттачи на мыло приходят, логи в /feedback/info/message.txt присутствуют, а в /feedback/uploads/ пусто.
                                                                                                                                                                                                                                                                                                                                                                                                                                      1. Vit
                                                                                                                                                                                                                                                                                                                                                                                                                                        24 августа 2017, 11:52
                                                                                                                                                                                                                                                                                                                                                                                                                                        Атрибуты у папки на сервере проверяли? (у меня 755 — все сохраняется)
                                                                                                                                                                                                                                                                                                                                                                                                                                        1. vagadd
                                                                                                                                                                                                                                                                                                                                                                                                                                          24 августа 2017, 13:16
                                                                                                                                                                                                                                                                                                                                                                                                                                          даже с 777 ни чего не происходит.
                                                                                                                                                                                                                                                                                                                                                                                                                                          1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                                                                            24 августа 2017, 14:19
                                                                                                                                                                                                                                                                                                                                                                                                                                            Прикрепление файлов к письму происходит из каталога uploads. Если их там нет, то просто ни чего к письму не могло бы прикрепиться. Попробуйте нажать кнопочку «Обновить» в файловом менеджере или как вы там их наличие проверяете. Или воспользоваться другим вариантом — отключиться и заново подключиться к серверу.
                                                                                                                                                                                                                                                                                                                                                                                                                                            1. vagadd
                                                                                                                                                                                                                                                                                                                                                                                                                                              24 августа 2017, 15:22
                                                                                                                                                                                                                                                                                                                                                                                                                                              всем спасибо. дело было не в бобине… перелогинился на ftp и папка ожила.
                                                                                                                                                                                                                                                                                                                                                                                                                                              теперь, буду терзать форму с рекапчей.
                                                                                                                                                                                                                                                                                                                                                                                                                                  2. Vit
                                                                                                                                                                                                                                                                                                                                                                                                                                    23 августа 2017, 18:29
                                                                                                                                                                                                                                                                                                                                                                                                                                    Здравствуйте, Александр.
                                                                                                                                                                                                                                                                                                                                                                                                                                    Спасибо за Ваш очень нужный и востребованный сайт.
                                                                                                                                                                                                                                                                                                                                                                                                                                    Установил Вашу форму. Но возникли ошибки (подобные тем, о которых уже спрашивали др. пользователи — но ответов пока нет), а именно: в установленной форме не обновляется капча, а также не активизируется (после заполнения всех полей кнопка отправки).
                                                                                                                                                                                                                                                                                                                                                                                                                                    Форму устанавливал на сайт с https, скачивал установочный архив с github.com/itchief/feedback-form, в архиве добавил другие типы файлов к загрузке, уменьшил количество символов в капче, увеличил размер загружаемого файла. В консоле пишет такие ошибки
                                                                                                                                                                                                                                                                                                                                                                                                                                    NS_BINDING_ABORTED: Component returned failure code: 0x804b0002 (NS_BINDING_ABORTED) [nsIStreamListener.onStartRequest]  WebRequest.jsm:340
                                                                                                                                                                                                                                                                                                                                                                                                                                    about:blank : Unable to run script because scripts are blocked internally.  (неизвестен)
                                                                                                                                                                                                                                                                                                                                                                                                                                    about:blank : Unable to run script because scripts are blocked internally. (неизвестен)
                                                                                                                                                                                                                                                                                                                                                                                                                                    about:blank : Unable to run script because scripts are blocked internally. (неизвестен)
                                                                                                                                                                                                                                                                                                                                                                                                                                    about:blank : Unable to run script because scripts are blocked internally. (неизвестен)
                                                                                                                                                                                                                                                                                                                                                                                                                                    uncaught exception: undefined  (неизвестен)
                                                                                                                                                                                                                                                                                                                                                                                                                                    about:blank : Unable to run script because scripts are blocked internally. (неизвестен)
                                                                                                                                                                                                                                                                                                                                                                                                                                    NS_BINDING_ABORTED: Component returned failure code: 0x804b0002 (NS_BINDING_ABORTED) [nsIStreamListener.onStartRequest] WebRequest.jsm:340
                                                                                                                                                                                                                                                                                                                                                                                                                                    Error: Bootstrap's JavaScript requires jQuery  bootstrap.min.js:6:37
                                                                                                                                                                                                                                                                                                                                                                                                                                    ReferenceError: jQuery is not defined[Подробнее]  jquery.jgrowl.min.js:1:1
                                                                                                                                                                                                                                                                                                                                                                                                                                    ReferenceError: $ is not defined[Подробнее]  main.js:4:1
                                                                                                                                                                                                                                                                                                                                                                                                                                    1. Юлия
                                                                                                                                                                                                                                                                                                                                                                                                                                      16 августа 2017, 14:46
                                                                                                                                                                                                                                                                                                                                                                                                                                      Добрый день! Бьюсь уже не первый день- при отправке формы возникает ошибка «Произошла ошибка при отправке данных», подскажите с чем может быть связано???
                                                                                                                                                                                                                                                                                                                                                                                                                                      1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                                                                        17 августа 2017, 11:55
                                                                                                                                                                                                                                                                                                                                                                                                                                        Проверьте, позволяет ли ваш тарифный план виртуального хостинга отправлять письма.
                                                                                                                                                                                                                                                                                                                                                                                                                                        1. Юлия
                                                                                                                                                                                                                                                                                                                                                                                                                                          17 августа 2017, 14:17
                                                                                                                                                                                                                                                                                                                                                                                                                                          Спасибо! Оказалось, что во-первых, нельзя указывать в качестве электронной почты адрес, не зарегистрированный на хостинге (строго ОТ и КОМУ должны содержать адреса ящиков на сервере провайдера), во-вторых, в панели управления нужно было сменить php 5.2 на 5.6
                                                                                                                                                                                                                                                                                                                                                                                                                                          1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                                                                            17 августа 2017, 14:36
                                                                                                                                                                                                                                                                                                                                                                                                                                            При установке ОТ указывать любой адрес конечно нельзя. Этого фильтр хостера конечно не пропустит. Иначе вы так могли бы очень просто рассылать письма, от какого угодно имени, и таким образом выдавать себя за какого-то другого.
                                                                                                                                                                                                                                                                                                                                                                                                                                            1. Юлия
                                                                                                                                                                                                                                                                                                                                                                                                                                              18 августа 2017, 14:20
                                                                                                                                                                                                                                                                                                                                                                                                                                              С этим разобралась, теперь проблемы с увеличением размера файла и типов
                                                                                                                                                                                                                                                                                                                                                                                                                                              Везде в js увеличила до 2097152 байт, к типам дописала application/msword и application/pdf, в файле htaccess указала php_value max_execution_time 500
                                                                                                                                                                                                                                                                                                                                                                                                                                              php_value max_input_time 500
                                                                                                                                                                                                                                                                                                                                                                                                                                              php_value upload_max_filesize 10M
                                                                                                                                                                                                                                                                                                                                                                                                                                              php_value post_max_size 10M

                                                                                                                                                                                                                                                                                                                                                                                                                                              Но все равно не загружаются ни по размеру, ни по типу(((
                                                                                                                                                                                                                                                                                                                                                                                                                                              подскажите куда копать!!!
                                                                                                                                                                                                                                                                                                                                                                                                                                              У меня форма как на Вашем примере выше
                                                                                                                                                                                                                                                                                                                                                                                                                                              1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                                                                                19 августа 2017, 16:28
                                                                                                                                                                                                                                                                                                                                                                                                                                                Эти изменения производится в двух файлах process_settings.php и main.js. Как это сделать описано в статье.
                                                                                                                                                                                                                                                                                                                                                                                                                                      2. Yummy
                                                                                                                                                                                                                                                                                                                                                                                                                                        16 августа 2017, 00:00
                                                                                                                                                                                                                                                                                                                                                                                                                                        Здравствуйте, подскажите пожалуйста. На странице есть 2 формы которые идут разным адресатам, в main.js дописал:
                                                                                                                                                                                                                                                                                                                                                                                                                                        // id формы обратной связи
                                                                                                                                                                                                                                                                                                                                                                                                                                                this.idForm = parameters['idForm'] || ['feedbackForm','Feedback'];
                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                        и
                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                        var formFeedback = new ProcessForm({idForm: 'feedbackForm', maxSizeFile: 100000000, existenceCaptcha: false, agreeCheckbox: false});
                                                                                                                                                                                                                                                                                                                                                                                                                                            formFeedback.init();
                                                                                                                                                                                                                                                                                                                                                                                                                                        	
                                                                                                                                                                                                                                                                                                                                                                                                                                        var Feedback = new ProcessForm({idForm: 'Form', maxSizeFile: 100000000, existenceCaptcha: false, agreeCheckbox: false});
                                                                                                                                                                                                                                                                                                                                                                                                                                            Feedback.init();
                                                                                                                                                                                                                                                                                                                                                                                                                                        также скопировал переназвал process.php и process_setings.php.
                                                                                                                                                                                                                                                                                                                                                                                                                                        В html указал разные id форм. И вот проблема в том что в любой форме отправляется 2 письма одинаковых, ради эксперимента сделал 3 формы, итог-отправка 3 одинаковых писем на одну почту(с любой формы).
                                                                                                                                                                                                                                                                                                                                                                                                                                        В чем может быть проблема? Куда копать?
                                                                                                                                                                                                                                                                                                                                                                                                                                        1. Yummy
                                                                                                                                                                                                                                                                                                                                                                                                                                          16 августа 2017, 16:10
                                                                                                                                                                                                                                                                                                                                                                                                                                          Разобрался, все работает, а как убрать расширение файлов и сделать возможность отправлять любые файлы?
                                                                                                                                                                                                                                                                                                                                                                                                                                          1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                                                                            17 августа 2017, 11:52
                                                                                                                                                                                                                                                                                                                                                                                                                                            Необходимые расширения файлов устанавливаются в 2 местах:
                                                                                                                                                                                                                                                                                                                                                                                                                                            1. В файле process_settings.php:
                                                                                                                                                                                                                                                                                                                                                                                                                                            // разрешённые расширения файлов
                                                                                                                                                                                                                                                                                                                                                                                                                                            $allowedExtensions = array('gif', 'jpg', 'png');
                                                                                                                                                                                                                                                                                                                                                                                                                                            2. В файле main.js при создании объекта ProcessForm:
                                                                                                                                                                                                                                                                                                                                                                                                                                            var formFeedback = new ProcessForm({
                                                                                                                                                                                                                                                                                                                                                                                                                                              idForm: 'feedbackForm', 
                                                                                                                                                                                                                                                                                                                                                                                                                                              validFileExtensions: ['jpg', 'jpeg', 'bmp', 'gif', 'png']
                                                                                                                                                                                                                                                                                                                                                                                                                                            });
                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                            Если необходимо вообще не проверять расширения файлов, то необходимо убрать из файлов process.php и main.js соответствующие куски кода. Но это лучше не делать, а потратить время и установить необходимый набор расширений.
                                                                                                                                                                                                                                                                                                                                                                                                                                        2. Stas
                                                                                                                                                                                                                                                                                                                                                                                                                                          13 августа 2017, 17:53
                                                                                                                                                                                                                                                                                                                                                                                                                                          Почему-то некорректно работает с последней версией phpmailer, в варианте с модальным окном. Сообщения отправляются, но форма не исчезает (не появляется сообщение что все отправлено, хотя все отправляется) и не стираются данные из полей.
                                                                                                                                                                                                                                                                                                                                                                                                                                          1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                                                                            14 августа 2017, 14:10
                                                                                                                                                                                                                                                                                                                                                                                                                                            Обновил phpMailer до версии 5.2.24. Всё отлично работает. Ссылка на этот проект на Github. Если у вас возникает ошибка, то необходимо написать какая? Посмотреть ответ сервера можно в консоли разработчика браузера на вкладке Network.
                                                                                                                                                                                                                                                                                                                                                                                                                                            1. Stas
                                                                                                                                                                                                                                                                                                                                                                                                                                              14 августа 2017, 20:40
                                                                                                                                                                                                                                                                                                                                                                                                                                              Модальное окно не закрывается после отправки данных и в полях сохраняется введенная информация, выдается следующее

                                                                                                                                                                                                                                                                                                                                                                                                                                              Uncaught SyntaxError: Unexpected token < in JSON at position 0
                                                                                                                                                                                                                                                                                                                                                                                                                                              at JSON.parse ()
                                                                                                                                                                                                                                                                                                                                                                                                                                              at Object.success (main.js:208)
                                                                                                                                                                                                                                                                                                                                                                                                                                              at i (jquery.min.js:2)
                                                                                                                                                                                                                                                                                                                                                                                                                                              at Object.fireWith [as resolveWith] (jquery.min.js:2)
                                                                                                                                                                                                                                                                                                                                                                                                                                              at y (jquery.min.js:4)
                                                                                                                                                                                                                                                                                                                                                                                                                                              at XMLHttpRequest.c (jquery.min.js:4)




                                                                                                                                                                                                                                                                                                                                                                                                                                              Warning: escapeshellcmd() has been disabled for security reasons in /storage/ssd2/020/2472020/public_html/modules/feedback/phpmailer/class.phpmailer.php on line 1442

                                                                                                                                                                                                                                                                                                                                                                                                                                              Warning: escapeshellcmd() has been disabled for security reasons in /storage/ssd2/020/2472020/public_html/modules/feedback/phpmailer/class.phpmailer.php on line 1442
                                                                                                                                                                                                                                                                                                                                                                                                                                              {«result»:«success»}
                                                                                                                                                                                                                                                                                                                                                                                                                                              1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                                                                                15 августа 2017, 14:49
                                                                                                                                                                                                                                                                                                                                                                                                                                                Это ошибка не связана с phpMailer. Она связана с тем, что у вас в целях безопасности на хостинге выключена функция escapeshellcmd. А данную функцию использует phpMailer для экранирования метасимволов командной строки.
                                                                                                                                                                                                                                                                                                                                                                                                                                                В этом случае осуществляйте отправку писем по SMTP. Как это сделать смотрите в этом комментарии.
                                                                                                                                                                                                                                                                                                                                                                                                                                          2. Sergey
                                                                                                                                                                                                                                                                                                                                                                                                                                            04 августа 2017, 15:07
                                                                                                                                                                                                                                                                                                                                                                                                                                            Здравствуйте.
                                                                                                                                                                                                                                                                                                                                                                                                                                            Мне на моем хостинге дали ответ, по поводу того, что на mail.ru gmail.com yandex.ua и т.д. сообщения с формы обратной связи не приходят.

                                                                                                                                                                                                                                                                                                                                                                                                                                            Сказали:
                                                                                                                                                                                                                                                                                                                                                                                                                                            Файл process.php отправляет письма посредством sendmail, а Вам нужен скрипт, который бы открывал подключение к SMTP.

                                                                                                                                                                                                                                                                                                                                                                                                                                            Как это правильно реализовать? Что прописать и где?
                                                                                                                                                                                                                                                                                                                                                                                                                                            Помогите пожалуйста.
                                                                                                                                                                                                                                                                                                                                                                                                                                            1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                                                                              04 августа 2017, 17:08
                                                                                                                                                                                                                                                                                                                                                                                                                                            2. saqhan
                                                                                                                                                                                                                                                                                                                                                                                                                                              28 июля 2017, 14:36
                                                                                                                                                                                                                                                                                                                                                                                                                                              Александр, добрый день, письма приходящие с формы попдают в спам, можно что нибудь сделать в этом случае?
                                                                                                                                                                                                                                                                                                                                                                                                                                              1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                                                                                28 июля 2017, 15:20
                                                                                                                                                                                                                                                                                                                                                                                                                                                Это, скорее всего, связано с тем, что у вашего письма нет DKIM-подписи. Без этой подписи нельзя удостовериться в том, что данное письмо отправлено именно от этого домена. Поэтому, они попадают в спам.

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

                                                                                                                                                                                                                                                                                                                                                                                                                                                Если вы отправляете письма многим пользователям, то необходимо установить DKIM-подпись для писем. Если это позволяет хостинг, то можете сделать через него. Если нет, то это можете сделать с помощью сервиса Яндекса «Почта для домена».

                                                                                                                                                                                                                                                                                                                                                                                                                                                Почитать про DKIM-подпись можно здесь.

                                                                                                                                                                                                                                                                                                                                                                                                                                                Как должно выглядеть подписаное письмо с помощью DKIM показано на скриншоте.
                                                                                                                                                                                                                                                                                                                                                                                                                                              2. Иван
                                                                                                                                                                                                                                                                                                                                                                                                                                                24 июля 2017, 23:18
                                                                                                                                                                                                                                                                                                                                                                                                                                                Подскажите, как можно добавить скрытое поле, которое будет отправлять с сообщением еще данные, с какой страницы отправлено сообщение?
                                                                                                                                                                                                                                                                                                                                                                                                                                                Для примера title страницы, ссылку на страницу или содержание первого заголовка (он совпадает с title)
                                                                                                                                                                                                                                                                                                                                                                                                                                                1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                                                                                  25 июля 2017, 15:00
                                                                                                                                                                                                                                                                                                                                                                                                                                                  Можно сделать так:
                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. Добавить скрипт после подключения библиотеки jQuery:
                                                                                                                                                                                                                                                                                                                                                                                                                                                  <script>
                                                                                                                                                                                                                                                                                                                                                                                                                                                  $(function(){
                                                                                                                                                                                                                                                                                                                                                                                                                                                    var pagetitle = $('h1').text();
                                                                                                                                                                                                                                                                                                                                                                                                                                                    // feedbackForm - id формы
                                                                                                                                                                                                                                                                                                                                                                                                                                                    $('#feedbackForm').prepend('<input type="hidden" name="pagetitle" value="' + pagetitle + '">');
                                                                                                                                                                                                                                                                                                                                                                                                                                                  });
                                                                                                                                                                                                                                                                                                                                                                                                                                                  </script>
                                                                                                                                                                                                                                                                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                                                                                                                                                                                                  2. В process.php добавить в соответствующие места:
                                                                                                                                                                                                                                                                                                                                                                                                                                                  //...
                                                                                                                                                                                                                                                                                                                                                                                                                                                  //получение и очистка значения pagetitle
                                                                                                                                                                                                                                                                                                                                                                                                                                                  if (isset($_POST['pagetitle'])) {
                                                                                                                                                                                                                                                                                                                                                                                                                                                    $pagetitle = filter_var($_POST['pagetitle'], FILTER_SANITIZE_STRING);
                                                                                                                                                                                                                                                                                                                                                                                                                                                  }
                                                                                                                                                                                                                                                                                                                                                                                                                                                  //...
                                                                                                                                                                                                                                                                                                                                                                                                                                                  $bodyMail = str_replace('%email.pagetitle%', isset($pagetitle) ? $pagetitle : '-', $bodyMail);
                                                                                                                                                                                                                                                                                                                                                                                                                                                  //...
                                                                                                                                                                                                                                                                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                                                                                                                                                                                                  3. В email.tpl:
                                                                                                                                                                                                                                                                                                                                                                                                                                                  Страница, с которой было отправлено сообщение: <b>%email.pagetitle%</b>
                                                                                                                                                                                                                                                                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                                                                                                                                                                                                2. Иван
                                                                                                                                                                                                                                                                                                                                                                                                                                                  22 июля 2017, 17:23
                                                                                                                                                                                                                                                                                                                                                                                                                                                  Добрый день.
                                                                                                                                                                                                                                                                                                                                                                                                                                                  Установил у себя на сайте — но все время неактивна кнопка «Отправить сообщение»
                                                                                                                                                                                                                                                                                                                                                                                                                                                  В чем может быть проблема? При заполнении всех полей так же

                                                                                                                                                                                                                                                                                                                                                                                                                                                  Так же, если распаковывать архив не в корень сайта, а в папку — как правильно указать патч в настройках (например, распакую feedback в папку mysite.ru/forms)
                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                                                                                    24 июля 2017, 06:11
                                                                                                                                                                                                                                                                                                                                                                                                                                                    Если вам необходимо поместить каталог feedback не в корень сайта, в другую папку, то необходимо соответственно поправить пути. Пути к файлам можно устанавливать как абсолютные, так и относительные (т.е. как вам удобно).
                                                                                                                                                                                                                                                                                                                                                                                                                                                    Например, если вы переместите feedback в папку forms, то необходимо в файле index.html изменить:
                                                                                                                                                                                                                                                                                                                                                                                                                                                    <!-- Пути к CSS файлам -->
                                                                                                                                                                                                                                                                                                                                                                                                                                                    <link rel="stylesheet" href="/forms/feedback/vendors/bootstrap/css/bootstrap.min.css">
                                                                                                                                                                                                                                                                                                                                                                                                                                                    <link rel="stylesheet" href="/forms/feedback/vendors/jgrowl/jquery.jgrowl.min.css">
                                                                                                                                                                                                                                                                                                                                                                                                                                                    <link rel="stylesheet" href="/forms/feedback/css/main.css">
                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                    <!-- Путь к обработчику файла на сервере -->
                                                                                                                                                                                                                                                                                                                                                                                                                                                    <form id="feedbackForm" action="/forms/feedback/process/process.php" enctype="multipart/form-data" novalidate>
                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                    <!-- Путь к файлу captcha.php -->
                                                                                                                                                                                                                                                                                                                                                                                                                                                    <img class="img-captcha" src="/forms/feedback/captcha/captcha.php" data-src="/forms/feedback/captcha/captcha.php">
                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                    <!-- Пути к скриптам -->
                                                                                                                                                                                                                                                                                                                                                                                                                                                    <script src="/forms/feedback/vendors/jquery/jquery-3.2.1.min.js"></script>
                                                                                                                                                                                                                                                                                                                                                                                                                                                    <script src="/forms/feedback/vendors/bootstrap/js/bootstrap.min.js"></script>
                                                                                                                                                                                                                                                                                                                                                                                                                                                    <script src="/forms/feedback/vendors/jgrowl/jquery.jgrowl.min.js"></script>
                                                                                                                                                                                                                                                                                                                                                                                                                                                    <script src="/forms/feedback/js/main.js"></script>
                                                                                                                                                                                                                                                                                                                                                                                                                                                    <script src="/forms/feedback/vendors/mask/jquery.mask.min.js"></script>
                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                    В остальных файлах изменять пути не надо, т.к. они используют относительные пути.

                                                                                                                                                                                                                                                                                                                                                                                                                                                    Это было сделано так для того, чтобы форму обратной связи можно было бы просто вставить на любую страницу сайта, вне зависимости от того, как эта страница расположена относительно каталога feedback.
                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. Иван
                                                                                                                                                                                                                                                                                                                                                                                                                                                      22 июля 2017, 22:38
                                                                                                                                                                                                                                                                                                                                                                                                                                                      Плюс еще кнопка обновить капчу не обновляет изображение
                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. saqhan
                                                                                                                                                                                                                                                                                                                                                                                                                                                        23 июля 2017, 21:26
                                                                                                                                                                                                                                                                                                                                                                                                                                                        можете подсказать где в этом файле ставить свои данные? чтобы письма приходили на свою почту
                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                                                                                          24 июля 2017, 06:19
                                                                                                                                                                                                                                                                                                                                                                                                                                                          Настройка почты осуществляется в файле process_settings.php.
                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. saqhan
                                                                                                                                                                                                                                                                                                                                                                                                                                                            24 июля 2017, 09:48
                                                                                                                                                                                                                                                                                                                                                                                                                                                            Залил папку в корень, кнопка отправить сообщение не активна даже если не загружать на сайт, а просто открыть в папке на рабочем столе((
                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                                                                                              24 июля 2017, 10:22
                                                                                                                                                                                                                                                                                                                                                                                                                                                              А она и должна быть не активна, пока пользователь не нажмёт на чекбокс и не примет политику конфиденциальности и пользовательское соглашение (в соответствии с N 152-ФЗ). Для того чтобы проверить форму, её необходимо загрузить на сервер.
                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. Иван
                                                                                                                                                                                                                                                                                                                                                                                                                                                                24 июля 2017, 11:54
                                                                                                                                                                                                                                                                                                                                                                                                                                                                Форма на сервере. Пути прописаны, галочки ставлю политики.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                Капча не обновляется, кнопка отправить не активна.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                Какие связи могут ещё быть?
                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  24 июля 2017, 14:58
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Больше никаких. Значит, что-то сделали не так. Чтобы определить какие у вас возникли ошибки, откройте консоль разработчика (в Chrome нажать комбинацию клавиш Ctrl+Shift+I) и перейдите на вкладку «Console».
                                                                                                                                                                                                                                                                                                                                                                                                                                                                2. saqhan
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  24 июля 2017, 10:37
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Все загрузил, все очень круто и хорошо, СПАСИБО ВАМ БОЛЬШОЕ)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  только один ньюанс остался, проблема с кодировкой, в файле index.html стоит но все равно символы вместо русского текста. читал тут в комментах такую же проблема, но не смог понять каким образом ее решили.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Что интересно так это на сервере форма нормально отображается со своей кодировкой, а на сервере символы непонятные.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    24 июля 2017, 11:13
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Все файлы имеет кодировку UTF-8. Если ваш сервер имеет другую кодировку, то добавьте в файл .htaccess строчку:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    AddDefaultCharset UTF-8
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. saqhan
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      24 июля 2017, 13:52
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      я наверное надоел Вам своими вопросами) последнее, подскажите как из этой формы сделать выход на главную страницу? форма находится по адресу
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      /feedback/index.html
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      что прописывать в теге На главную

                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Спасибо Вам еще раз)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        24 июля 2017, 14:47
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Просто создать ссылку:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <a href="/">Перейти на главную страницу</a>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. saqhan
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          24 июля 2017, 14:53
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          сделал, так же переходит на на форму регистрации опять. в чем могла бы быть проблема?) посмотрите по адресу saqhan.ru/feedback/index.html
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                                                                                                            24 июля 2017, 15:56
                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Вы хотели добавить данную ссылку в сообщение об успешной отправке. Немного поправил проект, теперь это возможно. Обновлённая версия доступна на Github и в Яндекс хранилище.
                                                                                                                                                                                                                                                                                                                                                                                                                                                      2. Cyberjo
                                                                                                                                                                                                                                                                                                                                                                                                                                                        05 июля 2017, 13:44
                                                                                                                                                                                                                                                                                                                                                                                                                                                        Форма «из коробки» при переносе в корень только .html файла не корректно отображается. Пришлось ручками удалять все слеши (/) перед feedback во всех файлах .html, .js, .php. После этих правок форма отобразилась как показана в примере на сайте. При вводе данных проверку прошла успешно, но не отправила файл.
                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                                                                                          06 июля 2017, 15:37
                                                                                                                                                                                                                                                                                                                                                                                                                                                          Необходимо в стартовую директорию переносить не файлы, а каталог feedback со всем его содержимым.
                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. saqhan
                                                                                                                                                                                                                                                                                                                                                                                                                                                            22 июля 2017, 13:14
                                                                                                                                                                                                                                                                                                                                                                                                                                                            Помогите настроить пожалуйста) куда его на сайте вставлять? где изменять почту, на которые должны приходить письма с сайта?
                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                                                                                              24 июля 2017, 06:18
                                                                                                                                                                                                                                                                                                                                                                                                                                                              Вставлять саму форму можете на любую страницу сайта. Каталог feedback необходимо поместить в корень сайта. На страницу, в которую вы вставляете форму необходимо подключить необходимые стили и скрипты. Настройка почты осуществляется в файле process_settings.php.
                                                                                                                                                                                                                                                                                                                                                                                                                                                        2. Roman
                                                                                                                                                                                                                                                                                                                                                                                                                                                          23 июня 2017, 16:22
                                                                                                                                                                                                                                                                                                                                                                                                                                                          Изменил набор полей в форме (без капчи и прикрепления файлов). Отправка формы без ошибок с сообщением «Форма успешно отправлена!», в файл данные сохраняются, но на почту письмо почему-то не приходит. На сервере есть другие сайты с которых почта отправляется (не с вашей формы). В чем может быть причина?
                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                                                                                            27 июня 2017, 15:40
                                                                                                                                                                                                                                                                                                                                                                                                                                                            Тут надо проверить настройки и требования хостера.
                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. Roman
                                                                                                                                                                                                                                                                                                                                                                                                                                                              23 июня 2017, 18:04
                                                                                                                                                                                                                                                                                                                                                                                                                                                              Перенастроил на отправку по smtp и все работает)
                                                                                                                                                                                                                                                                                                                                                                                                                                                              1. Sergey
                                                                                                                                                                                                                                                                                                                                                                                                                                                                04 августа 2017, 12:12
                                                                                                                                                                                                                                                                                                                                                                                                                                                                здравствуйте. Помогите пожалуйста, как Вы сделали отправку по smtp? Что куда надо прописать?
                                                                                                                                                                                                                                                                                                                                                                                                                                                                У меня на мейл гугл не приходят письма. На мою почту яндекса идут, а на почту заказчика нет… странно очень.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                Спасибо заранее
                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. Roman
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  04 августа 2017, 12:34
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Файл feedback.php
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  // создаём экземпляр класса PHPMailer
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  $mail = new PHPMailer;

                                                                                                                                                                                                                                                                                                                                                                                                                                                                  $mail->From = 'mail@gmail.com';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  $mail->FromName = 'Имя отправителя';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  $mail->Subject = 'Сообщение с формы обратной связи';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  $mail->Body = $output;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  $mail->AddAddress( 'mail@gmail.com' );
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  $mail->CharSet = 'utf-8';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. Sergey
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    04 августа 2017, 13:45
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    в файле feedback/process/process.php
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    я нашел строки:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                    // отправляем письмо с помощью PHPMailer
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    $mail = new PHPMailer;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    $mail->CharSet = 'UTF-8';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    $mail->IsHTML(true); // формат HTML
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    $mail->setFrom(MAIL_FROM, MAIL_FROM_NAME);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    $mail->Subject = MAIL_SUBJECT;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    $mail->Body = $bodyMail;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    $mail->addAddress(MAIL_ADDRESS);

                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Их нужно заменить и прописать почту или что нужно?
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      04 августа 2017, 17:06
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Для отправки писем по SMTP необходимо заменить представленый код на этот:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      $mail = new PHPMailer;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      $mail->IsSMTP(); // использовать SMTP
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      $mail->Host = 'smtp.yandex.ru' // SMTP хост
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      $mail->Port = 465; // SMTP порт
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      $mail->SMTPAuth = true; // SMTP аутентификация
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      $mail->Username = 'ВВЕСТИ_ИМЯ'; // SMTP пользователь
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      $mail->Password = 'ВВЕСТИ_ПАРОЛЬ'; // SMTP пароль
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      $mail->SMTPSecure = 'ssl'; // Тип шифрования
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      $mail->CharSet = 'UTF-8';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      $mail->IsHTML(true); 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      $mail->setFrom(MAIL_FROM, MAIL_FROM_NAME);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      $mail->Subject = MAIL_SUBJECT;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      $mail->Body = $bodyMail;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      $mail->addAddress(MAIL_ADDRESS);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Вместо указанных значений необходимо конечно установить свои SMTP настройки.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      MAIL_FROM, MAIL_FROM_NAME, MAIL_SUBJECT и т.д. — это php-константы. Они устанавливаются в файле process_settings.php.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. Игорь
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        02 августа 2018, 13:03
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Добрый день.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        У нас почтовый сервер, указываем следующие:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        $mail->Host = 'mail. наш домен' // SMTP хост
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        $mail->Port = 587; // SMTP порт
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        $mail->SMTPAuth = true; // SMTP аутентификация
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        $mail->Username = 'наша почта для отправки'; // SMTP пользователь
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        $mail->Password = 'наш пароль'; // SMTP пароль
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        $mail->SMTPSecure = 'tls'; // Тип шифрования

                                                                                                                                                                                                                                                                                                                                                                                                                                                                        и это не работает?
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        хотя в TheBat! стоит настройки smtp:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        порт — 587
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        порт STARTTLS

                                                                                                                                                                                                                                                                                                                                                                                                                                                                        подскажите куда идти)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. Александр Мальцев
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          02 августа 2018, 13:52
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Если у вас возникли проблемы с подключением или отправкой электронной почты через SMTP-сервер, класс SMTP может предоставить дополнительные сведения.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Для этого необходимо включить режим отладки и задать его уровень:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          $mail->SMTPDebug = 4; // 1, 2, 3 или 4
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          $mail->isSMTP();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          // ...
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. Игорь
                                                                                                                                                                                                                                                                                                                                                                                                                                                                            02 августа 2018, 14:51