2012-04-02 11 views
0

パスワードを変更できるページが必要です。私はそれにアクセスできる唯一の人でなければなりません。だから私の考えは私のIPアドレスを保存し、それをdbに格納する前に暗号化することでした。私の最初の試みは手でipを入力することでした。今、これは私が私に追加されたものであるif文がcrypt中に機能しない

$http_client_ip = $_SERVER['HTTP_CLIENT_IP']; 
    $http_x_forwarded_for = $_SERVER['HTTP_X_FORWARDED_FOR']; 
    $remote_addr = $_SERVER['REMOTE_ADDR']; 

    if (!empty($http_client_ip)){ 
     $ip_address = $http_client_ip; 
    } 
     else if (!empty($http_x_forwarded_for)){ 
      $ip_address = $http_x_forwarded_for; 
    }else{ 
     $ip_address = $remote_addr; 
    } 

:その後、私は2番目のファイルで得たものを私のIPアドレスがでip.php呼び出されるために、それは同様にはるかに簡単かつ安全だろう、と思いましたこのようなスクリプトは、次のようになります。

if(isset($_POST['submit'])){ 
    include_once "db_connect.php"; 
    include_once "ip.php"; 

    $IP = $ip_address; 

    $masterkey = $_POST['masterkey']; 
    $masterkey2 = $_POST['masterkey2']; 


    if(empty($masterkey)||empty($masterkey2)){ 
     if(empty($masterkey)){ 
      $errors[]="there is no key1"; 
     } 
     if(empty($masterkey2)){ 
      $errors[]="there is no key2"; 
     } 

    }else{ 

     $masterkey = strip_tags($masterkey); 
     $masterkey = stripslashes($masterkey); 
     $masterkey = trim($masterkey); 
     $masterkey = $db->real_escape_string($masterkey); 

     $masterkey2 = strip_tags($masterkey2); 
     $masterkey2 = stripslashes($masterkey2); 
     $masterkey2 = trim($masterkey2); 
     $masterkey2 = $db->real_escape_string($masterkey2); 

     $IP = strip_tags($IP); 
     $IP = stripslashes($IP); 
     $IP = trim($IP); 
     $IP = $db->real_escape_string($IP); 

     $db_IP = crypt($ip_address, '$2a$12$password'); 
       ...start queries 

私の問題は、else文がうまくいきません。私はなぜこれが動作していないのか分からない理由のために。私はまたのvar_dumpを試みたが、アップ示すエラーがなかった

Notice: Undefined variable: db_IP in ... 

:私もerrorreportを使用してメッセージを取得されました。しかし、私が反響するとき

$IP and $ip_address 

これは正しい方法を表示します。だから私はなぜこれは動作しません理解していない。ありがとう。

UPDATE

さて、エラー報告をE_ALLに設定されている場合、変数は

として定義される一方

<?php echo $db_IP;?> 

に関する

Notice: Undefined variable: db_IP in /var/www/web775/html/scripts/masterchange.php on line 179 

を表示します

$db_IP = crypt($IP, '$2a$12$password'); 

$IP = $ip_address; 

$ip_address 

ip.phpから来

アップデート2

大丈夫、私は問題を解決しました。失敗はif-else条件があるということでした。私はちょうどelseステートメントを監視し、elseステートメントを最初に取得するためにifステートメントの条件が何か忘れていました。私はif文の条件なしで出力を得ようとしました。最初のフレーズが出現しなかったときに出力が生成されていないことは確かです。なぜvar_dumpが空で、エラーがなかったので何も表示されませんでした:)助けてくれてありがとう。私は本当にそれを感謝します。

+0

あなたが使用しているPOST変数をすべて盲目的に 'strip_tags()'、 'stripslashes()'と 'trim()'しているのはなぜですか? –

+0

誰かがかつてページを見つけた場合に、sqlinjectionを防ぐ! – bonny

+0

ああ、私はあなたが 'real_escape_string()'を使っていると思っていたでしょう。次に、 'strtolower()'も忘れないでください。 -P –

答えて

0
Notice: Undefined variable: db_IP in ... 
            ^^^ 

これらのドットには、元のメッセージにファイル名と行が含まれている可能性があります。あなたの最も直接的なエラーはそこにあります:あなたの好きなエディタの終わりにそれを開き、その行の変数の使い方を見つけてください。私の推測では、変数を引数として受け取らない関数からその変数を使用しているということです。

別に簡単にスポットエラー:

$masterkey = $_POST[$IP]; 
$masterkey = $_POST['masterkey']; 

あなたは$_POST[$IP]を読み、次の行でそれを捨てます。

編集:このエラーは以前に言及していないコードの一部です。だからあなたはエラーメッセージを読む必要があります。彼らは助けてくれるものです。さて、あなたはどんなに多くの助けを必要としていますか?あなたが最初にそれを書く場合を除き、$db_IPを読むことはできません。

+0

元の質問を編集して詳細を追加することができます。コメントのコードは読めません。 –

+0

それはどういう意味ですか?申し訳ありませんが、私は本当に理解していないようです。私は、提出を押すと、それが書かれると思った。私はまた、crypt()関数が最初にいくつかの入力でフィードされなければならないことも知っています。コードが生成されるようにsubmitを押した後でその入力が利用可能になるでしょうか? – bonny

関連する問題