php - неопределенная переменная - объявлена внутри оператора if

0

У меня есть следующий код, который предполагает изменение цвета фона после ввода цветовых кодов RGB и нажатия кнопки "Отправить".

Я не знаю, по какой причине я получаю "Неопределенная переменная" и имею черный цвет фона перед тем, как нажать кнопку "Отправить"

< ?php

        error_reporting(E_ALL); 
        ini_set('display_errors',true);



$form = "< form method='post' action=$_SERVER[PHP_SELF] >\n

        R: < input type='text' name='r' >
        G: < input type='text' name='g' >
        B: < input type='text' name='b' > 
        < input type='submit' name='buton' value='go' >\n";
        < /form >

$hexa = array();
$culoareHexa = array();

function &decimal2hexa($valoare) {

    $valoriHexa = array('0'=>'0', '1'=>'1', '2'=>'2', '3'=>'3', '4'=>'4', '5'=>'5', '6'=>'6', '7'=>'7', '8'=>'8', '9'=>'9', '10'=>'A', '11'=>'B', '12'=>'C', '13'=>'D', '14'=>'E', '15'=>'F' );

    if ($valoare <= 15) {
        $numarHexa[] = $valoare;
        $numarHexa[] = 0;
    } else {
        while ($valoare >= 15) {
            $catul = $valoare / 16;
            settype($catul, 'int');
            $restul = $valoare % 16; 
            $valoare = $catul; 
            $numarHexa[] = $restul;
        }
        $numarHexa[] = $catul;
    }

    krsort($numarHexa);

    foreach ($numarHexa as $key => $value) {
        if ($value > 9) {
            $numarHexa[$key] = $valoriHexa[$value];
        }
    }

    $numarHexa = array_values($numarHexa);  //reindexez si pastrez valorile pe pozitia initiala
    return $numarHexa;

}


if ($_SERVER['REQUEST_METHOD'] === 'GET') {

    echo $form;
} else {

    if (!isset($_POST['r']) || !is_numeric($_POST['r']) || ($_POST['r'] > 255) || ($_POST['r'] < 0) || 
        !isset($_POST['g']) || !is_numeric($_POST['g']) || ($_POST['g'] > 255) || ($_POST['g'] < 0) ||
        !isset($_POST['b']) || !is_numeric($_POST['b']) || ($_POST['b'] > 255) || ($_POST['b'] < 0)) {
            echo "date invalide!";
            echo $form;
    } else { 
        $culoareHexaR =& decimal2hexa($_POST['r']);
        $culoareHexaG =& decimal2hexa($_POST['g']);
        $culoareHexaB =& decimal2hexa($_POST['b']);
        var_dump($_POST);
        var_dump($culoareHexaR);
        var_dump($culoareHexaG);
        var_dump($culoareHexaB);
        $culoareHexa = array_merge($culoareHexaR, $culoareHexaG, $culoareHexaB);
        var_dump($culoareHexa);
        $culoareHexaString = "";
        for ($i = 0; $i < count($culoareHexa); $i++) {
            $culoareHexaString .= $culoareHexa[$i]; 
        }
        echo $culoareHexaString;
    }
}

? >

< html >

    < body bgcolor="< ?php echo $culoareHexaString ? >"> 

    < /body >
< /html >

Если я объявляю $ culoareHexaString за пределами оператора if, он работает нормально, но я не понимаю, почему.

в следующем примере нет необходимости объявлять переменную $ c вне оператора if.

$a = 5; 
    $b = 6; 

    if ($a > $b) {
        echo "this will not be print";
    } else {
        $c = $a+$b;
    }

переменная $ c будет иметь значение: <? php echo $ c? >

что мне не хватает?

благодарю!

  • 1
    Поскольку $culoareHexaString не инициализируется и вводит оператор if, поэтому $culoareHexaString в операторе else никогда не будет объявлен! В вашем примере он входит в оператор else, и поэтому он определен (кстати: я надеюсь, у вас нет пробела здесь < ?php )
Теги:

2 ответа

1

Вот:

if ($_SERVER['REQUEST_METHOD'] === 'GET') {
   ...
} else {
   // code not executed on GET/initial page view
}

Вы инициализируете $culoareHexaString в блоке, который никогда не выполняется, потому что первый view/non-submit является GET запросом и игнорирует условие else.

Попробуйте инициализировать значение по умолчанию вне этого блока, например:

$coloareHexaString = '#000000'; // default value?
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
   ...
} else {
   // code not executed on GET/initial page view
}

Что касается вашего примера, повторение $c также не определено, если $a < $b, поскольку он никогда не инициализировался.

<?php

$a = 7;
$b = 6;

if ($a > $b) {
    echo "this will not be print";
} else {
    $c = $a+$b;
}

echo $c; // this will be undefined.

?>
0

Потому что $culoareHexaString не установлен. Когда вы используете инструкцию if-else, на самом деле будут блоки кода и во время выполнения в соответствии с обработкой содержимого блока, связанного с оператором. для определения установки значения используйте метод isset().

Также вы можете установить цвет по умолчанию в начале, например;

    < ?php
                error_reporting(E_ALL); 
                ini_set('display_errors',true);
       $culoareHexaString = "#000000";
       $form = "< form method='post' action=$_SERVER[PHP_SELF] >\n

                R: < input type='text' name='r' >
                G: < input type='text' name='g' >
                B: < input type='text' name='b' > 
                < input type='submit' name='buton' value='go' >\n";
                < /form >

        $hexa = array();
        $culoareHexa = array();

.....

Ещё вопросы

Сообщество Overcoder
Наверх
Меню