0

パスワードを変更できるページが欲しいのですが。私だけがそれにアクセスできるはずです。だから私の考えは、私のIPアドレスを保存し、それをデータベースに保存する前に暗号化することでした。私が最初に試したのは、IPを手動で入力することでした。次に、ip.phpという2番目のファイルで取得したIPアドレスを次のように取得する方がはるかに簡単で安全だと思いました。

$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;
    }

これが私のスクリプトに追加したもので、次のようになります。

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ステートメントが機能しないことです。理由で、これが機能しない理由がわかりません。私もエラーレポートを使用していて、メッセージを受け取りました:

Notice: Undefined variable: db_IP in ...  

var_dumpも試しましたが、エラーは表示されませんでした。しかし、私がエコーするとき

$IP and $ip_address

IPが正しい方法で表示されます。だから私はこれがうまくいかない理由を理解していません。ありがとう。

アップデート

エラーレポートがe_allに設定されている場合は、次のように表示されます。

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

これに関連する

<?php echo $db_IP;?> 

変数は次のように定義されます

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

$IP = $ip_address; 

$ip_address

ip.phpから来ています

UPDATE2

さて、私は問題を解決しました。失敗は、if-else条件があることでした。私はelseステートメントを監視していて、最初にelseステートメントに到達するためのifステートメントの条件を忘れていました。ifステートメントの条件なしで出力を取得しようとしました。したがって、確かに、最初のフレーズが実行されなかった場合、出力は生成されなかった可能性があります。そのため、var_dumpは空で、エラーがなかったためエラーは表示されませんでした:)助けてくれてありがとう。本当に感謝しています。

4

1 に答える 1

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

これらのドットには、元のメッセージのファイル名と行が含まれている可能性があります。最も差し迫ったエラーはそこにあります。お気に入りのエディターでそれを開き、その行で変数の使用法を見つけます。私の知識に基づく推測では、引数として受け取らない関数からその変数を使用していると思います。

もう1つの見つけやすいエラー:

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

次の行でそれを読ん$_POST[$IP]で破棄します。

編集:したがって、エラーは、以前に言及していなかった他のコードにあります。そのため、エラーメッセージを読む必要があります。エラーメッセージは、煩わしいものではなく、役立つものです。さて、あなたは正確にどのようなさらなる助けが必要ですか?最初に書かないと読めません$db_IP

于 2012-04-02T15:38:58.463 に答える