Markus
Markus

Reputation: 407

Best way to set value of selection in php

i'm looking vor a nice way to set the value of an html dynamic with php based on data from a database. Currently it looks like this:

<select class="form-control" name="displayNavigation" id="displayNavigation">
    @if(isset($site['displayNavigation']) and $site['displayNavigation'] == 1)
        <option value="1" selected>Yes</option>
        <option value="0">No</option>
    @elseif(isset($site['displayNavigation']) and $site['displayNavigation'] == 0)
        <option value="1">Yes</option>
        <option value="0" selected>No</option>
    @else
        <option value="1">Yes</option>
        <option value="0">No</option>
    @endif
</select>

I think that is not the right way to set the value for a select list with more then 10 options.

Is there another way to do this?

Upvotes: 2

Views: 165

Answers (4)

Sujan Gainju
Sujan Gainju

Reputation: 4767

You can simply use the @if condition inside the <option> and set selected attribute

<select class="form-control" name="displayNavigation" id="displayNavigation">
        <option value="1" @if($site['displayNavigation'] == 1) selected @endif>Yes</option>
        <option value="0" @if($site['displayNavigation'] == 0) selected @endif>No</option>
    @endif
</select>

Upvotes: 2

AymDev
AymDev

Reputation: 7609

A PHP 7 answer using null coalescing operator ??:

<select class="form-control" name="displayNavigation" id="displayNavigation">
    <option value="1" <?php echo ($site['displayNavigation'] ?? 2) == 1 ? 'selected' : ''; ?>>Yes</option>
    <option value="0" <?php echo ($site['displayNavigation'] ?? 2) == 0 ? 'selected' : ''; ?>>No</option>
</select>

If you are under PHP 7 just do the same using isset():

<select class="form-control" name="displayNavigation" id="displayNavigation">
    <option value="1" <?php echo isset($site['displayNavigation']) && $site['displayNavigation'] == 1 ? 'selected' : ''; ?>>Yes</option>
    <option value="0" <?php echo isset($site['displayNavigation']) && $site['displayNavigation'] == 0 ? 'selected' : ''; ?>>No</option>
</select>

Upvotes: 2

shubhangee
shubhangee

Reputation: 539

Give a try with below code if it helps for you

<select class="form-control" name="displayNavigation" id="displayNavigation">   
    <option value="1" @if(isset($site['displayNavigation']) and $site['displayNavigation'] == 1) selected @endif>Yes</option>
    <option value="0" @if(isset($site['displayNavigation']) and $site['displayNavigation'] == 0) selected @endif>No</option>    
</select>

Upvotes: 2

PHP Web
PHP Web

Reputation: 257

Your if-else statement needs to be modified . This code will solve your problem .

<select class="form-control" name="displayNavigation" id="displayNavigation">
    <option value="1" <?php if(isset($site['displayNavigation']) and $site['displayNavigation'] == 1){?>selected<?php } ?>>Yes</option>
    <option value="0" <?php if(isset($site['displayNavigation']) and $site['displayNavigation'] == 0){?>selected<?php } ?>>No</option>
</select>

Upvotes: 1

Related Questions