PAUL CLEGG
PAUL CLEGG

Reputation: 1

PHP and mysqli to modify CSS

I was experimenting if I could use a mySQL database to store CSS settings. I set up a simple database "colors" with one table "color" that had simple structure tag and color columns. In that, one row is h1 => red.

<?php
//function to dynamically change CSS

    $tag = 'h1';
    $q = "SELECT * FROM `colors` WHERE `tag`='" . $tag . "'" ;
    echo $q . "<br>";
    $query = mysqli_query($link, $q);
    if ($row = mysqli_fetch_assoc($query))
    {
        echo $row['color'];
    } else
    {
        echo "error - no such tag";
    }
?>

When I tried to convert to a function, the code does not work at all.

<?php
//function to dynamically change CSS
function getCSS($tag)
{
    $tag = 'h1';
    $q = "SELECT * FROM `colors` WHERE `tag`='" . $tag . "'" ;
    echo $q . "<br>";
    $query = mysqli_query($link, $q);
    if ($row = mysqli_fetch_assoc($query))
    {
        echo $row['color'];
    } else
    {
        echo "error - no such tag";
    }
}
getCSS('h1');
?>

Help please?

Upvotes: 0

Views: 191

Answers (4)

Marin N.
Marin N.

Reputation: 366

This should work:

<?php

$link = mysqli_connect('server_host', 'user', 'password', 'database') OR die('Could not connect because: '.mysqli_connect_error());

//function to dynamically change CSS
function getCSS($link, $tag){

$q = 'SELECT * FROM colors WHERE tag = "' . $tag . '"' ;
$r = mysqli_query($link, $q);

if(mysqli_num_rows($r)>0){ // check if there are results

    while($row = mysqli_fetch_assoc($r)){
    //echo '<pre>';      
    //print_r($row);            // print the result array for debugging
    //echo '</pre>';

    echo $row['color'] . '<br />';

    }

    return $row;

} else {  // if no result is found

    echo 'No such tag';

}

}
// test it:
echo '<br />if tag is h1<br />';
getCSS($link, 'h1');

echo '<br />if tag is h2<br />';
getCSS($link, 'h2');

?>

Upvotes: 0

puppyFlo
puppyFlo

Reputation: 445

At the start of your function add a reference to your global DB link:

function getCSS($tag) {
    global $link;
    ...

Upvotes: 0

chenyb999
chenyb999

Reputation: 139

in function, there is no $link, you shoud define it as a global variable.

Upvotes: 0

snitch182
snitch182

Reputation: 723

My guess is that in

$query = mysqli_query($link, $q);

$link goes out of scope and is empty. You should pass it to the function as well.

For the record: using $tag without escaping could be an sql injection attack possibility.

Upvotes: 1

Related Questions