2016-09-20 82 views
0

如果它包含数组中的任何单词,我一直在试图匹配post查询sting。 我尝试使用命令执行sql查询来更新或选择,但我不想删除或删除行和表。如果任何单词在数组中匹配字符串的PHP代码

请娄代码不匹配阵列以及

<?php 
if(isset($_POST['QueryCode'])){ 

      $RequestQuey = htmlspecialchars($_POST['QueryCode']); 
      $sqlchecker = strtolower($RequestQuey); 
      $bads_arrays = array(
      'ALTER', 
      'TABLE', 
      'DROP'); 

      foreach ($bads_arrays as $strings){ 
       if (strpos($sqlchecker , $strings) !== false) { 
        echo "Match found"; 
        return false; 
       }else{ 
      echo "Not found!"; 
      return true;  
      } 
     } 
?> 

回答

1

你正在做一个用strtolower()在检验字符串的刺痛,但你必须在数组中大写单词。所以要么用stripos替换strpos,要么将数组中的单词改为小写,或将检查过的字符串($ sqlchecker)转换为大写。

$anyMatched = false; 
foreach ($bads_arrays as $strings){ 
    if (stripos($sqlchecker , $strings) !== false) { 
     $anyMatched = true; 
    } 
} 

echo ($anyMatched ? 'Match found' : 'Not Found'); 
return $anyMatched; 
+0

它的工作,但是当我输入'下降table'显示它没有找到,但'下降alter'这个节目在调试时发现我尝试打印$字符串里的foreach只包含'还是没有匹配良好改变' – Alex

+0

你的代码工作正常,但它有一个问题,当我键入这样的事情'alterdatatable'它会显示'找到匹配',但在数组中我只添加'alter'因此可能'alterdatatable'这将是数据库表名 – Alex

+1

“Google”是否包含“Goo”?是的它确实;) 你可以在你的$ bad_arrays中使用单词定义,例如在最后添加一个空格(所以“ALTER”而不是“ALTER”等等。 –

相关问题