2012-04-02 55 views
0

我想有一个页面,我可以更改密码。我应该是唯一可以访问它的人。所以我的想法是保存我的IP地址,然后将它存入数据库。我的第一个尝试是手工输入IP。转念一想,这将是更容易和更安全的为好,让我的IP地址,我在由被称为ip.php第二个文件有:如果声明不工作,而隐窝

$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的正确方法。所以我不明白为什么这不会工作。谢谢。

UPDATE

没关系,当错误报告被设置为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语句,并忘记了if语句中的条件,首先到达else语句。我试图得到没有if语句条件的输出。所以当第一个短语没有发生时,肯定没有产生输出。多数民众赞成为什么var_dump为空,并没有显示任何错误,因为没有错误:)非常感谢试图帮助我。我真的很感激。

+0

为什么你使用''strip_tags()''''stripslashes()'和'trim()'盲目地使用每个POST变量? – 2012-04-02 15:34:14

+0

防止sqlinjections在某人曾经会找到页面的情况下! – bonny 2012-04-02 15:36:11

+0

哦,我原以为你正在使用'real_escape_string()'。然后,不要忘记'strtolower()'。这样可以防止黑客在你的页面中大喊大叫; --P – 2012-04-02 15:42:04

回答

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

这些点可能包含原始邮件中的文件名和行。你最直接的错误是:在你最喜欢的编辑器中打开它,找到该行中的变量用法。我的教育猜测是,你正在使用一个函数中的那个变量,而这个函数没有收到它作为参数。

另一个容易点错误:

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

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

编辑:所以这个错误是在你之前没有提到的其他代码中。这就是为什么你需要阅读错误信息:他们在那里帮助,而不是惹恼。现在,你需要什么样的进一步帮助?除非您先写下,否则您无法阅读$db_IP

+0

您可以编辑原始问题以添加详细信息。注释中的代码是不可读的。 – 2012-04-02 15:51:47

+0

这是什么意思?我很抱歉,看来我不太明白。我想,按提交后,它会被写入。我也知道crypt()函数首先必须用一些输入来提供。按下提交后输入将可用,以便代码已生成? – bonny 2012-04-02 16:55:18