2012-07-04 2 views
0

두 개의 데이터 열로 간단한 MySQL 데이터베이스 검색을 수행하는 PHP 코드가 있습니다. 나는 내가 이미 다른 방식으로 그것을 할 수있을 때 나는 이미 먼 길을 가고 있다고 생각한다.자동으로 두 번째 검색하기

이름이나 IP 주소에 입력 할 수있는 양식이 있으며 데이터베이스에서 해당 양식을 검색하여 결과를 출력합니다. 각 이름은 하나의 IP 주소 (마지막으로 사용 된 IP 주소) 만 가질 수 있습니다 (전체 고유 이름은 1 개의 결과 만 가지거나 부분 이름이 여러 계정과 일치하는 경우 여러 결과가 있음). 그러나 IP 주소는 여러 개의 이름 같은 IP에). 내가 원하는 것은 이름을 검색하면 정규 고유 한 결과 (전체 고유 이름이 입력 된 경우)를 수행하지만 그 아래에서 이름에 대한 IP의 보조 검색을 수행합니다. 형식으로 검색했습니다.

는 "당신의 이름에 대한 검색이 결과를 반환했습니다. {결과를} 우리는 또한 는 동일한 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을 검색해야합니다.



"이름"과 "lastip"각각 다음과 같이 데이터가라는 두 개의 열이있는 테이블 : 당신이 Player2를 검색하는 경우 (

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의 IP를 검색 한 경우 동일한 IP 주소를 사용하는 다른 계정이 있으므로 [player2 + altaccount2]의 결과가 두 개 있습니다.

포 성. 나는 가능한 한 많은 세부 사항을 제공하기를 원한다. 나는 이것을 연구하려고 노력했지만, 지금 당장 블록을 가지고있다. 감사합니다. 다시 한 번,이 모든 것을 읽게해서 죄송합니다.)

+0

현재 버전의 PHP를 사용하는 경우 입력 필터를 활용하십시오. '$ iplookup = filter_input (INPUT_GET, 'iplookup', FILTER_VALIDATE_IP); ' –

+0

네, 고마워요! :) – DreamPhreak

답변

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

하지만 다른 장소에서 연결하는 플레이어가있을 때 오류가 발생합니다 (샘플 데이터의 일부가 아닙니다) –

+0

잠깐, 정확히 무엇을 의미합니까? – DreamPhreak

+0

단순히 player1 333.333.333.333 및 player2 444.444.444.444를 테스트 데이터에 추가 한 다음 "player1"을 검색하면 하위 쿼리가 두 개 이상의 행을 반환합니다. jared의 대답을 고려해야하며 사용자가 IP 주소를 찾고있는 경우에만 제안한 쿼리를 사용해야합니다. 내 대답을 편집하여 함께해야 할 다른 쿼리를 보여줍니다. –

1

나는 당신이하려고하는 것이 2 개의 분리 된 SQL 문자열을 필요로한다고 생각하고 제공된 데이터에 필요한 것을 호출한다.그래서 $iplookup 경우

는, 분명히 IP (사용 정규식 체크)입니다 :

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

당신은 사용 :

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

정규식 당신이 preg_match(), curtousy으로이를 확인하는 데 사용할 수있는 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 
} 
관련 문제