2013-05-16 36 views
1

我有一個PHP代碼,它的功能是阻止IP地址。阻止IP地址,查詢來自數據庫的IP

include ("includes/_db_.php"); 
$query_ip = mysql_query("SELECT * FROM t_ip_address"); 
while ($data_ip = mysql_fetch_array($query_ip)) 
{ 

$valid_ips = $data_ip['ip_address']; 

if (!in_array($_SERVER['REMOTE_ADDR'],$valid_ips)) 
{ 
    echo '<div class="denied"><img src="images/stop.png"/><span class="titles">Access Denied</span><br><span class="content">Sorry you do not have authorized to access this page.</span></div> 
     <div class="footer"><a href="../">Back to previous page</a></div> 
     '; 
     exit(); 
    } 
    } 

但現在面臨的問題,錯誤的是:警告:in_array()預計參數2是數組,字符串中...

任何人都有一個建議給?

+0

你爲什麼不只是創建'SELECT * FROM t_ip_address其中ip = $ ip'然後只檢查行計數 – Class

+0

'$ valid_ips'不是一個數組,那就是你每次更新一個標量通過循環。 – Barmar

+0

那麼,我需要做什麼? –

回答

2

您最好在數據庫中搜索$_SERVER["REMOTE_ADDR"]並檢查 是否返回任何內容。

$query_ip = mysql_query("SELECT * FROM t_ip_address where ip_address = '".mysql_real_escape_string($_SERVER["REMOTE_ADDR"])."'"; 
if (!mysql_fetch_array($query_ip)){ 
    echo '<div class="denied"><img src="images/stop.png"/><span class="titles">Access Denied</span><br><span class="content">Sorry you do not have authorized to access this page.   </span></div> 
    <div class="footer"><a href="../">Back to previous page</a></div> 
    '; 
    exit();   
} 
+0

我相信'if(!mysql_fetch_array($ query_ip))'應該是'if(mysql_fetch_array($ query_ip))' – raidenace

+0

@Raidenace答案是正確的。 DB包含允許的IP列表,因此如果未找到客戶端IP,它將顯示「未經授權」。 – Barmar

+0

@Barmar:哦!我認爲這是一個黑名單,而不是一個白名單。這應該是一個非常封閉的訪問列表... – raidenace