За последние 24 часа нас посетили 22712 программистов и 1267 роботов. Сейчас ищут 836 программистов ...

PHP: Валидация post запроса на совпадение по словам

Тема в разделе "Сделайте за меня", создана пользователем ZentoWeb, 4 ноя 2017.

  1. ZentoWeb

    ZentoWeb Новичок

    С нами с:
    10 окт 2017
    Сообщения:
    17
    Симпатии:
    0
    Здравствуйте!
    Помогите организовать проверку введенных данных в форме заявки на содержание определенных слов, и при совпадении форма не отправляет данные на почту.
    Из горячих слов: продвижение, яндекс, гугл, google, сео, seo.
    Своего рода защита от спама.
    Также чтобы была возможность легкого увеличения этого списка.

    Начало кода такое:

    PHP:
    1. <?php
    2.     $to='info@test.ru';
    3.     $headers.='From: info@test.ru' . "\r\n" .
    4.                'Reply-To: info@test.ru' . "\r\n" .
    5.                'Content-Type: text/plain; charset=utf-8' . "\r\n" .
    6.                'Content-Transfer-Encoding: quoted-printablenn';
    7.     $subject='Обратный звонок с сайта test.ru';
    8. function clean($value = "") {
    9.     $value = trim($value);
    10.     $value = stripslashes($value);
    11.     $value = strip_tags($value);
    12.     $value = htmlspecialchars($value);
    13.     return $value;
    14. }
    15. function check_length($value = "", $min, $max) {
    16.     $result = (mb_strlen($value) < $min || mb_strlen($value) > $max);
    17.     return !$result;
    18. }
    19. if (isset($_POST['ok1'])){
    20.   $ip=$_SERVER["REMOTE_ADDR"];
    21.   $call=$_POST['call'];
    22.   $massege=$_POST['call'];
    23.   if(!empty($call)) {
    24.       if(check_length($call, 7, 18)) {    
    25.         $messages = "IP-адрес: ".$ip."\nНомер телефона: ".$call."\nСообщение: ".$massege."";
    26.           mail($to,$subject,$messages,$headers);
    27.                 echo  "<div id='alert_dialog' style='display:none;'><div id='alert_fog'></div><div id='alert_body'><span class='alert_text'>Спасибо! Ваша заявка принята!</span><span class='alert_text_2'>Наш менеджер скоро с вами свяжется.</span><hr /><span id='alert_button'><button id='alert_close'>ОК</button></span></div></div>";
    28.       } else {
    29.           echo "<div id='alert_dialog' style='display:none;'><div id='alert_fog'></div><div id='alert_body'><span class='alert_text'>Внимание! Ваша заявка НЕ отправлена! Наверное, вы забыли ввести номер телефона или ввели некорректные данные.</span><span class='alert_text'>Вы ввели: $call.</span><span class='alert_text_2'>Пожалуйста, заполните форму заново. Вводите номер без скобок, в формате 89501234567</span><hr /><span id='alert_button'><button id='alert_close'>ОК</button></span></div></div>";
    30.       }
    31.   } else {
    32.     echo "<div id='alert_dialog' style='display:none;'><div id='alert_fog'></div><div id='alert_body'><span class='alert_text'>Внимание! Ваша заявка НЕ отправлена! Наверное, вы забыли ввести номер телефона или ввели некорректные данные.</span><span class='alert_text'>Вы ввели: $call.</span><span class='alert_text_2'>Пожалуйста, заполните форму заново. Вводите номер без скобок, в формате 89501234567</span><hr /><span id='alert_button'><button id='alert_close'>ОК</button></span></div></div>";
    33.   }
    34. }
    35. ?>
     
  2. laszlopv

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

    С нами с:
    26 фев 2017
    Сообщения:
    244
    Симпатии:
    40
    Можно разбить сроку на массив из слов, а дальше провести сравнение с заданными. Заданные держать в другом массиве, или базе данных. Ничего особо сложного нет.
     
  3. ZentoWeb

    ZentoWeb Новичок

    С нами с:
    10 окт 2017
    Сообщения:
    17
    Симпатии:
    0
    Понимаю что сложного нету, но я вообще не знаю php, по этому и спрашиваю в этой рубрике.
     
  4. laszlopv

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

    С нами с:
    26 фев 2017
    Сообщения:
    244
    Симпатии:
    40
    Вот черновой набросок который делает то, что вам нужно используя массивы. Можно сделать с базой слов в файле CSV или базе данных или любом другом виде.

    PHP:
    1. <?php
    2. //Определяем массив с искомыми значениями
    3. $stopwords = array(
    4.         'SEO',
    5.         'продвижение',
    6. );
    7. //Тестовое сообщение которое получаем из формы
    8. $message = 'Я бы хотел предложить вам услуги по продвижение вас заинтересует?';
    9.  
    10. //Функция определения совпадений в сообщении и массиве
    11. function find_words_in_message ($message, $stopwords){
    12.  
    13.     $result = false;
    14.  
    15.     $MessageArray = explode(' ', $message);
    16.     foreach ($stopwords as $value){
    17.         if (in_array($value, $MessageArray)){
    18.             $result = true;
    19.             break;
    20.         }
    21.     }
    22.     return $result;
    23.  
    24. }
    25.  
    26. //Проверяю работу функции
    27. $test = find_words_in_message($message, $stopwords);
    28. if ($test==true){
    29.     print 'Не отправлять письмо';
    30. }
    31. else{
    32.     print 'Отправить письмо';
    33. }
    34.  
    35. ?>
     
    ZentoWeb нравится это.
  5. ZentoWeb

    ZentoWeb Новичок

    С нами с:
    10 окт 2017
    Сообщения:
    17
    Симпатии:
    0
    Спасибо! Всё работает. Круто!