Michael Philibin
Michael Philibin

Reputation: 403

If database entry null, do not display div

I have a database with option1, option2, option3, option4, option5 as columns. Options 1-3 have data entered, however, options 4-5 are NULL.

How can I set it so that a div is NOT displayed if option in database is NULL?

PHP code:

 $sql = "SELECT option1, option2, option3, option4, option5 FROM options";
        $result = mysqli_query($conn, $sql);
        $null = NULL;
        
        if (mysqli_num_rows($result) > 0) {
            while($row = mysqli_fetch_assoc($result)) {
                if ($result != $null) {
                    echo '<div class="row">' . '<div1></div1>' . '<div2>' . $row["option1"]. '</div2>' . '</div>';
                }
                else {
                    echo '<div class="null"></div>';
                }
                if ($result != $null) {
                    echo '<div class="row">' . '<div1></div1>' . '<div2>' . $row["option2"]. '</div2>' . '</div>';
                }
                else {
                    echo '<div class="null"></div>';
                }
                if ($result != $null) {
                    echo '<div class="row">' . '<div1></div1>' . '<div2>' . $row["option3"]. '</div2>' . '</div>';
                }
                else {
                    echo '<div class="null"></div>';
                }
                if ($result != $null) {
                    echo '<div class="row">' . '<div1></div1>' . '<div2>' . $row["option4"]. '</div2>' . '</div>';
                }
                else {
                   echo '<div class="null"></div>';
                }
                if ($result != $null) {
                    echo '<div class="row">' . '<div1></div1>' . '<div2>' . $row["option5"]. '</div2>' . '</div>';
                }
                else {
                    echo '<div class="null"></div>';
                }
                ...

CSS code:

.null {
    display: none;
}

At the moment, even for options 4-5, div class="null" is not working and div class="row" is being displayed (height=70px) but is blank.

Upvotes: 0

Views: 131

Answers (2)

jameslafferty
jameslafferty

Reputation: 2182

I think this does what you're after, although I'd ditch the <div1></div1>-ish markup in favor of just <div></div>.

 <?php
$sql = 'SELECT option1, option2, option3, option4, option5 FROM options';
$result = mysqli_query($conn, $sql);


while($row = mysqli_fetch_array($result)) {
    foreach($row as $option) {
        if (!empty($option)) {
            printf('
                <div class="row">
                    <div1></div1>
                    <div2>%s</div2>
                </div>
            ', $option);
        }
    }
}

Upvotes: 0

Qirel
Qirel

Reputation: 26460

You are comparing the actual query to null, not the individual columns.

$result = mysqli_query($conn, $sql);

The line above returns a mysqli-result object, not the rows or columns - use your $row variable in the loop, which holds each row, like this

if ($row['option1'] != null) {
    echo '<div class="row">' . '<div1></div1>' . '<div2>' . $row["option1"]. '</div2>' . '</div>';
} else {
    echo '<div class="null"></div>';
}
if ($row['option2'] != null) {
    echo '<div class="row">' . '<div1></div1>' . '<div2>' . $row["option2"]. '</div2>' . '</div>';
} else {
    echo '<div class="null"></div>';
}

See that this code compares $row['option1'] with null, instead of $result compared to null.

You can also just don't do anything if there are no rows, since you don't display the div at all.

if ($row['option1'] != null) {
    echo '<div class="row">' . '<div1></div1>' . '<div2>' . $row["option1"]. '</div2>' . '</div>';
}
if ($row['option2'] != null) {
    echo '<div class="row">' . '<div1></div1>' . '<div2>' . $row["option2"]. '</div2>' . '</div>';
}

Upvotes: 1

Related Questions