Всем доброго дня, в раздел "вопросы от новичков" писать не решилась, так как даже не новичок ещё, а полный "чайник" в PHP. Пытаюсь для сайта сделать форму обратной связи с отправкой сообщений в Telegram, и даже почти всё получилось, но... как не гуглю, не могу понять некоторых нюансов. Объясните, пожалуйста то, что я не понимаю. Итак, исходные данные. Форма: HTML: <form action="send.php" method="post"> <input type="text" name="name" placeholder="Имя"> <input type="tel" name="phone" placeholder="Телефон" required=""> <input type="text" name="email" placeholder="E-mail" > <button type="submit">Отправить</button> </form> PHP: <?php error_reporting(E_ALL); ini_set('display_errors', 1); ?> <?php $token = "вставила токен бота"; $chat_id = "вставила id чата с админом сайта"; $name = $_POST['name']; $phone = $_POST['phone']; $email = $_POST['email']; $txt = ''; //пришлось объявить, чтобы не было ошибки в foreach на необъявленную переменную txt $arr = array( 'Имя пользователя: ' => $name, 'Телефон: ' => $phone, 'Email' => $email ); 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"); ?> <script language="javascript">window.location = "http://куда перенаправить"</script> Всё работает, и даже ошибок нет, но. 1. Если я просто открываю страницу send.php, то получаю моментальный редирект на страницу из скрипта перенаправления, всё хорошо, наверное, так и правильно, но в телегу летят пустые данные. Ботов в сети миллион, меня не засыплет этими "ложными" срабатываниями скрипта? Не могу понять, как сделать отправку формы только с заполненными данными. 2. Я читала, что формы - самая опасная часть сайта и через них (при неумелом использовании PHP) вполне реально взломать сайт. Есть в этом скрипте какой-то просчет в этом смысле? Для того, чтобы это понимать, сто процентов недостаточно моего уровня знаний. 3. Как лучше защитить эту форму от спама? Капчу от гугла в обычной форме обратной связи обходят довольно часто и легко, почту практически каждый день чищу. Когда был свой форум на вобле, ставила капчу типа "вопрос для человека", на который боты не могут знать ответ, работало неплохо, но добавить такую опцию в этот скрипт пока уровень знаний не позволяет. Есть какой-нибудь простой вариант защиты от ботов для новичков? Всё в эту же тему, так как относится к одному - созданию формы обратной связи через телеграм.
Пока тема проходила модерацию, я рыла дальше, вопрос 1 снимается. Делаю эту форму на MODX, поэтому просто создала хук для Formit и никакой внешний файл больше не требуется. А вот второй и третий остаются. Formit предлагает ту же капчу, подключить нетрудно, но, может, есть более красивое решение?
Для обратной связи она вообще не нужна. Накапливайте присланное, потом раз в какой-то промежуток времени отправляйте оптом, после проверки на флуд. Хоть в Телеграм, хоть на емэйл. А хоть и в RSS, в этом случае даже с Кроном возиться не надо.
Если даже не давать возможность писать текст (куда, по идее, и должен бы валиться спам), боты очень активно шлют номер телефона с текстом "перезвоните мне", не уверена, что не будут отсылать номера такого плана в обратной связи без текста (заказать звонок). Чисто на этот случай. Понятно, что ручное заполнение форм никак не избежать, но хоть от автоматической отправки формы её чем-то прикрыть. Спам это отдельная тема, но до чего же достал... Принципиально кладу трубку и удаляю всё из лички и почты, как только понимаю, что это непрошенная реклама.
Вам, всё равно, придется что-то проверять. Или введенную капчу, или присланное сообщение. Капча только отпугнет нормального пользователя. А, так как, кроме вас, сообщение обратной связи никто не увидит, то и выводите только те, где ссылок нет. А где есть, или они очень длинные, то только заголовки, с информацией о количестве текста в нем. Открывайте, только те, где нет признаков спама. Его количество, при таком подходе, даже если вас им засыпят, со временем спадет. Особенно если временно банить по IP подозрительных.
Кроме капчи есть др. формы борьбы с автоспамом. Конечно, все пробивается. Но для среднестатистического ларька достаточно. У нас, например, активно используется доп. подтверждение. Ну, и всякие хитрости, чтобы сразу отсеивать откровенный спам, вообще его не сохраняя (если речь об отправке прямо с морды без всяких очередей). --- Добавлено --- Для оперативной доставки накапливать не вариант, если речь не о минутной передержке.
Я бы на Вашем месте сделал проверку в коде send.php на существование элементов $_POST['name'] и других, поступающих из формы => if (isset($_POST['name']) && !empty($_POST['name'])){делаем все остальное}
Пример: gency.ru/contact (в сообщении напишите «Для Майка» или не нажимайте кнопку «Подтвердить», либо, что лучше, пишите коммент к любой моей статье – /author/mike там же – уведомления о них только я получаю).