我有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地址。)
(请原谅这篇非常长的帖子。我只是想提供尽可能详细的信息,我试图研究这个,但现在有一个块。非常感谢,再次,抱歉制作你读完了所有这些。)
答案 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%')