0

我想要一个可以更改密码的页面。我应该是唯一可以访问它的人。所以我的想法是保存我的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 语句不起作用。出于某种原因,我不知道为什么这不起作用。我也在使用错误报告并收到消息:

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

更新2

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

4

1 回答 1

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

这些点可能包含原始消息中的文件名和行。您最直接的错误就在那里:在您最喜欢的编辑器中打开它,找到该行中的变量用法。我有根据的猜测是,您正在使用来自未将其作为参数接收的函数的该变量。

另一个容易发现的错误:

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

$_POST[$IP]您在下一行阅读并丢弃它。

编辑:所以错误出现在您之前甚至没有提到的其他一些代码中。这就是您需要阅读错误消息的原因:它们是用来提供帮助的,而不是用来惹恼的。现在,您究竟需要什么样的进一步帮助?$db_IP除非你先写,否则你无法阅读。

于 2012-04-02T15:38:58.463 回答