if-оператор не работает во время склепа - PullRequest
0 голосов
/ 02 апреля 2012

Я хотел бы иметь страницу, где я могу изменить пароли. Я должен быть единственным, кто имеет к нему доступ. поэтому я думал сохранить свой 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 был пуст и не показывал никакой ошибки, потому что ошибки не было :) Большое спасибо за попытку помочь мне. я правда ценю это.

1 Ответ

0 голосов
/ 02 апреля 2012
Notice: Undefined variable: db_IP in ...  
                                     ^^^

Эти точки, вероятно, содержат имя файла и строку в исходном сообщении.Ваша самая непосредственная ошибка здесь: откройте ее в вашем любимом редакторе и найдите переменную использования в этой строке.Мое обоснованное предположение состоит в том, что вы используете эту переменную из функции, которая не получает ее в качестве аргумента.

Еще одна легко обнаруживаемая ошибка:

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

Вы прочитали $_POST[$IP]и отмените его в следующей строке.

Редактировать: Так что ошибка в каком-то другом фрагменте кода, который вы даже не упоминали раньше.Вот почему вам нужно читать сообщения об ошибках: они там, чтобы помочь, а не раздражать.Теперь, какая еще помощь вам нужна?Вы не можете прочитать $db_IP, если не напишите его первым.

...