lebedevweb
@lebedevweb

Отправка формы в telegram (получить json и отправить в telegram)?

Код формы:
<form class="footer__form" method="POST" enctype="multipart/form-data">
    <input name="name" type="text" placeholder="Ваше имя">
    <input name="phone" type="number" placeholder="Номер телефона" inputmode="decimal">
    <select name="english">
      <option value="Не выбрано">Знание английского</option>
      <option value="Начальный">Начальный</option>
      <option value="Средний">Средний</option>
      <option value="Продвинутый">Продвинутый</option>
    </select>
    <input name="income" type="number" placeholder="Желаемый доход" inputmode="decimal">
    <input name="theme" type="hidden" value="Заявка с сайта">
    <p class="footer__form__result"></p>
    <div class="footer__form__submit">
      <button class="btn btn__form" type="submit">Отправить</button>
    </div>
  </form>


Код обработчика:
(function sendMessage() {
    const result = document.querySelector('.footer__form__result')
    const formId = '.footer__form'
    const form = document.querySelector(formId)

    function toJSONString(form) {
        let obj = {};
	let elements = form.querySelectorAll('input, select')
	for (let i = 0; i < elements.length; ++i) {
	  let element = elements[i]
	  let name = element.name
	  let value = element.value
	  if (name) {
	    obj[ name ] = value
	  }
	}
	// console.log(JSON.stringify(obj))
       return JSON.stringify(obj)
    }
    if (form) {
      form.addEventListener('submit', event => {
        event.preventDefault()
        const json = toJSONString(form)
	console.log(json)
	const xhr = new XMLHttpRequest()
	xhr.open('POST', 'send.php', true)
	  xhr.onload = function(oEvent) {
	    if (xhr.status === 200) {
	      alert("Форма отправлена")
            }
	    if (xhr.status !== 200) {
	      alert("Ошибка отправки формы")
             }
      }
		
      xhr.setRequestHeader('Content-Type', 'application/json')
      xhr.send(json)

      xhr.onreadystatechange = function () {
        if (xhr.readyState === 4 && xhr.status === 200) {
	  result.innerHTML = this.responseText;
	}
      }
      })
    }
  }


Отправка:
<?php

header("Content-Type: application/json");
$data = json_decode(file_get_contents("php://input"));
echo $data;


if ($_SERVER["REQUEST_METHOD"] == "POST") {
//В переменную $token нужно вставить токен, который нам прислал @botFather
	$token = "5071414683:AAEQXh9plvQw8f8ePaxwx_n71L94ZeSYB-Q";

//Сюда вставляем chat_id
	$chat_id = "-768297723";

//Определяем переменные для передачи данных из нашей формы
	if (isset($_POST['name'])) {
		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['english'])) {
			if (!empty($_POST['english'])) {
				$english = "Знание английского: " . "%2B" . strip_tags($_POST['english']) . "%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}");

}

function console_log($data){ // сама функция
	if(is_array($data) || is_object($data)){
		echo("<script>console.log('php_array: ".json_encode($data)."');</script>");
	} else {
		echo("<script>console.log('php_string: ".$data."');</script>");
	}
}

console_log($data);
?>


Как получить в php данные из формы и отправить эти данные в telegram?
  • Вопрос задан
  • 519 просмотров
Решения вопроса 1
irishmann
@irishmann
Научись пользоваться дебаггером
Отправь просто данные формы не запаковывая в JSON
var form = document.querySelector('form');
var data = new FormData(form);
var req = new XMLHttpRequest();
req.send(data);


В PHP убираешь блок
header("Content-Type: application/json");
$data = json_decode(file_get_contents("php://input"));
echo $data;

Он не нужен, просто работай c $_POST. Кстати в этом блоке ошибка. Ты stdClass пытаешься вывести как строку.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы