2012-03-08 14 views
0

私は、mysqlにip番号を格納したipベースの拒否リストを作ろうとしました。基本的に私はリダイレクトしようとすると、ユーザーのIPの配列では、それは動作しません。なにが問題ですか?PHPのヘッダの場所は役に立たない

$ip_array = array(); 
$ip_ban_query = mysql_query("SELECT ip FROM banned_ips"); 
while ($deny = mysql_fetch_assoc($ip_ban_query)){ 

$add_ip = $deny['ip']; 
$ip_array[] = $add_ip; 

} 
if (in_array ($_SERVER['REMOTE_ADDR'], $ip_array)) { 
    header("Location: http://www.google.com/"); 
    exit(); 

} 
+0

禁止されたIPをリダイレクトしていませんか?それはまったくリダイレ​​クトされませんか?どのように正確にそれは "動作していない"ですか? 'in_array'とあなたのカッコの間にスペースがありますが、それが重要かどうかは分かりません。 – SenorAmor

+0

リダイレクトされません。 –

+0

コードは大丈夫です。ローカルホストでこれを行いますか?あなたの$ ip_arrayには期待値が入っていますか? – arma

答えて

1

我々は非常にほとんど常に複雑さを低減することがバグを離れてフラッシュ...ここにコードを簡素化することができます。 :)

// There are several different methods to accomplish this, and you really 
// should be using statements here, but both are out of scope of this question. 
$ipBanQuery = sprintf("SELECT ip FROM banned_ips WHERE ip = '%s'", mysql_real_escape_string($_SERVER['REMOTE_ADDR'])); 

$result = mysql_query($ipBanQuery); 
if (mysql_num_rows($result)) { 
    header('Location: http://www.google.com/'); 
    exit(); 
} 

また、このコードをどこで呼び出すかによって異なります。迷惑スペース、HTML、その他のデバッグ情報がブラウザに出力される前に呼び出されていることを確認してください。追加のヘッダは送信されません。 Webサーバーのエラーログをチェックして、何か起きているかどうかを確認してください。

+0

この愚かな質問は申し訳ありませんが、クエリの前にdb接続を忘れてしまった...これはあまりにも多くの作業のバグです:)多くのありがとうございます。 –

+0

私たちは皆その気持ちを知っています。あなたはそれが働いてうれしい! :) – Morgon

関連する問題