Скрипт за проверка на повтарящи се IP-та

baiumbg

Registered
Опитвам се да направя скрипт за намиране на повтарящи се IP-та и броя на пътите срещнати. Знам как трябва да стане, но не знам как да го напиша. Би трябвало да е с вложен цикъл, но не съм свикнал с PHP и MySQL и не съм сигурен как трябва да го напиша...Таблицата ми се казва accounts, a колоната ми е lastIP.
 
Код:
if(isset($_POST['submit']))
{
$sql = mysql_query("SELECT * FROM users WHERE ip = '$_POST[ip]'");
$broi = mysql_num_rows($sql);
if($broi > 1)
{
while($row = mysql_fetch_assoc($sql))
{
echo "$row[ip]<br />";
}
}else{
echo 'samo 1 e';
}
}else{
echo ' natisni butona';
}

Правиш си една форма с инпут name='ip' и следователно съм направил като напишеш IP-to и ако го има повече от един път да ги вади всичките, в противен случай ще вади samo 1 e
 
Не си ми разбрал идеята. Имам таблица accounts, където държа всички ИП-та. Искам скрипт който да мине през датабазата и да провери дали някое се повтаря и колко пъти.
 
Код:
$id = (int)$_GET['id'];
$q = mysql_query("SELECT * FROM `accounts` WHERE `id`='$id'")or die(mysql_error());
$w = mysql_fetch_array($q);
$ip = $w['lastIP'];
$qu = mysql_query("SELECT * FROM `accounts`WHERE `lastIP`='$ip' ")or die(mysql_error());
$r = mysql_num_rows($qu);
echo 'ИП-то съществува: '.$r.' пъти';

сещам се само за тоя начин o_O отваряш ?id='ид-то с ип-то което искаш да провериш' и то ти изписва колко пъти съществува в таблицата... можеш и на $qu един mysql_fetch_array да му сложиш и да изведеш id-тата на повтарящите се ип-та ;)
 
Код:
<?php
class IPcount
{
	protected
		$arrayData = array();
	
	public function __construct($array)
	{
		$this -> arrayData = $this -> IPcount($array);
		$this -> sorting();
		print_r($this -> arrayData);
	}
	
	protected final static function IPcount($array)
	{
		$IP = array(); $count = array();
		
		foreach($array as $data)
		{
			if(!isset($count[$data]))
				$count[$data] = 1;
			else
				$count[$data]++;
		}
		
		return $count;
	}
	
	protected final function sorting()
	{
		array_multisort($this -> arrayData, SORT_DESC);
	}
}

new IPcount(array('1.2.3.5', '1.2.3.6', '1.2.3.4', '1.2.3.4', '1.1.1.1', '2.2.2.2', '2.2.2.2', '2.2.2.2'));
?>

Давам ти идеята как може да стане, ти вече ще си го дооформиш :)
 
@MakeAWish ТВЪРДЕ сложно за човек като мен.

@другите Трябва да има начин със вложени цикли. В С++ става много лесно(ако е с масив примерно, защото на С++ не съм работил с MySQL). Имам идея как да го направя, обаче ми трябва колона id, каквато нямам и нямам право да си направя(таблицата е от сървър на ММО).
 
Така
Код:
<?php
define("HOST", "localhost"); // хост на MySQL 
define("USER", ""); // усер за MySQL 
define("PASS", ""); // парола за MySQL 
define("BD", ""); // име на база данни 
 
$db_conn = @mysql_connect(HOST, USER, PASS) or die(mysql_error()); 
@mysql_select_db(BD, $db_conn) or die(mysql_error());

$row = mysql_query("SELECT * FROM `accounts`");
while($row = mysql_fetch_assoc($row)){
	$ip = $row['lastIP'];
	$broi = mysql_num_rows(mysql_query("SELECT * FROM `accounts` WHERE `lastIP` = '$ip'"));
	$i = ($broi > 1) ? " го има $broi пъти!" : ' го има 1 път!' ;
	echo "$ip - $i";
}
?>

едит:

Код:
<?php
define("HOST", "localhost"); // хост на MySQL 
define("USER", ""); // усер за MySQL 
define("PASS", ""); // парола за MySQL 
define("BD", ""); // име на база данни 
 
$db_conn = @mysql_connect(HOST, USER, PASS) or die(mysql_error()); 
@mysql_select_db(BD, $db_conn) or die(mysql_error());

$row = mysql_query("SELECT * FROM `accounts`");
while($row = mysql_fetch_assoc($row)){
	$ip = $row['lastIP'];
	$broi = mysql_num_rows(mysql_query("SELECT * FROM `accounts` WHERE `lastIP` = '$ip'"));
	$i = ($broi > 1) ? "$ip - го има $broi пъти!" : '' ;
	echo $i;
} 
?>
така ще ти изкара само повтарящите се ип и броя
 
@sorRy Работи, но ми изкарва повтарящите се ИП-та колкото пъти го има. Пример:

190.22.152.206 - go ima 2 puti!
201.243.159.26 - go ima 2 puti!
201.243.159.26 - go ima 2 puti!
186.87.35.58 - go ima 2 puti!
186.87.35.58 - go ima 2 puti!
213.220.249.4 - go ima 2 puti!
190.38.85.123 - go ima 2 puti!
213.220.249.4 - go ima 2 puti!
190.38.85.123 - go ima 2 puti!
85.75.119.197 - go ima 4 puti!
190.22.152.206 - go ima 2 puti!
86.49.72.110 - go ima 2 puti!
201.254.20.53 - go ima 2 puti!
201.254.20.53 - go ima 2 puti!
85.75.119.197 - go ima 4 puti!
190.31.97.152 - go ima 2 puti!
190.31.97.152 - go ima 2 puti!
85.75.119.197 - go ima 4 puti!
86.49.72.110 - go ima 2 puti!
85.75.119.197 - go ima 4 puti!
 
MySQL-а ми е малко далечен, но няма ли да стане така?
Код:
SELECT ip, count(*) as c FROM table GROUP BY ip HAVING c > 1
Замести името на таблицата и имената на колоните и би трябвало да се получи :)
 
$sql11 = "SELECT pos_ip FROM users";
$res11 = mysql_query($sql11)or die (mysql_error());
while ($row11 = mysql_fetch_assoc($res11))
{
$sql="SELECT pos_ip FROM users WHERE pos_ip='$row11[pos_ip]'";
$res = mysql_query($sql)or die (mysql_error());
$num=mysql_num_rows($res);
if($num>1)
{
while($row=mysql_fetch_assoc($res))
{
echo"<font color='red'>$row[pos_ip]</font> <br>";
}
}
else
{
echo"$row11[pos_ip] <br>";
}
}

Заповядай!
 
Пак не това което търся :( Трябва ми да изкарва само тези които се повтарят. И да се изкарат само по веднъж. Иначе и аз мога да си го направя. Трябва ми нещо подобно на това което sorRy ми даде, само че да ги изкарва само по веднъж.

EDIT: SQL-a на F1r3Fl3x проработи :)
 

Back
Горе