@IvanIvanOvcharenko

Как принять данные на PHP при отправке формы с помощью fetch?

Добрый день! Решаю задачу отправки данных формы в телеграмм чат ( код будет ниже ). Сначала реализовал это топорно , после успешной отправки формы юзера кидало на пустую страницу с текстом "Спасибо! В ближайшее время наш менеджер свяжется с Вами"

Решил реализовать отправку через ajax с помощью fetch , но столкнулся с трудностями. Код ниже

Вот html код формы

<form  action="telegram.php" method="POST" class="form-top">
                    <div class="step">
                        <input required type="text" name="name" placeholder="Ваше имя*">
                        <input required type="text" name="phone" placeholder="Ваш телефон*">
                        <input required type="text" name="car" placeholder="Ваш автомобиль*">
                        <input type="hidden" name="page" value="Главная страница">
                    </div>
                    <button type="submit">Получить консультацию</button>
                </form>


js код

const ajaxSend = (formData) => {
            fetch('telegram.php', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/x-www-form-urlencoded',
                },
                body: formData
            })
                .then(response => alert("Заявка успешно отправлена"))
                .catch(error => console.error("Ошибка"))

        };
        const forms = document.querySelector("form");

        // for (let i = 0; i < forms.length; i++) {
       
            forms.addEventListener('submit', function (e) {
                e.preventDefault();
                const formData = new FormData();
                const inputs = document.querySelectorAll("form input[type='text']");
                for(let item of inputs){
                    formData.append(item.name, item.value);
                }
                // for(let [name, value] of formData) {
                //     console.log(`${name} = ${value}`);
                // }

                ajaxSend(formData);
                this.reset();
            });


php обработчик

<?php



if ($_SERVER["REQUEST_METHOD"] == "POST") {

    if (!empty($_POST["name"]) && !empty($_POST["phone"]) && !empty($_POST["car"]) && !empty($_POST["page"])){
        if (isset($_POST['name'])) {
            if (!empty($_POST['name'])){
                $uname = strip_tags($_POST['name']);
                $unameFieldset = "Имя:%20";
            }
        }
        if (isset($_POST['phone'])) {
            if (!empty($_POST['phone'])){
                $uphone = strip_tags($_POST['phone']);
                $uphoneFieldset = "Телефон:%20";
            }
        }
        if (isset($_POST['car'])) {
            if (!empty($_POST['car'])){
                $formInfo = strip_tags($_POST['car']);
                $formInfoFieldset = "Автомобиль:%20";
            }
        }
        if (isset($_POST['page'])) {
            if (!empty($_POST['page'])){
                $pagename = strip_tags($_POST['page']);
                $pagenameset = "Страница:%20";
            }
        }

        $token = "";
        $chat_id = "";
        $arr = array(
            $unameFieldset => $uname,
            $uphoneFieldset => $uphone,
            $formInfoFieldset => $formInfo,
            $pagenameset => $pagename
        );
        foreach($arr as $key => $value) {
            $txt .= "<b>".$key."</b>".$value."%0A";
        };
        $sendToTelegram = fopen("https://api.telegram.org/bot".$token."/sendMessage?chat_id=".$chat_id."&parse_mode=html&text=".$txt,"r");


        if ($sendToTelegram == 'false') {
            echo '<p class="fail"><b>Ошибка. Сообщение не отправлено!</b></p>';

        } else {
            echo '<h3 class="success">Спасибо! В ближайшее время наш менеджер свяжется с Вами.</h3> ';



        }
    } else {
        echo '<p class="fail">Ошибка. Вы заполнили не все обязательные поля!</p>';

       var_dump($_POST);

    }
} else {
    header ("Location: "); // главная страница вашего лендинга
}


После сабмита, вижу поп ап с сообщением об успешной отправке данных , но в телеграмм значение полей формы не приходит. Я открыл вкладочку Нетворк , посмотреть ответ от обработчика telegram.php и увидел что попадаю в ветку else , в которой выводиться сообщение "Ошибка. Вы заполнили не все обязательные поля!"
В данной ветке вывожу через вар дамп массив $_POST
результат на скрине ниже

5f71b5513341a985763258.png

Вопрос в том , как мне в php правильно вытянуть отсюда данные полей форм
заранее спасибо за ответы!
  • Вопрос задан
  • 485 просмотров
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
Как минимум, вы не отправляете значение обязательного поля page, потому что у него type=hidden, а у вас в селекторе type=text.
Ну и заголовок Content-Type уберите.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы