How to set selected value of HTML select box with PHP

Viewed 89560

I have a next piece of the template:

<select name="interest">
    <option value="seo">SEO и Блоговодство</option>
    <option value="auto">Авто</option>
    <option value="business">Бизнес</option>
    <option value="design">Дизайн</option>
    ...

and store resulting value in $result['interest'].

How can I mark option element as selected with PHP?

Thanks!

10 Answers

Another way ( as used in WordPress ) Link to Wordpress code which employs reusability would be:

    <select name='result[interest]' style="width:400px">
        <option value='SEO' <?php selected($result['interest'], 'SEO'); ?>>SEO</option>
        <option value='AUTO' <?php selected($result['interest'], 'AUTO'); ?>>Auto</option>
    </select>

The selected() function determines if the value was choosen and sets the selected option.

/**
 * Outputs the html selected attribute.
 *
 * Compares the first two arguments and if identical marks as selected
 *
 * @since 1.0.0
 *
 * @param mixed $selected One of the values to compare
 * @param mixed $current  (true) The other value to compare if not just true
 * @param bool  $echo     Whether to echo or just return the string
 * @return string html attribute or empty string
 */
function selected( $selected, $current = true, $echo = true ) {
    return __checked_selected_helper( $selected, $current, $echo, 'selected' );
}

The selected() function in turn calls the helper function below to compare and determine whether the value is the selected or not. It returns 'selected=selected' or ''.

/**
 * Private helper function for checked, selected, disabled and readonly.
 *
 * Compares the first two arguments and if identical marks as $type
 *
 * @since 2.8.0
 * @access private
 *
 * @param mixed  $helper  One of the values to compare
 * @param mixed  $current (true) The other value to compare if not just true
 * @param bool   $echo    Whether to echo or just return the string
 * @param string $type    The type of checked|selected|disabled|readonly we are doing
 * @return string html attribute or empty string
 */
function __checked_selected_helper( $helper, $current, $echo, $type ) {
    if ( (string) $helper === (string) $current ) {
        $result = " $type='$type'";
    } else {
        $result = '';
    }

    if ( $echo ) {
        echo $result;
    }

    return $result;
}

Simple short hand method would be

//after pulling your content from database
$value = interest['value'];
<option value="seo" <?php echo ($value == "seo") ? 'selected = "selected"' : '' ;?> >SEO и Блоговодство</option>
...

I hope this helps

Don't need to write anything. Just type the below code

            `<div class="form-group">
                <label for="title">Blog Trending Or Not ?</label><br>
                <select class="custom-select" id="inputGroupSelect01"  name="interest">
                    
                    <option value="seo"<?php if($row['is_trending']=="seo"){echo "selected";} ?>>SEO и Блоговодство</option>
                    <option value="auto"<?php if($row['is_trending']=="auto"){echo "selected";} ?>>Авто</option>
                    <option value="business"<?php if($row['is_trending']=="business"){echo "selected";} ?>>Бизнес</option>
                    <option value="design"<?php if($row['is_trending']=="design"){echo "selected";} ?>>Дизайн</option>
                </select>
            </div>`

Keep your scripting DRY and clean by setting up an array to contain your option data. Loop through the array and print the data into a template string with placeholders to avoid ugly, clumsy interpolation, concatenation, and inline conditions.

Code: (Demo)

$interests = [
    'seo' => 'SEO и Блоговодство',
    'auto' => 'Aвто',
    'business' => 'Бизнес',
    'design' => 'Дизайн',
];
$selected = 'business';

echo '<select name="interest">';
foreach ($interests as $value => $text) {
    printf(
        '<option value="%s"%s>%s</option>',
        $value,
        $selected === $value ? ' selected' : '',
        $text
    );
}
echo '</select>';

For anyone who puts in the extra effort to produce line-separated options with appropriate tabbing, there are a few ways to add tabs and newlines while printing in PHP, but I'll not demonstrate them here.

Related