За последние 24 часа нас посетили 18210 программистов и 1697 роботов. Сейчас ищут 1484 программиста ...

Обратная связь через сообщение в Telegtam

Тема в разделе "Вопросы от блондинок", создана пользователем Zlata Jesen, 19 окт 2022.

  1. Zlata Jesen

    Zlata Jesen Новичок

    С нами с:
    18 окт 2022
    Сообщения:
    5
    Симпатии:
    0
    Всем доброго дня, в раздел "вопросы от новичков" писать не решилась, так как даже не новичок ещё, а полный "чайник" в PHP.
    Пытаюсь для сайта сделать форму обратной связи с отправкой сообщений в Telegram, и даже почти всё получилось, но... как не гуглю, не могу понять некоторых нюансов. Объясните, пожалуйста то, что я не понимаю.
    Итак, исходные данные.
    Форма:

    HTML:
    1.                    
    2. <form action="send.php" method="post">
    3. <input type="text" name="name" placeholder="Имя">
    4. <input type="tel" name="phone" placeholder="Телефон" required="">
    5. <input type="text" name="email" placeholder="E-mail" >
    6. <button type="submit">Отправить</button>
    7. </form>
    PHP:
    1. <?php
    2. ini_set('display_errors', 1);
    3. ?>
    4.  
    5. <?php
    6. $token = "вставила токен бота";
    7. $chat_id = "вставила id чата с админом сайта";
    8. $name = $_POST['name'];
    9. $phone = $_POST['phone'];
    10. $email = $_POST['email'];
    11. $txt = ''; //пришлось объявить, чтобы не было ошибки в foreach на необъявленную переменную txt
    12. $arr = array(
    13.   'Имя пользователя: ' => $name,
    14.   'Телефон: ' => $phone,
    15.   'Email' => $email
    16. );
    17.  
    18. foreach($arr as $key => $value) {
    19.    $txt .= "<b>".$key."</b> ".$value."%0A";
    20. };
    21.  
    22. $sendToTelegram = fopen("https://api.telegram.org/bot{$token}/sendMessage?chat_id={$chat_id}&parse_mode=html&text={$txt}","r");
    23. ?>
    24. <script language="javascript">window.location = "http://куда перенаправить"</script>
    Всё работает, и даже ошибок нет, но.
    1. Если я просто открываю страницу send.php, то получаю моментальный редирект на страницу из скрипта перенаправления, всё хорошо, наверное, так и правильно, но в телегу летят пустые данные. Ботов в сети миллион, меня не засыплет этими "ложными" срабатываниями скрипта? Не могу понять, как сделать отправку формы только с заполненными данными.
    2. Я читала, что формы - самая опасная часть сайта и через них (при неумелом использовании PHP) вполне реально взломать сайт. Есть в этом скрипте какой-то просчет в этом смысле? Для того, чтобы это понимать, сто процентов недостаточно моего уровня знаний.
    3. Как лучше защитить эту форму от спама? Капчу от гугла в обычной форме обратной связи обходят довольно часто и легко, почту практически каждый день чищу. Когда был свой форум на вобле, ставила капчу типа "вопрос для человека", на который боты не могут знать ответ, работало неплохо, но добавить такую опцию в этот скрипт пока уровень знаний не позволяет. Есть какой-нибудь простой вариант защиты от ботов для новичков?

    Всё в эту же тему, так как относится к одному - созданию формы обратной связи через телеграм.
     
  2. Zlata Jesen

    Zlata Jesen Новичок

    С нами с:
    18 окт 2022
    Сообщения:
    5
    Симпатии:
    0
    Пока тема проходила модерацию, я рыла дальше, вопрос 1 снимается. Делаю эту форму на MODX, поэтому просто создала хук для Formit и никакой внешний файл больше не требуется.
    А вот второй и третий остаются. Formit предлагает ту же капчу, подключить нетрудно, но, может, есть более красивое решение?
     
  3. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.487
    Симпатии:
    281
    Для обратной связи она вообще не нужна.
    Накапливайте присланное, потом раз в какой-то промежуток времени отправляйте оптом, после проверки на флуд.
    Хоть в Телеграм, хоть на емэйл. А хоть и в RSS, в этом случае даже с Кроном возиться не надо.
     
    Zlata Jesen нравится это.
  4. Zlata Jesen

    Zlata Jesen Новичок

    С нами с:
    18 окт 2022
    Сообщения:
    5
    Симпатии:
    0
    Если даже не давать возможность писать текст (куда, по идее, и должен бы валиться спам), боты очень активно шлют номер телефона с текстом "перезвоните мне", не уверена, что не будут отсылать номера такого плана в обратной связи без текста (заказать звонок). Чисто на этот случай. Понятно, что ручное заполнение форм никак не избежать, но хоть от автоматической отправки формы её чем-то прикрыть.
    Спам это отдельная тема, но до чего же достал... Принципиально кладу трубку и удаляю всё из лички и почты, как только понимаю, что это непрошенная реклама.
     
  5. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.487
    Симпатии:
    281
    Вам, всё равно, придется что-то проверять. Или введенную капчу, или присланное сообщение.
    Капча только отпугнет нормального пользователя. А, так как, кроме вас, сообщение обратной связи никто не увидит, то и выводите только те, где ссылок нет. А где есть, или они очень длинные, то только заголовки, с информацией о количестве текста в нем. Открывайте, только те, где нет признаков спама.
    Его количество, при таком подходе, даже если вас им засыпят, со временем спадет.
    Особенно если временно банить по IP подозрительных.
     
    Zlata Jesen нравится это.
  6. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.839
    Симпатии:
    651
    Кроме капчи есть др. формы борьбы с автоспамом. Конечно, все пробивается. Но для среднестатистического ларька достаточно. У нас, например, активно используется доп. подтверждение. Ну, и всякие хитрости, чтобы сразу отсеивать откровенный спам, вообще его не сохраняя (если речь об отправке прямо с морды без всяких очередей).
    --- Добавлено ---
    Для оперативной доставки накапливать не вариант, если речь не о минутной передержке.
     
    Zlata Jesen нравится это.
  7. Zlata Jesen

    Zlata Jesen Новичок

    С нами с:
    18 окт 2022
    Сообщения:
    5
    Симпатии:
    0
    Это как?
     
  8. antoniii

    antoniii Активный пользователь

    С нами с:
    16 мар 2022
    Сообщения:
    419
    Симпатии:
    71
    Я бы на Вашем месте сделал проверку в коде send.php на существование элементов $_POST['name'] и других, поступающих из формы => if (isset($_POST['name']) && !empty($_POST['name'])){делаем все остальное}
     
    Zlata Jesen и miketomlin нравится это.
  9. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.839
    Симпатии:
    651
    Пример: gency.ru/contact (в сообщении напишите «Для Майка» или не нажимайте кнопку «Подтвердить», либо, что лучше, пишите коммент к любой моей статье – /author/mike там же – уведомления о них только я получаю).
     
    Zlata Jesen нравится это.
  10. Zlata Jesen

    Zlata Jesen Новичок

    С нами с:
    18 окт 2022
    Сообщения:
    5
    Симпатии:
    0
    Спасибо, исправлю!

    Попробовала. Интересно и нестандартно. Бот точно не подтвердит...