2012-04-02 53 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