Как использовать strpos для сопоставления распространенных полей спама в моей базе данных с отправкой формы? - PullRequest
0 голосов
/ 04 июня 2019

Я получил несколько спам-ответов на мою веб-форму, и я использовал их, чтобы создать список полей для фильтрации.Мой план состоял в том, чтобы сравнить - используя strpos - каждое поле с текстовым полем, отправленным пользователем, и, если есть совпадение, перенаправить этот почтовый ответ.

По какой-то причине код, который я пробую, просто не 'кажется, ударил спичку;Чего мне не хватает?

// Query list of spam fields
    $sqlSpam= "SELECT * FROM tblspamfilter";  
    $rstSpam= mysqli_query($db, $sqlSpam);

// Search for key in the notes field passed by the web form 
    while ($rowSpam=mysqli_fetch_assoc($rstSpam)) {
        $Key= $rowSpam['Key'];
        if (strpos($notes, $Key) === false) {
            $spam=0;
            } else {
            $spam++;
            }
        }

if ($spam==0) {
    // send the mail...
    } else {
    // not today Mr spammer
    }

Он работал нормально как статический спам-ключ, но теперь нет, когда я добавил элемент базы данных.Ничто из того, что я пробую в поле отправки формы (точное совпадение, совпадение части и т. Д.), Не совпадает со спамом, и вся почта проходит.Я новичок в php, поэтому я предполагаю, что что-то упустил из-за того, что он сравнивает данные из таблицы?

Редактировать: в моей таблице спама есть следующие поля:

| idKey | Key | 
| 1 | jnl.io | 
| 2 | drive.google.com | 
| 3 | casinogorilla.com | 
| 4 | www.talkwithcustomer.com | 
| 5 | sexy | 
| 6 | profitable database of email addresses | 
| 7 | My name is Roy | 
| 8 | Sexy girls |

И используя этот код:

$spamWords = mysqli_fetch_assoc($rstSpam);
$spam = 0;
foreach ($spamWords as $spamWord) {
    if (strpos($notes, $spamWord) !== false) {
        $spam++;
    }
}

Я получаю совпадение для jnl.io, drive.google.com, но не для www.talkwithcustomer.com, sexy и т. Д. Я не вижу шаблондля этого вообще.Есть ли ограничение по размеру?Является ли strpos неправильной техникой?

Рабочий код Теперь работает следующее;Я не уверен, что именно это исправило, но для таблицы была странная сортировка, которую я заменил на utf8_general_ci , и это, среди других предложений, дало возможность его проверки.Большое спасибо за просмотр.

// Check the notes field for any likely spam indicators
    $spam=0;
    while ($rowSpam=mysqli_fetch_assoc($rstSpam)) {
        $Key= $rowSpam['Key'];
        if (strpos($notes, $Key) !== false) {
            $spam++;
            }
        }

1 Ответ

0 голосов
/ 04 июня 2019

Пример кода, где вы можете увидеть свой подход против правильного подхода к этой проблеме ... https://3v4l.org/Yidr1

<?php

$spamWords = ['blah', 'nah', 'hah', 'spam', 'spamm'];

$spamMessage = 'Here we go blah blah blah';

// this is the way you do this
$spam = 0;
foreach ($spamWords as $spamWord) {
    if (strpos($spamMessage, $spamWord) === false) {
        echo 'This keyword aint here, previous value - ' . $spam . PHP_EOL;
        $spam = 0;
    } else {
        $spam++;
        echo 'I am spam' . PHP_EOL;
    }
}

if ($spam === 0) {
    echo 'not spam' . PHP_EOL;
} else {
    echo 'spam' . PHP_EOL;
}
// well obviously, you will echo 'spam' only if lastword from your spam-words will be present
// so you need to keep your variable
echo 'Right approach' . PHP_EOL;
$spam = 0;
foreach ($spamWords as $spamWord) {
    if (strpos($spamMessage, $spamWord) !== false) {
        $spam++;
    }
}
// now works as expected
if ($spam === 0) {
    echo 'not spam';
} else {
    echo 'spam';
}
...