2012-12-18 126 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