0

2列のデータのみで単純なMySQLデータベース検索を実行するPHPコードがあります。単純に別の方法でそれを行うことができたとき、私はおそらくすでに長い道のりを進んでいるのではないかと思います。

名前またはIPアドレスを入力できるフォームがあり、データベースでどちらかを検索して結果を出力します。各名前は1つのIPアドレス(最後に使用したもの)のみを持つことができます(完全な一意の名前は1つの結果のみ、または部分的な名前が複数のアカウントと一致する場合は複数の結果を持ちます)が、IPアドレスは複数の名前(複数のアカウントを使用する人々)を持つことができます同じIP上)。私がやりたいのは、名前を検索すると通常の単一の結果(完全な一意の名前が入力された場合)が実行されるようにすることですが、その下で、名前のみが入力された場合はIPの2次検索を実行しますフォームで検索しました。

「NAMEを検索すると、次の結果が返されました:{results}。同じIPアドレスを使用したこれらのアカウントも見つかりました:{Namesearchの最初の結果から同じ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」という名前の2つの列を持つテーブルには、それぞれ次のようなデータがあります。

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を検索した場合、一意の名前であるため、1つの結果が得られます。Player2のIPを検索した場合、同じものを使用する代替アカウントがあるため、2つの結果[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()正規表現、curtousy of 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 に答える