2016-11-25 87 views
0

我目前正在對我正在處理的網站實施註釋部分。我想阻止人們留下愚蠢的評論。我有一張表格,其中包含我不想在評論中留下的字詞。到目前爲止,我使用array_intersect來比較它和表單。我首先使用爆炸將提交的表單從字符串更改爲數組。如果找不到任何不良詞,則將該評論插入到數據庫中。如果找到了一個禁忌詞,那麼現在我只迴應一些東西來測試。我的問題是,array_intersect似乎返回的東西,即使沒有找到匹配。在下面的代碼中,print_r($ result)= Array()Array()。這是爲什麼?array_intersect返回一些東西,即使沒有匹配存在

<?php 

if (isset($_POST['name']) && isset($_POST['commentaire'])) { 

       try { 
         $db = new PDO("mysql:host=$server;dbname=etvoila;charset=utf8", $username, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));} 
         catch (Exception $e) 
         { 
         die('Erreur : ' . $e->getMessage()); 
         } 
     $name = htmlspecialchars($_POST['name']); 
     $comment = htmlspecialchars($_POST['commentaire']); 
     validateWords($name); 
     validateWords($comment); 
       if ($badWord = 1) 
       { 
         echo "Bad word found!"; 
       } else { 
         $insert = $db->prepare("INSERT INTO comments (name, comment) VALUES (:name, :comment)"); 
         $insert->execute(array(
         'name' => $name, 
         'comment' => $comment 
         )); 
         echo "Thank you"; 

       } 
     } 

function validateWords($sentence) { 
         $badWord = 0; 

       try { 
         $bdd = new PDO("mysql:host=$server;dbname=etvoila;charset=utf8", $username, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));} 
         catch (Exception $e) 
         { 
         die('Error : ' . $e->getMessage()); 
         } 
         $sentence2 = trim($sentence, ".!?"); 
         $sentence2 = strtolower($sentence2); 
         $sentence2 = explode(" ",$sentence2); 
         $select = $bdd->prepare('SELECT words FROM forbiddenWords'); 
         $select->execute(); 
         while ($forbiddenWords = $select->fetch()) { 
           $result =   array_intersect($sentence2,$forbiddenWords); 

          if ($result) { 
            $badWord = 1; 
          } 
         } 
} 

?> 

回答

0

這是array_intersect的默認行爲,如果找不到匹配項,它將返回一個空數組。所以從

if ($result) { 
     $badWord = 1; 
    } 

改變你的條件

if (is_array($result) && count($result) > 0) { 
     $badWord = 1; 
    } 

所以如果只有找到匹配您的$badWord1

+0

這似乎並沒有工作。同樣的事情發生。在你給我的代碼之後,我添加了echo $ badWord,但沒有顯示出來。我試過這個: $ result = array_intersect($ sentence2,$ forbiddenWords); print_r($ result); 和它打印Array()50次(我的表格包含大約50個單詞) –

+0

嗯,我認爲我們在這裏做錯了什麼,讓我更新我的代碼 –

+0

@MichaëlFournier嘗試print_r(count($ result));並看看結果是什麼,並且可以print_r($ forbiddenWords)和print_r($ sentence2)一次,這樣我就可以看到你的數組格式 –

相關問題