0

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

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

“您搜索 NAME 已返回以下结果:{results}。我们还发现了这些使用相同 IP 地址的帐户:{results matching the same IP from the first result of the Name search}”。

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


(一些清理,因为我使用的是 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地址。)

(请原谅这篇很长的帖子。我只想提供尽可能多的细节,我试图研究这个,但现在有一个障碍。非常感谢,再一次,很抱歉让你阅读所有这些。 )

4

2 回答 2

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
}
于 2012-07-04T00:56:46.373 回答
1
SELECT * FROM banlistip
WHERE lastip = (SELECT DISTINCT lastip FROM banlistip WHERE name LIKE '%$iplookup%' OR lastip LIKE '%$iplookup%')
于 2012-07-04T01:08:28.713 回答