2012-12-18 4 views
1

J'essaie de comparer les adresses IP d'une liste à une liste d'adresses IP bloquées. Si l'adresse IP est égale à une adresse dans le tableau $ blockedIP, la ligne n'est pas incluse dans la liste. La liste est remplie à partir d'une requête mysqli. Ce que je voudrais faire est d'exclure toute la rangée si l'adresse IP correspond à une dans le tableau.Comparer la ligne MySQL avec les valeurs des tableaux 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>'; 

J'ai essayé le script quelques différentes façons et soit obtenir la liste complète ou chaque ligne & colonne sont comparées au tableau, ce qui rend une table à la recherche fait grimper. J'utilise le foreach pour comparer les valeurs au tableau. Où devrais-je le mettre? Merci.

+0

vous savez bloquer IP, est inutile non? IP! = Utilisateur. Une IP pourrait être un million de personnes, et une personne pourrait utiliser une nouvelle adresse IP pour chaque demande. –

+0

Eh bien, si vous voulez éviter une rangée, il suffit de faire votre vérification _avant d'imprimer la ligne ... –

+0

Dagon, je ne bloque pas les adresses IP d'accès, juste de montrer sur une liste. L'ensemble du script analyse les adresses IP des utilisateurs qui ont téléchargé des fichiers, quand ils ont été téléchargés, etc. Les adresses IP bloquées semblent être des robots de moteur de recherche. Je ne veux pas gonfler la table avec des données inutiles. – timbocf

Répondre

2

Ce que je voudrais faire est d'exclure la ligne entière si l'adresse IP correspond à un dans le tableau.

Vous avez quelques options:

  1. Une requête en utilisant SQL IN. Condensez l'adresse IP bloquée avec implode().

    SELECT * FROM dl_log WHERE ipaddress NOT IN (...); 
    
  2. Une requête et utiliser PHP in_array() pour filtrer il résulte

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

et si ses moteurs de recherche vous voulez arrêter, utilisez le fichier robots.txt ou l'analyse useragent. beaucoup plus efficace, bot ips change tout le temps –

+1

Le deuxième a travaillé. Merci! – timbocf

0

Si vous voulez ne pas imprimer la ligne sur, changer

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

à

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

Ah, parfait. Merci! – timbocf

Questions connexes