使用串联向HTML表单添加函数会导致函数错误地显示在表单的顶部

I'm trying to make a form with a drop-down menu that's populated from a MySQL database. I put the code used to create the drop-down menu in a function and I'm trying to put the complete form itself in a function as well.

The problem is for some reason the dropdown-menu shows at the top of the form instead of at the bottom, like it should. If I look at the HTML being generated it appears that for some reason the function isn't rendering inside of the tags at all.

echo "<form method='post'>
<table>
    <tr>
        <td><label for='artikelnr'>Artikelnummer:</label></td>
        <td><input type='text' name='artikelnr' /></td>
    </tr>
    <tr>
        <td><label for='omschrijving'>Omschrijving:</label></td>
        <td><input type='text' name='omschrijving' /></td>
    </tr>
    <tr>
        <td><label for='verkoopprijs'>Verkoopprijs:</label></td>
        <td><input type='text' name='verkoopprijs' /></td>
    </tr>
    ".categorie()."
    <tr>
        <td><input type='submit' name='submit' value='Toevoegen' /></td>
    </tr>
</table>
</form>";

For some reason the function category() actually seems to be generating before the form. As in, before the echo. In the HTML it'll first generate the drop-down menu in HTML, and then all the HTML contained in the echo, not including the function categorie(). How do I get the function to generate in the correct spot?

Probably the data that is put out by category() doesn't contain the correct <tr> or <td> tags

Keep the form and the function separate. In the dropdown menu call the function to populate the dropdown like in here:

<?php
function fetch_data(){
    //code to fetch data from the database
    //return the result in a array as (say) $fetch_data
}

and in the form

<select>
<?php foreach($fetch_data as $show_data){ ?>
<option value="<?php echo $show_data['data_id']; ?>"><?php echo $show_data['data']; ?></option>
<?php } ?>