2012-12-18 96 views
1

我试图将列表中的IP地址与阻止的IP列表进行比较。如果IP地址等于$ blockedIP数组中的地址,则该行不包含在列表中。该列表从mysqli_query填充。如果IP地址与数组中的一个匹配,我想要做的是排除整行。将MySQL行与PHP数组值比较

echo '<div class="genericTable"><h2>Downloaded Sermons Report</h2><table>'; 

$blockedIP = array('69.58.178.58', '173.199.115.123', '173.199.120.99'); 

foreach($blockedIP as $ip){ 
$sql = mysqli_query($db, "SELECT * FROM dl_log WHERE ipaddress <> '".$ip."'"); 

while($row = mysqli_fetch_assoc($sql)){ 
    echo '<tr>'; 

    if($row['ipaddress'] !== $ip){ 
     foreach($row as $each){ 
      echo '<td class="genericTable">'.$each.'</td>'; 
     } 
    } 
    echo '</tr>'; 
    } 
} 
echo '</table></div>'; 

我已经试过了脚本的几个不同的方式,要么得到整个列表或每一行&柱的曲线与阵列,这对于一个抬高看表。我正在使用foreach将值与数组进行比较。我应该把它放在哪里? 谢谢。

+0

你知道阻止IP的,是毫无意义的权利? IP!=用户。一个IP可能是百万人,一个人可以为每个请求使用一个新的IP。 – 2012-12-18 19:24:38

+0

那么,如果你想避免一排,只需做你的检查_before_打印行... –

+0

Dagon,我不阻止IP访问,只是从列表中显示。整个脚本分析下载文件的用户的IP地址,下载时的IP地址等。被阻止的IP似乎是搜索引擎机器人。我不想用不必要的数据膨胀桌子。 – timbocf

回答

2

我想要做的是排除整行,如果IP地址匹配数组中的一个。

您有几种选择:使用SQL IN

  1. 一个查询。使用implode()来浓缩被阻止的IP地址。

    SELECT * FROM dl_log WHERE ipaddress NOT IN (...); 
    
  2. 一个查询和使用PHP in_array()过滤他的结果

    // SQL 
    SELECT * FROM dl_log; 
    
    // PHP 
    if (!in_array($row['ipaddress'], $blockedIP)) 
    
+0

并且如果您的搜索引擎要停止,请使用robots.txt文件或useragent分析。效率更高,机器人始终在变化 – 2012-12-18 19:30:28

+1

第二个人工作。谢谢! – timbocf

0

如果你想不打印排出来,改变

if($row['ipaddress'] !== $ip){ 

if(!in_array($row['ipaddress'], $blockedIP)){ 
+0

啊,完美。谢谢! – timbocf