• User Newbie

    bloccare parole non consentite

    Salve, ho un sito che ha un form in cui un utente può inserire il proprio sito web, email,
    banner, ecc..
    Nel form c'è anche un campo textarea in cui inserire le parole chiavi;
    devo fare un controllo di queste parole in modo da bloccare l'invio del form se un utente inserisce le parole chiavi non consentite che sono memorizzate in un database.
    Se nella textarea si inserisce una singola parola funziona ma se inserisco 2 o più parole il controllo non va
    ($parolechiave contiene il valore della textarea via POST).
    Potete aiutarmi?
    Questo è il codice:
    [php]
    $sql = mysql_query("SELECT * FROM spam_aristotele WHERE keyword LIKE '%".$parolechiave."%'") or die (mysql_error());
    if(mysql_num_rows($sql) > 0)
    {
    echo "Non si accettano siti spam.<br><br>\n";
    }
    }
    [/php]


  • Super User

    [PHP]
    $parole_chiave = array(/**/);

    $query = "SELECT COUNT(*) FROM spam_aristotele WHERE keyword IN ('".implode($parole_chiave,"', '")."') LIMIT 1";
    [/PHP]

    TI basta solo sistemare l'array parole_chiave, magari usando explode, decidendo un delimitatore per ogni parola chiave.

    La tua query non poteva funzionare con più parole, perchè in quel modo ti cerchi nel database non le singole parole ma tutte le parole insieme.


  • User Newbie

    Ho fatto così ma ancora non va, puoi darmi qualche consiglio? grazie
    [php]
    $array_textarea = explode(" ", $parolechiave);

    $sql = mysql_query("SELECT * FROM spam_aristotele") or die (mysql_error());

    while($row = mysql_fetch_array($sql))
    {
    $parole = $row['keyword']." ";
    }

    foreach($array_textarea as $array_m)
    {
    if(in_array($parole, $array_m))
    echo "Non si accettano siti spam.<br><br>\n";
    }
    [/php]


  • Super User

    Hai provato con la query che ti ho postato?

    [PHP]
    $parole = $row['keyword']." ";
    [/PHP]

    Qui penso che avresti voluto concatenare le parole... ma:

    1. Se avessi voluto fare così, avresti dovuto fare

    [PHP]
    $parole .= $row['keyword']." ";
    [/PHP]

    1. Non ha senso concatenarle! Devi usarle singolarmente, è come se tu vorresti fare:

    'parola1 parola2 parola3' == 'parola1';

    L'espressione di sopra è falsa, al limite avresti potuto usare strpos, ma una volta che hai le parole sotto forma di array, o uso la mia query, oppure:

    [PHP]
    while($row = mysql_fetch_array($sql))
    {
    if(in_array($row['keyword'], $array_textarea))
    echo "Non si accettano siti spam.<br><br>\n";
    }
    [/PHP]


  • User Newbie

    Il problema è sempre quello, con una parola funziona ma con 2 o più parole
    non va.
    Una volta trasformato in array $parolechiave e la tua query:
    [php]
    $array_textarea = explode(" ", $parolechiave);

    $query = "SELECT COUNT(*) FROM spam_aristotele WHERE keyword IN ('".implode($parolechiave,"', '")."') LIMIT 1";
    [/php]

    come devo impostare il controllo if? grazie


  • Super User

    Mi sono appena accorto che l'implode nella query non deve contenere $parolechiave ma $array_textarea.

    Comunque, basta fare una mysql_query($query) e poi estrarre il count tramite un mysql_fetch_array($risultato_query, MYSQL_NUM);

    A questo punto ti basta fare un semplice
    [PHP]
    if($risultato_fetch_array[0]>0)
    echo "spam";
    [/PHP]


  • User Newbie

    Ho provato il codice che mi hai dato ma sempre quello il problema.
    Ho fatto così (mysql_fetch_array va messo in un ciclo while?):
    [php]
    $array_textarea = explode(" ", $parolechiave);

    $query = "SELECT COUNT(*) FROM spam_aristotele WHERE keyword IN ('".implode($array_textarea,"' '")."') LIMIT 1";
    $sql = mysql_query($query) or die (mysql_error());

    $row = mysql_fetch_array($sql);

    if($row[0] > 0)
    echo "Non si accettano siti spam";
    [/php]