Php if语句在crypt时不起作用

Php if语句在crypt时不起作用,php,mysql,if-statement,crypt,Php,Mysql,If Statement,Crypt,我想有一个页面,我可以更改密码。我应该是唯一一个可以使用它的人。因此,我的想法是保存我的ip地址并在将其存储到数据库之前对其进行加密。我的第一次尝试是手动输入ip。然后我想,通过以下方式获得我在第二个名为ip.php的文件中获得的ip地址会更容易、更安全: $http_client_ip = $_SERVER['HTTP_CLIENT_IP']; $http_x_forwarded_for = $_SERVER['HTTP_X_FORWARDED_FOR']; $remote_a

我想有一个页面,我可以更改密码。我应该是唯一一个可以使用它的人。因此,我的想法是保存我的ip地址并在将其存储到数据库之前对其进行加密。我的第一次尝试是手动输入ip。然后我想,通过以下方式获得我在第二个名为ip.php的文件中获得的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语句不起作用。因为一个原因,我不知道为什么这不起作用。我还使用了errorreport并得到了以下信息:

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;?> 

来自ip.php

更新2

好的,我解决了这个问题。失败的原因是,存在if-else条件。我只是注意了else语句,忘记了if语句中先到达else语句的条件是什么。我试图在没有if语句条件的情况下获得输出。所以可以肯定的是,当第一个短语没有出现时,不可能产生输出。这就是为什么var_dump是空的,并且没有显示任何错误,因为没有错误:非常感谢您尝试帮助我。我真的很感激

Notice: Undefined variable: db_IP in ...  
                                     ^^^
这些点可能包含原始消息中的文件名和行。你最直接的错误就在那里:在你最喜欢的编辑器中打开它,在那一行找到变量的用法。我的猜测是,您使用的变量来自一个函数,该函数不接受它作为参数

另一个容易发现的错误:

$masterkey = $_POST[$IP];
$masterkey = $_POST['masterkey'];
您阅读了$\u POST[$IP],并在下一行中放弃它


编辑:所以这个错误出现在你以前没有提到的其他代码中。这就是为什么您需要阅读错误消息:它们是用来帮助您的,而不是用来烦扰您。现在,你到底需要什么样的进一步帮助?除非先写$db\u IP,否则您无法读取它。

为什么要删除标记、删除斜杠并盲目修剪您使用的每个POST变量?以防止SQL注入,以免有人发现页面!哦,我还以为你用的是真正的逃生绳呢。那么,也别忘了下载。这将防止黑客在你的页面上叫喊-p客户端IP和X-Forwarded-For报头都可以由客户端伪造,因此实际上您在这里没有很好地保护自己。您可能应该删除该代码,只需使用REMOTE_ADDR即可。您可以编辑原始问题以添加详细信息。注释中的代码不可读。这是什么意思?对不起,我好像不太明白。我想,按“提交”之后,它就会被写入。我还知道crypt函数首先必须提供一些输入。按submit键后,该输入将可用,以便生成代码?
$ip_address
Notice: Undefined variable: db_IP in ...  
                                     ^^^
$masterkey = $_POST[$IP];
$masterkey = $_POST['masterkey'];