Search code examples
phpvariablesmysqliwhile-loopsql-injection

Variables as variables from MySQL result


I have a MySQL database table, where are configured all needed colors in hexadecimal, rgb decimal and cmyk color models. All I wanna do is storing all suitable results according to the query to variables. Please show newbie how can he do that right and effectively... Thanks in advance

DB enter image description here

My disgrace

$result=$mysqli->query("SELECT * FROM config_colors WHERE `color_model_type`='hex' OR `color_model_type`='rgb'" );

while ($row=mysqli_fetch_array($result)) {
    if (($row['color']==='white') || ($row['color']==='black')) {
        if ($row['color_model_type']==='hex') {
            print_r ('$c_h_'.$row['color'].' = '.$row['color_value']);
        }
        else if ($row['color_model_type']==='rgb') {
            print_r ('$c_r_'.$row['color'].' = '.$row['color_value']);
        }
        else {}
    }
    else {
        if ($row['color_model_type']==='hex') {
            if ($row['monochromatic_level']==='lightest') {
                print_r ('$c_h_lt_'.$row['color'].' = '.$row['color_value']);
            }
            else if ($row['monochromatic_level']==='lighter') {
                print_r ('$c_h_lr_'.$row['color'].' = '.$row['color_value']);
            }
            else if ($row['monochromatic_level']==='light') {
                print_r ('$c_h_l_'.$row['color'].' = '.$row['color_value']);
            }
            else if ($row['monochromatic_level']==='medium') {
                print_r ('$c_h_m_'.$row['color'].' = '.$row['color_value']);
            }
            else if ($row['monochromatic_level']==='dark') {
                print_r ('$c_h_d_'.$row['color'].' = '.$row['color_value']);
            }
            else if ($row['monochromatic_level']==='darker') {
                print_r ('$c_h_dr_'.$row['color'].' = '.$row['color_value']);
            }
            else if ($row['monochromatic_level']==='darkest') {
                print_r ('$c_h_dt_'.$row['color'].' = '.$row['color_value']);
            }
            else {}
        }
        else if ($row['color_model_type']==='rgb') {
            if ($row['monochromatic_level']==='lightest') {
                print_r ('$c_r_lt_'.$row['color'].' = '.$row['color_value']);
            }
            else if ($row['monochromatic_level']==='lighter') {
                print_r ('$c_r_lr_'.$row['color'].' = '.$row['color_value']);
            }
            else if ($row['monochromatic_level']==='light') {
                print_r ('$c_r_l_'.$row['color'].' = '.$row['color_value']);
            }
            else if ($row['monochromatic_level']==='medium') {
                print_r ('$c_r_m_'.$row['color'].' = '.$row['color_value']);
            }
            else if ($row['monochromatic_level']==='dark') {
                print_r ('$c_r_d_'.$row['color'].' = '.$row['color_value']);
            }
            else if ($row['monochromatic_level']==='darker') {
                print_r ('$c_r_dr_'.$row['color'].' = '.$row['color_value']);
            }
            else if ($row['monochromatic_level']==='darkest') {
                print_r ('$c_r_dt_'.$row['color'].' = '.$row['color_value']);
            }
            else {}
        }
        else {}
    }
}

Additional questions about query: Is query written in terms of safety against SQL injection? What if my WHERE clause contains an integer?


Solution

  • You can use variable variables to dynamically assign values to new variables

    instead of

    print_r ('$c_h_'.$row['color'].' = '.$row['color_value']);
    

    try

    $var = 'c_h_'.$row['color'];
    $$var = $row['color_value'];