php - undefined变量 - 在if语句中声明

时间:2015-01-28 19:24:04

标签: php

我输入以下代码,假设在输入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 >

如果我在if语句之外声明$ culoareHexaString,它可以正常工作,但我不明白为什么。

在以下示例中,没有必要在if语句之外声明$ c变量。

$a = 5; 
    $b = 6; 

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

$ c变量的值为:&lt; ?php echo $ c? &GT;

我缺少什么?

谢谢!

2 个答案:

答案 0 :(得分:1)

下面:

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

您在永远不会执行的块中初始化$culoareHexaString,因为第一个视图/非提交是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.

?>

答案 1 :(得分: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();

.....

相关问题