自动进行第二次搜索

时间:2012-07-04 00:42:42

标签: php database search lookup

我有PHP代码只用两列数据进行简单的MySQL数据库搜索。我怀疑我可能已经走了很长一段路,当时我可以用不同的方式做到这一点。

我有一个表格,您可以将其放入名称或IP地址,它将在数据库中搜索其中任何一个,然后输出结果。每个名称只能有一个IP地址(他们使用的最后一个)(完整的唯一名称只有1个结果,如果部分名称与多个帐户匹配,则为多个结果),但IP地址可以有多个名称(使用多个帐户的人)在相同的IP)。 我想要做的就是拥有它,所以如果你搜索一个名字,它会做常规的单一结果(如果输入完整的唯一名称),但是然后在它下面,如果只有NAME,则进行IP的二次搜索。在表格中搜索。

  

“您搜索NAME已返回以下结果:{results}。我们也是   发现这些帐户使用了相同的IP地址:{结果   匹配名称搜索的第一个结果中的相同IP}。

这是我到目前为止的代码:


(我使用GET后进行了一些清理)

$iplookup = strtolower($_GET['iplookup']);
$iplookup = stripslashes($iplookup);
$iplookup = strip_tags($iplookup);
$iplookup = preg_replace('/[^A-Za-z0-9\._]/','',$iplookup);

$sql = mysql_query("select 
* from banlistip where name like '%$iplookup%' OR lastip like '%$iplookup%'
");

if (empty($iplookup)) {
echo '<br><b>You left the search form empty.</b>';
} else {
while ($row = mysql_fetch_array($sql)) {
        echo '<br/> Name: '.$row['name'];
        echo '<br/> Player IP: '.$row['lastip'];
        echo '<br/><br/>';
}

}


然后就在这里它会获得$row['lastip']变量,然后搜索它,这相当于只是首先搜索一个ip地址。


这样做的目的是消除一些步骤并立即查看所有期望的结果。通常,为了进行IP搜索,我必须搜索名称,突出显示+复制IP,返回到表单,然后搜索IP



具有两列名为“name”和“lastip”的表分别具有以下数据:

player1 111.111.111.111
player2 222.222.222.222
player3 111.000.111.000
player4 222.000.222.000
altaccount1 111.000.111.000
altaccount2 222.222.222.222

(如果你搜索了Player2,你会得到一个结果,因为它是一个唯一的名字。如果你搜索了Player2的IP,你会得到两个结果[player2 + altaccount2],因为有一个替代帐户使用相同的IP地址。)

(请原谅这篇非常长的帖子。我只是想提供尽可能详细的信息,我试图研究这个,但现在有一个块。非常感谢,再次,抱歉制作你读完了所有这些。

2 个答案:

答案 0 :(得分:1)

我认为您要做的事情需要2个单独的SQL字符串,并调用所提供数据所需的任何内容。

因此,如果$iplookup显然是IP(使用正则表达式检查),那么:

$sql = "SELECT * FROM banlistip WHERE lastip LIKE '%$iplookup%'";

否则你将使用:

$sql = "SELECT * FROM banlistip WHERE name LIKE '%$iplookup%'";

一个正则表达式,您可以使用preg_match()进行检查,regular-expressions.info

$regex = '/(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/'; 

if (preg_match($regex, $iplookup)) {
    // Call IP SQL
} else {
    // Call Name SQL
}

答案 1 :(得分:1)

SELECT * FROM banlistip
WHERE lastip = (SELECT DISTINCT lastip FROM banlistip WHERE name LIKE '%$iplookup%' OR lastip LIKE '%$iplookup%')