Voor elke categorie geeft u twee opties weer, een lege optie en een met de categorie-informatie:
$category_string .= '<option value=""></option><option value="'.$category['catid'].'">'.$opt_value.'</option>';
Dit is binnen uw lus. Dus elke keer dat je lus wordt herhaald, twee opties worden gemaakt. Een blanco en een met jouw categorie. Ik wed dat je er maar een nodig hebt lege optie helemaal aan het begin van de . Ik denk dat dit is wat je wilde:
// notice we are initializing $category_string with an empty option here
$category_string = '<option value=""></option>';
function build_categories_options($parent, $categories, $level) {
global $category_string;
if (isset($categories[$parent]) && count($categories[$parent])) {
$level .= " - ";
foreach ($categories[$parent] as $category) {
$opt_value = substr($level.$category['catname'],3);
// removed extra empty category and put it in $category_string initialization
$category_string .= '<option value="'.$category['catid'].'">'.$opt_value.'</option>';
build_categories_options($category['catid'], $categories, $level);
}
$level = substr($level, -3);
}
return $category_string;
}
Probeer ook, zoals @MoeTsao in de opmerkingen vermeldde, het gebruik van mysqli_*
of BOB
.