2013-04-06 3 views
0

현재 ip가 웹 사이트로 이동하는 쿼리 만 허용하는 스크립트를 만들고 있습니다. 하지만 현재의 문제는 쿼리의 첫 번째 결과 만 통과하도록 허용하고 두 번째 결과는 나머지가 아니라는 것입니다.if else 문으로 여러 결과가 포함 된 쿼리 결과

require_once("../mysql.php"); 
$ip = $_GET['ip']; 
$sql = "SELECT DISTINCT ip FROM servers WHERE status = 1"; 
$res = mysql_query($sql) or die(mysql_error()); 
$allow = mysql_fetch_assoc($res); 
if ($ip != $allow['server']) { 
    echo 'IP is not allowed!'; 
    die(); 
} 
$port = $_GET['port']; 

이 경우 내가 뭘 잘못하고 있니?

답변

0

될해야 : (빠른 방법)을 사용하여 간단하게

$ipAllowed = false; 
while ($allow = mysql_fetch_assoc($res)) 
    if ($ip == $allow['server']) { 
     echo 'IP is allowed!'; 
     $ipAllowed = true; 
     break; 
    } 
if (!$ipAllowed) { 
    echo 'IP is not allowed!'; 
    die(); 
} 

나 :

$sql = "SELECT ip FROM servers WHERE status = 1 AND ip = '".mysql_real_escape_string($ip)."'"; 
$res = mysql_query($sql) or die(mysql_error()); 
if (mysql_num_rows($res) === 0) { 
    echo 'IP is not allowed!'; 
    die(); 
} 
+0

나를 위해 일했습니다! –

+0

@PatrickKnobbout :이 작업은 가능하지만 최적화 된 코드는 아닙니다. 내 대답에 자원 최적화 된 결과가 표시되는지 확인하십시오. –

+0

@YuvrajJain 두 번째 가능성과 대답 사이에 어떤 차이점이 보이지 않습니까? – bwoebi

0

for 루프가 필요합니다. 그렇지 않으면 쿼리의 마지막 행만 표시됩니다.

$allow = mysql_fetch_assoc($res); 

당신은 같은 while 루프를 사용할 필요가

while($allow = mysql_fetch_assoc($res){ 
    if ($ip != $allow['server']) { 
      echo 'IP is not allowed!'; 
      continue; 
     }else 
     $port = $_GET['port']; 
} 
+0

이것은 작동하지 않습니다. 당신은 이미 루프의 첫 번째 잘못된 항목에서 죽는다 ... – bwoebi

+0

@bwoebi 편집 됨! – auicsc

+0

"IP는 허용되지 않습니다!"라는 문자열을 얼마나 자주 볼 수 있습니까? ? ^^ – bwoebi

0

왜 돈 ' SQL 쿼리에서 IP를 확인합니까?

require_once("../mysql.php"); 
$ip = $_GET['ip']; 
$sql = "SELECT count(*) FROM servers WHERE status = 1 AND IP = '".$ip."'"; 

그런 다음 SQL 문의 반환 값이 "0"보다 큰지 확인할 수 있습니다. true 인 경우 IP 주소는 데이터베이스 쿼리에 있습니다. 그렇지 않으면 ip는 테이블에 포함되지 않습니다. 아마도 SQL 인젝션을 막기 위해 $ ip 변수를 벗어나는 것이 유용 할 것입니다.

가 IP 주소를 확인하기 위해 사용하는 방법은 전혀 최적화 할 것으로 보인다
0
require_once("../mysql.php"); 
$ip = $_GET['ip']; 
$sql = "SELECT DISTINCT ip FROM servers WHERE status = 1"; 
$res = mysql_query($sql) or die(mysql_error()); 
while($allow = mysql_fetch_assoc($res)) 
{ 
    if ($ip != $allow['server']) { 
    echo 'IP is not allowed!'; 
    die(); 
    } 
    else 
    { $port = $_GET['port']; } 

} 

... IP를 데이터베이스에서 수집 한 다음 해당 필드의 개별 IP를 확인하십시오.

대신 특정 IP 주소 나 IP 주소 범위로 쿼리를 필터링해야합니다. 그러면 SQL이 결과에 따라 결과를 보내므로 응용 프로그램에서 아무런 작업 리소스도 사용하지 않습니다.

당신은 같이 할 수

,

$query = mysql_query("SELECT ipAddress as Record FROM YOURTABLENAME where status=1 and IP =".$ip); 

if(mysql_num_rows($query)>0) 
{ 
    //IP found do you logic here. 
} 
else 
{ 
    //IP not found do you logic here. 
} 

이 의지가 75 % 이상 리소스를 절약 사용할 수 있습니다.

희망은 분명합니다.

감사합니다.

0

, 당신은 모든 있음에 대한 while 루프를 만들고 루프 의지가 모든 가치를 제공하는 동안의 사용

관련 문제