Как связать форму на сайте с Telegram

Заявки с сайта в Telegram

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

И вот, наконец-то посидел и разобрался. Конечно постичь все тонкости API - не удалось, но по кусочкам насобирал информацию и удалось отправить данные из контактной формы в чат Telegram. 

Это актуализированная статья, в которой решены такие проблемы, как отправка файла и пропадающий символ «+», который не приходил в сообщение и из-за этого номер телефона был некликабельным.

Важно: для отправки файла из формы в Телеграм на вашем сервере должен быть включен cURL. Обратитесь к техподдержке вашего хостинга, они подскажут что делать и как включить. У многих он включен по умолчанию. Например, на моем хостинге Beget - так.

Как связать форму на сайте с Telegram

Итак, давайте приступим. Первое что нам нужно, это создать своего бота. Делается это достаточно просто. В поиске наберите @botfather, откройте родительского бота и нажмите "Start":

Как связать форму с Telegram

Далее:

  • Пишем команду /newbot, для создания нового бота.
  • Придумываем имя бота.
  • Придумываем ник бота.
Создание бота в Телеграм

Если все прошло успешно, то увидите поздравления и токен вашего бота, в моем случае это:

341996777:AAHbnuvQib-vHU47i-6hbUrCU9D-qHYekxc

Теперь нужно найти своего бота в поиске, указав его ник и нажать "Start", чтобы активировать его. В моем случае ник @DWS_MESSAGE_bot.

Активация бота в Telegram

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

Зайдите в меню, нажмите "New Group" и задайте имя вашему чату.

Создание чата для приема заявок

Не забываем пригласить своего бота в чат.

Добавление бота в чат для приема заявок

На данный момент у нас есть бот, мы знаем его токен, есть чат, в который будут приходить заявки, и нам осталось узнать только id чата. Для этого, напишем в чате:

  • /join @ник_бота

А затем, в браузере введем:

https://api.telegram.org/botXXXXXXXXXXXXXXXXXXXXXXX/getUpdates

где, XXXXXXXXXXXXXXXXXXXXXXX - токен вашего бота, полученный ранее.

Если все сделали правильно, то перед вами откроется подобная страница:

получение id чата в Телеграм

Нас интересует объект "chat":{"id":-209253141. — Это id моего тестового чата. На данном этапе у нас есть все, чтобы отправлять текстовые сообщение из контактной формы на сайте в Telegram. Давайте займемся реализацией PHP-обработчика нашей формы, и сделаем разметку самой формы.

Разметка формы

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

<form id="form-contact" method="POST" class="contact-form" autocomplete="off" enctype="multipart/form-data">
   <p class="contact-form__title">Закажите обратный звонок и наш консультант свяжется с вами</p>
   <p class="contact-form__message"></p>
   <div class="contact-form__input-wrapper contact-form__input-wrapper_name">
     <input name="name" type="text" class="contact-form__input contact-form__input_name" tabindex="0" placeholder="Введите ваше имя">
   </div>
   <div class="contact-form__input-wrapper contact-form__input-wrapper_phone">
     <input name="phone" type="tel" class="contact-form__input contact-form__input_phone" tabindex="0" placeholder="Введите ваш телефон">
   </div>
   <div class="contact-form__input-wrapper">
     <input type="file" name="file" id="contact-form__input_file" class="contact-form__input contact-form__input_file">
     <label for="contact-form__input_file" class="contact-form__file-button">
        <span class="contact-form__file-text">Выберите файл</span>
     </label>
   </div>
   <input name="theme" type="hidden" class="contact-form__input contact-form__input_theme"  value="Заявка с сайта">
   <button type="submit" class="contact-form__button">Отправить</button>
</form>

Добавил стили - получилось так:

Отправка формы в Телеграм

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

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<script src="/telegramform/js/telegramform.js"></script>

Код с AJAX запросом. Файл - telegramform.js

(function ($) {
$(".contact-form").submit(function (event) {
  event.preventDefault();
 
  // Сохраняем в переменную form id текущей формы, на которой сработало событие submit
  let form = $('#' + $(this).attr('id'))[0];
  
  // Сохраняем в переменную класс с параграфом для вывода сообщений
  let message = $(this).find(".contact-form__message");
 
  let fd = new FormData(form);
  $.ajax({
    url: "/telegramform/php/send-message-to-telegram.php",
    type: "POST",
    data: fd,
    processData: false,
    contentType: false,
    success: function success(res) {
      let respond = $.parseJSON(res);
      if (respond.err) {
        message.html(respond.err).css('color','#d42121');
        setTimeout(()=> {
          message.text('');
        }, 3000);
      } else if(respond.okSend) {
        message.html(respond.okSend).css('color','#21d4bb');
        setTimeout(()=> {
          message.text('');
        }, 3000);
      } else {
        alert ('Необработанная ошибка. Проверьте консоль и устраните.');
      }
    },
  });
});
  
}(jQuery));

А теперь сам обработчик нашей формы. Файл - send-message-to-telegram.php:

<?php
$msgs = [];
if ($_SERVER["REQUEST_METHOD"] == "POST") {

    $token = "341996777:AAHbnuvQib-vHU47i-6hbUrCU9D-qHYekxc";
    $chat_id = "-209253141";

    if (!empty($_POST['name']) && !empty($_POST['phone'])){
        $bot_url = "https://api.telegram.org/bot{$token}/";
        $urlForPhoto = $bot_url . "sendPhoto?chat_id=" . $chat_id;

        if(!empty($_FILES['file']['tmp_name'])) {
            
            // Путь загрузки файлов
            $path = $_SERVER['DOCUMENT_ROOT'] . '/telegramform/tmp/';

            // Массив допустимых значений типа файла
            $types = array('image/gif', 'image/png', 'image/jpeg');

            // Максимальный размер файла
            $size = 1024000;

            // Проверяем тип файла
             if (!in_array($_FILES['file']['type'], $types)) {
                 $msgs['err'] = 'Запрещённый тип файла.';
                echo json_encode($msgs);
                die();
             }
             
             // Проверяем размер файла
             if ($_FILES['file']['size'] > $size) {
                 $msgs['err'] = 'Слишком большой размер файла.';
                echo json_encode($msgs);
                die('Слишком большой размер файла.');
             }
             
             // Загрузка файла и вывод сообщения
             if (!@copy($_FILES['file']['tmp_name'], $path . $_FILES['file']['name'])) {
                 $msgs['err'] = 'Что-то пошло не так. Файл не отправлен!';
                 echo json_encode($msgs);
             } else {
                $filePath = $path . $_FILES['file']['name'];
                $post_fields = array('chat_id' => $chat_id, 'photo' => new CURLFile(realpath($filePath)) );
                $ch = curl_init();
                curl_setopt($ch, CURLOPT_HTTPHEADER, array( "Content-Type:multipart/form-data" ));
                curl_setopt($ch, CURLOPT_URL, $urlForPhoto);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
                curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
                $output = curl_exec($ch);
                unlink($filePath);
             }
        }

        if (isset($_POST['name'])) {
          if (!empty($_POST['name'])){
            $name = "Имя пославшего: " . strip_tags($_POST['name']) . "%0A";
          }
        }

        if (isset($_POST['phone'])) {
          if (!empty($_POST['phone'])){
            $phone = "Телефон: " . "%2B" . strip_tags($_POST['phone']) . "%0A";
          }
        }

        if (isset($_POST['theme'])) {
          if (!empty($_POST['theme'])){
            $theme = "Тема: " .strip_tags($_POST['theme']);
          }
        }
        // Формируем текст сообщения
        $txt = $name . $phone . $theme;

        $sendTextToTelegram = file_get_contents("https://api.telegram.org/bot{$token}/sendMessage?chat_id={$chat_id}&parse_mode=html&text={$txt}");
        if ($output && $sendTextToTelegram) {
            $msgs['okSend'] = 'Спасибо за отправку вашего сообщения!';
            echo json_encode($msgs);
        } elseif ($sendTextToTelegram) {
            $msgs['okSend'] = 'Спасибо за отправку вашего сообщения!';
            echo json_encode($msgs);
          return true;
        } else {
            $msgs['err'] = 'Ошибка. Сообщение не отправлено!';
            echo json_encode($msgs);
            die('Ошибка. Сообщение не отправлено!');
        }

    } else {
        $msgs['err'] = 'Ошибка. Вы заполнили не все обязательные поля!';
        echo json_encode($msgs);;
    }
} else {
  header ("Location: /");
}
?>

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

Тут стоит обратить внимание на переменные $token и $chat_id. Не забывайте подставить туда свои данные. Кроме того, не забывайте, что все это будет работать, только если данные идут через https, хотя у меня на тестовом работает и через http.

Вот так выглядит отправка текстового сообщения:

Вот так с файлом:

Отправка файла из формы в Телеграм

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

Вот так, средствами PHP можно отправлять в Telegram сообщения и файлы. Если вы используете CMS MODX, то на блоге igamov.ru есть отличная инструкция по интеграции формы с мессенджером.

Исходник для отправки данных формы в Телеграм

Размер: 0,008

Кстати, подписывайтесь на Telegram канал. Уведомления об обновлениях на блоге, в первую очередь, приходят туда)

Похожие публикации

221 комментарий

  1. Сергей

    Здравствуйте, а не подскажите, если делать бота не для себя, при этом доступа к телефону нет. Я могу обяснить как реализовать, но будет ли это легко для этого человека не знаю. Или я могу создать бота и чат у себя, и человеку нужно будет только добавить чат у себя?

    1. dimadv7

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

    2. Юлия

      Да можно ведь всё ещё проще сделать. Есть разные сервисы, например, form2chat.io/ru, где это всё делается за минуту. Просто копируете ссылку и вставляется её в атрибут action. И сами можете выбрать, на какой мессенджер получать заявки.

    3. Дмитрий Давыдов

      Юлия, зачем платить за сервис, если статья рассчитана минут на 15 и больше не нужно платить никому, ничего? Ну или на фрилансе заказать за 300 рублей единожды.

  2. Вадим

    Как сделать что бы форма закрывалась после успешной отправки?

    1. dimadv7

      Вадим, в смысле как? А как вы уже пробовали? Что делали? Какие возникли сложности? Какие ошибки появились?

  3. игорь

    спасибо, каждый раз открываю, смотрю

  4. Роман

    Добрый день.
    приходит номер телефона без "+"
    вопрос уже был выше, но никто не ответил.
    Как решить?

    1. dimadv7

      Роман, на следующей неделе попробую решить вопрос и добавить в статью то, как это делается.

  5. Роман

    dimadv7, Спасибо

    1. dimadv7

      По поводу "+", просто в разметке pattern у поля с телефоном уберите. То есть вместо:

      <input name="phone" type="tel" class="form-input__phone" tabindex="0" pattern="^[ 0-9]+$" placeholder="Введите ваш телефон" required>
      

      Сделайте:

      <input name="phone" type="tel" class="form-input__phone" tabindex="0" placeholder="Введите ваш телефон" required>
      
  6. Михаил

    Честно сказать не понял как реализовать если у меня уже есть обработчик, который отправляет заявки в amocrm. Как добавить что бы отправлял и в телеграмм одновременно?

  7. Алексей

    Я копировал просто со страницы весь код, и там ошибка.
    js файл

     $("form-element").submit(function () {
    

    надо поставить точку

     $(".form-element").submit(function () {
    
    1. dimadv7

      Алексей, спасибо, поправил.

  8. Жалолиддин

    не работает

    1. dimadv7

      Жалолиддин, у всех работает, ищите ошибку.

  9. илья

    а капчу можно прикрутить ?

    1. dimadv7

      Илья, конечно можно. Статья о том, как добавить recaptcha

  10. Дмитрий

    Здравствуйте.
    Столкнулся с проблемой. При отправке появляется сообщение, что все отправлено, но ничего не происходит. Пробовал и Ваш готовый шаблон, так и предоставленный код, в консоль не выводится никаких ошибок.
    Тесты проходили на трех разных хостингах, везде одинаковый результат.
    Хоть тг не заблокирован у меня в стране, по совету из комментариев, пытался заменить api.telegram.org на актуальный адрес 149.154.167.220.

    1. dimadv7

      Дмитрий, вы используете https же? PHP выше чем 7.0 версии? Пробовали включать вывод php-ошибок?

    2. Дмитрий

      dimadv7, Прошу прощения, косяк был с моей стороны. Кстати, запустилось и с http, тоже

    3. dimadv7

      Дмитрий. Понял, но приходить сообщения не должны были с http, только с https.

    4. Дмитрий

      dimadv7, но приходят :)

    5. dimadv7

      Странно, ну ок ))

  11. Арсен

    Все работает. Спасибо вам огромное!
    Это просто круто!

  12. Елена

    Подскажите, как сделать, чтобы номер телефона в телеграмме отображался кликабельной ссылкой?

    1. dimadv7

      Елена, возможно вы об этом говорите

    2. Елена

      dimadv7, нет. Мой вопрос связан с данной статьей. При передачи данных формы почему-то номер телефоны в Телеграм приходит без "+", соответственно в сообщении он не кликабелен, чтобы соверщить сразу же звонок. И мой вопрос в том, как заставить Телеграм передавать "+" перед номеров телефона. При этом в поле формы человек вводит "+".

    3. dimadv7

      Елена, попробуйте убрать strip_tags в обработчике формы. То есть тут:

      $phone = strip_tags($_POST['phone']);

      И сделать так:

      $phone = $_POST['phone'];
    4. Альберт

      dimadv7, как еще можно починить это? Не работает убираение strip_tags

  13. Афанасий

    Как добавить прокси? без прокси отказывается работать

  14. Влад

    Делаю все также. Но почему-то выдает ошибку и не отправляет сообщение. Жалуется на 30 и 33 строку
    В чем проблема?

  15. Сергей

    Получил токен, создал группу, добавил бота, запустил его. При вводе в браузере строки https://api.telegram.org/bot1064142492:AAG3T5__8X-zrqYhfNaYZ20f2iBe3i7YpJs/getUpdates пишет Не удается получить доступ к сайту. Где может быть ошибка?

    1. dimadv7

      Сергей, может быть Роскомнадзор?

    2. Сергей

      dimadv7, Да, это он разобрался уже. Теперь не получается реализовать возможность, чтобы бот присылал заявки в группу, пишет только сам. У бота написано написано что не может писать сообщения. Через бота отца не могу разобраться как включить этот функционал.

  16. iluha

    Здравствуйте.
    А подскажите, как быть с ошибкой:

    Warning: fopen(https://api.telegram.org/bot...
    ...: failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request in...

    На почту приходит, а в телеграм - нет.

    1. dimadv7

      iluha, у сайта есть ssl сертификат? через https или http запрос идет?

    2. iluha

      dimadv7,
      да, ssl и https.

    3. dimadv7

      iluha, вы изменяли код в исходнике?

    4. iluha

      dimadv7,
      фуф, разобрался.
      Этот телеграм-бот не принимает хтмл разметку.
      Убрал все символы "<", , и т.д. и всё заработало.

      Всем спасибо.

  17. Рустам

    У меня все работает кроме одного когда сообщение отправляется мне приходит не только спасибо за отправку но ещё и это
    Notice: Undefined variable: txt in C:\xampp\htdocs\sendToTelegram\telegramform\php\send-message-to-telegram.php on line 32
    Спасибо за отправку вашего сообщения!

    Если что я работаю на локалхосте но все же какого ЧЕРТА? он не может определить переменную

    1. dimadv7

      Рустам, нужно отключать вывод ошибок и предупреждений в php на продакшине. Это, как минимум, не безопасно. Предупреждении говорит о том, что вы, скорее всего, пытаетесь объявить переменную налету. PHP - позволяет это делать, но мы пытаемся сразу к ней обратиться, и, все, в целом, работает, но с предупреждением. Если хотите просто от предупреждения избавиться, то нужно заранее объявить переменную. Если предупреждение вам, в целом, не мешает, то скорее всего включен вывод предупреждений в php, - отключите, и это сообщение не будет появляться. Думаю, как-то так.

  18. Антон

    вылазит ошибка not found в чем причина?

    1. dimadv7

      Антон, в том, что файл не найден и нужно правильно прописать пути. Открой консоль, посмотри что за файл и в каком месте.

  19. Юрий

    Здравствуйте. А есть какая-нибудь возможность дублировать сообщение еще на электронный ящик? Скажем пользователь отправил письмо, оно пришло в телеграмм и продублировалось на почту. В телеграме гораздо удобнее принимать и обрабатывать письма, однако, кто его знает что там еще Роскомнадзор придумает, в случае блокировок телеграмма не хочется терять заявки, и хорошо бы что бы они были продублированы на почту

    1. dimadv7

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

    2. Юрий

      dimadv7, а не подскажите в какую сторону копать чтобы сообщение одновременно и на почту и в телеграм приходило? два обработчика каким-то образом на форму вешать, или в один обработчик оба скрипта добавить?

    3. dimadv7

      Юрий, конечно 1 обработчик, просто все отправляете на почту, а потом, по этой статье, дополняете код и отправляете в телеграм.

  20. Виктор

    Приветствую. Спасибо за работу, а как реализовать страницу благодарности? Спс

    1. dimadv7

      Виктор, здравствуйте. Посмотрите как реализовано тут.

  21. Ярослав

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

    1. dimadv7

      Ярослав, здравствуйте. А id у форм разный?

  22. Павел

    Здравствуйте, Дмитрий!
    Подскажите, пожалуйста:
    У меня несколько сайтов:
    1 сайт: мой-сайт-crm.ru - на нем стоит SuiteCRM (бесплатный аналог Sugar)
    и много мелких сайтов-лендингов с формами.
    Формы формируются в CRM и на сайтах -лендингах нужно вставить вот этот код, который ниже.
    Это всё работает хорошо.
    Мне нужно, чтобы с сайтов-лендингов, после нажатия кнопки Submit, сайт-лендинг еще и отправлял сообщение в Telegram. Сообщение короткое: "Заявка с сайта". И всё. Этого достаточно.
    Как установить и настроить это всё из статьи понятно.
    Но как связать мою форму с отправкой в Telegram?
    Подскажи, пожалуйста.

    <!-- TODO ???

    -->

    Имя:

    Фамилия: *

    Тел. (моб.) :

    // <![CDATA[
    function submit_form() {
    if (typeof(validateCaptchaAndSubmit) != 'undefined') {
    validateCaptchaAndSubmit();
    } else {
    check_webtolead_fields();
    //document.WebToLeadForm.submit();
    }
    }

    function check_webtolead_fields() {
    if (document.getElementById('bool_id') != null) {
    var reqs = document.getElementById('bool_id').value;
    bools = reqs.substring(0, reqs.lastIndexOf(';'));
    var bool_fields = new Array();
    var bool_fields = bools.split(';');
    nbr_fields = bool_fields.length;
    for (var i = 0; i

    1. dimadv7

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

  23. а

    ипать пацан ты бизнесмен

  24. Иван

    Здравствуйте, вы мне действительно помогли, но как убрать у номера телефона ограничение по цифрам, я не использую это поле как "номер" а по-другому, мне пишет при вводе букв:"Введите данные в указаном формате", "strip_tags" Убрал не помогает, подскажите пожалуйста

    1. dimadv7

      Иван, здравствуйте. Убрать еще нужно у поля:

      pattern="^[ 0-9]+$"

      в html

  25. Sergey

    Добрый день,подскажите, как сделать что бы "send-message-to-telegram.php" срабатывал при переходе на thank you

    1. dimadv7

      Sergey, разместить весь код на странице thank you и прописать эту страницу в action формы

  26. Иван

    Добрый день !
    Выдает ошибки и не отправляет ничего
    .....PHP Warning: fopen(): SSL: Connection reset by peer in
    .....PHP Warning: fopen(): Failed to enable crypto in
    PHP Warning: fopen(https://api.telegram.org/botXXXXXXXX/sendMessage?chat_id=XXXXX&parse_mode=html&text=<b>Кто оставил заявку: </b> ): failed to open stream: operation failed in

    1. Асадбек

      Иван, у вас ssl сертификата нету либо хостинг не поддерживает тг

  27. Николай

    Добрый день, все работает! Большое спасибо) Есть есть один вопрос: как сделать так чтобы с сообщением передавались utm-метки?

    1. dimadv7

      Николай, здравствуйте. Можно создать скрытое поле и в него помещать данные из:

      isset($_GET['utm_term']);

      Или любых других параметров.

  28. Alex

    Здравствуйте!
    Подскажите как создать форму чтоб уходил запрос на 2 обработчика?
    Пример:

    данные...

    ресурсы у меня такие:
    -свой файл обработчик данных
    -телеграм уведомление
    Каким образом мне сделать два обработчика action ?

    Спасибо!

    1. dimadv7

      Alex, здравствуйте. Делайте 1 обработчик. Сначала отправляйте, например, на почту, а потом в телеграм. Зачем усложнять? В любом случае action только 1 можно задать. А дальше уже в PHP.

  29. Николай

    Добрый день, можете показать что добавить в index.html, а что в send-message-to-telegram.php для передачи utm-меток. Заранее спасибо

    1. Дмитрий Давыдов

      Николай, в статье же написано, что и куда. Разметка в index.html конечно-же. Так как html - это язык разметки. А остальное что и куда подписано же...

  30. Вячеслав

    Здравствуйте, статья невероятно полезная, но у меня вопрос. У меня сайт сделан на конструкторе wix, как туда перенести сие детище?

    1. Вячеслав

      Учитывая, что wix не поддерживает php

  31. Артём

    Дмитрий, такой вопрос. А как можно сделать, чтобы именно сообщения с телеграмм бота шли в форму сайта?

    1. Дмитрий Давыдов

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

  32. Артём

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

    1. Дмитрий Давыдов

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

  33. Vlad

    после нажатия отправить происходит загрузка страницы и выкидывает ошибку:
    Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException
    The POST method is not supported for this route. Supported methods: GET, HEAD.

    1. Дмитрий Давыдов

      Vlad, ну написано же, что не поддерживает роут метод POST...

  34. Vlad

    Сменил метод POST на PATCH, ошибка исчезла теперь, но страница просто обновляется, а в телегу заявка не приходит, токен и ид 1000 раз перепроверил что правильные ввёл

  35. Денис

    здравствуйте. приходят пустые поля. куда копать?

    1. Дмитрий Давыдов

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

  36. zet

    Здравствуте Дмитрий как отослать вместе с и инпутами и url сайта

    1. Дмитрий Давыдов

      zet, здравствуйте. Создать скрытое поле, дав ему type="hidden", затем в js при помощи window.location.href получить url и поместить его в значение value скрытого поля. Далее, по аналогии с полем для ввода имени обработать его в php.

    2. zet

      Спасибо Дмитрий за ответ но как мне поместить URL в скрытое поле

    3. Дмитрий Давыдов

      zet, если используете jquery, то например так:

      $('.class-name').val(window.location.href);
      
    4. Дмитрий Давыдов

      Вот, сделал небольшую статью на эту тему)

  37. zet

    ОГромная благодарность ты человечище!!!!

    1. Дмитрий Давыдов

      zet, ах-ха. Спасибо) Будут вопросы, пиши)

  38. emigrant

    Спасибо за гайд!
    Но у меня проблема, почему-то файл не хочет отправлятся, при том, что всё остальное приходит. Может быть ты встречался с такой ошибкой и знаешь как решить?

    1. Дмитрий Давыдов

      Emigrant, нужно больше информации. Есть ли ошибки в консоли?

  39. Dima

    Можно ли настроить под эту форму?

    Заказать услугу

    1. Дмитрий Давыдов

      Дмитрий, нужна настройка формы? На странице услуг цены, свяжитесь со мной.

  40. Я

    Добрый вечер!

    Как сделать, чтобы в нескольких формах работало?

    1. Дмитрий Давыдов

      Как вы уже пробовали? С какой проблемой или ошибкой столкнулись? Как пытались ее решить?

    2. Я

      Дмитрий Давыдов, менял переменные и ничего не выходит. Я в этом не силен
      Вот и интересуюсь у Вас, могли бы подсказать, буду признателен)
      Ошибок вроде никаких, просто не работает

    3. Дмитрий Давыдов

      Помочь с чем? С чего вы взяли, что не работает? Как вы в этом убедились? Откройте консоль браузера, отправьте форму, проверьте есть ли там ошибки.

    4. Я

      Дмитрий Давыдов, __http://pokraskavkieve.com.ua в > оставить заявку> как в этой форме сделать чтобы работало? Я прошу прощение, помогите плиз решить вопрос

    5. Дмитрий Давыдов

      Во-первых, у вас jQuery подключен несколько раз, а должен быть только 1 раз. Во-вторых подключайте свежую версию (3), а не 1.12.4 и 1.10.1 , как у вас. В-третьих, подключайте скрипты, которые зависят от jQuery, после подключения самого jQuery.

  41. Andrey

    ДД. Все работает отлично , но столкнулся с проблемой отправки формы на смартфоне. В мобильной версии сайта не отправляет форму если сделать фото с камеры. Видимо нужно юзать MediaDevices.getUserMedia() , но пока без результата. Подскажи пжл , может нужно объявить разрешения для камеры в PHP ?

  42. Ali

    Здравствуйте! Первый раз работаю с формами.
    Какая последовательность действии при загрузке файлов на сайт этих файлов?
    На сайте уже есть папки images и css файлы туда же кидать или создавать новые?
    Файл index скопировать содержимое и вставить в основную папку сайта с индекс

    1. Дмитрий Давыдов

      Ali, здравствуйте. Можете использвоать свою структуру сайта, но следите за путями к файлам.

  43. Андрей

    Дмитрий, здравствуйте!
    // Максимальный размер файла
    $size = 1024000;

    Больше Нельзя?

    1. Дмитрий Давыдов

      Андрей, сейчас, вроде, 2 гигабайта.

    2. Дмитрий Давыдов

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

  44. Андрей

    Дмитрий, добрый день! С фото разобрался. Для видео видимо нужно что-то подправить.

    1. Дмитрий

      Андрей, вот же написанно:

      // Массив допустимых значений типа файла
                  $types = array('image/gif', 'image/png', 'image/jpeg');
      
  45. Андрей

    Дмитрий, менял $types = array('video/mp4', 'video/mov');
    не помогает к сожалению

    1. Дмитрий Давыдов

      Андрей, тут тоже:

      $post_fields = array('chat_id' => $chat_id, 'photo' => new CURLFile(realpath($filePath)) );
  46. Андрей

    Дмитрий какое ' ' волшебство вместо 'photo'

  47. Дмитрий Давыдов

    Андрей, думаю, document

  48. Андрей

    Дмитрий, вопрос решен!

    $urlForVideo = $bot_url . "sendVideo?chat_id=" . $chat_id;
    -
    $post_fields = array('chat_id' =&gt; $chat_id, 'video' =&gt; new CURLFile(realpath($filePath)) );
    curl_setopt($ch, CURLOPT_URL, $urlForVideo);
    
  49. Андрей

    но появился новый вопрос, как дописать ещё фото?

  50. Андрей

    Привет, отличная статья, без воды и по сути! Однако обратил внимание на "злощастный" плюс перед номером телефона. При указании "%2B" . $phone - в сообщении в Telegram получаем пробел перед этим самым плюсом. Как следствие цвет "+" - как у обычного текста (чёрный или белый - в зависимости от режима Telegram), а не синий и отсутствие его подчёркивания, как цифр номера телефона. Получилось вылечить такой нюанс таким образом - rawurlencode('Телефон: ' . stripe_tags( $_POST['subscribe_phone'] )) ; Может кому пригодится.))

Добавить комментарий