Как можно использовать обработчик форм PHP для отправки уведомлений о новой заявке в беседу в Telegram через бота?

Здравствуйте. Подскажите, пожалуйста, возможно ли в атрибуте action формы на странице сайта (Снимок экрана 1 - фрагмент кода формы) указать два наименования PHP-скриптов, чтобы второй обработчик отправлял данные в беседу через бота Telegram? Как правильно их интегрировать? Сработают ли оба скрипта после нажатия кнопки "Отправить заявку" (Снимок экрана 2)?  

Или будет более целесообразно использовать cron, чтобы он запускал скрипт каждые 5 минут для проверки изменений в базе данных и отправки уведомлений в беседу Telegram, если такие изменения были обнаружены? 

Также стоит отметить, что автоматизированная система приема заявок "HESK" развернута на виртуальной машине с операционной системой РедОС 8, на веб-сервере nginx с базой данных mariadb.
  • 16 сентября 2024 г. 13:43
Ответы на вопрос 2
Чтобы отправить уведомления о новой заявке в Telegram через бота, лучше всего использовать один PHP-скрипт в атрибуте `action` вашей формы. Вы можете интегрировать логику отправки уведомления в Telegram прямо в обработчик формы. Это позволит отправлять заявку и уведомление о ней в Telegram в одном действии, без необходимости выполнения дополнительных действий или настройки cron.

Вот пример, как это можно реализовать:

1. **Форма HTML**:
   Ваша форма должна иметь атрибут `action`, который указывает на обработчик PHP, и метод `POST`. Например:

   ```html
   <form action="submit.php" method="POST">
       <input type="text" name="name" placeholder="Ваше имя" required>
       <input type="email" name="email" placeholder="Ваш Email" required>
       <button type="submit">Отправить заявку</button>
   </form>
   ```

2. **Обработчик `submit.php`**:
   В обработчике вы можете сначала сохранить данные о заявке в базе данных, а затем отправить уведомление в Telegram. Вот пример простого обработчика:

   ```php
   <?php
   // Настройки базы данных
   $mysqli = new mysqli("localhost", "username", "password", "database");

   // Проверка соединения
   if ($mysqli->connect_error) {
       die("Connection failed: " . $mysqli->connect_error);
   }

   // Получаем данные из формы
   $name = $_POST['name'];
   $email = $_POST['email'];

   // Сохраняем заявку в базе данных (проверьте ваши таблицы и поля)
   $stmt = $mysqli->prepare("INSERT INTO applications (name, email) VALUES (?, ?)");
   $stmt->bind_param("ss", $name, $email);
   $stmt->execute();
   $stmt->close();

   // Отправляем уведомление в Telegram
   $chat_id = 'ваш_chat_id'; // Замените на ваш chat ID
   $token = 'ваш_token'; // Замените на ваш API токен
   $message = "Новая заявка:\nИмя: $name\nEmail: $email";

   $url = "https://api.telegram.org/bot$token/sendMessage?chat_id=$chat_id&text=" . urlencode($message);
   file_get_contents($url);

   // Закрываем соединение
   $mysqli->close();

   // Перенаправляем пользователя на страницу подтверждения
   header('Location: success.php');
   exit();
   ?>
   ```

### Ответы на ваши вопросы:

1. **Указание двух наименований PHP-скриптов**: Нет, в атрибуте `action` формы нельзя указать два наименования скриптов. Однако вы можете объединить их логику в один скрипт (как показано выше), который будет обрабатывать данные и отправлять уведомление.

2. **Использование cron**: Это может быть полезно, если вы хотите проводить периодическую проверку состояния заявок и отправку уведомлений. Если вам нужно регистрировать новые заявки в реальном времени сразу после их отправки, лучше использовать обработчик формы, как указано выше. Но если система требует дальнейшей обработки или анализа данных, то cron может быть уместен.

В итоге, если ваша цель - мгновенная отправка уведомлений при отправке заявок, то используйте обработчик формы, как описано выше. Если же вам нужно делать регулярные отчеты или обрабатывать данные на более позднем этапе, рассмотрите использование cron.
Форма отправляется на сервер, далее либо курлом вызывается второй скрипт, либо (если скрипт отправки в тг находится в рамках одного приложения) второй скрипт подключается инклудом после обработчика и обрабатывает форму своим способом.
Похожие вопросы