Đối với mỗi danh mục, bạn đang hiển thị hai tùy chọn, một tùy chọn trống và một tùy chọn có thông tin danh mục:
$category_string .= '<option value=""></option><option value="'.$category['catid'].'">'.$opt_value.'</option>';
Đây là bên trong vòng lặp của bạn. Vì vậy, mỗi khi vòng lặp của bạn lặp lại, hai các tùy chọn sẽ được tạo. Một trống và một với danh mục của bạn. Tôi cá là bạn chỉ cần một tùy chọn trống ở đầu <select>
. Tôi nghĩ đây là những gì bạn muốn:
// 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;
}
Ngoài ra, như @MoeTsao đã đề cập trong các nhận xét, hãy cố gắng tránh sử dụng mysql_*
vì PHP không khuyến khích sử dụng chúng. Thay vào đó, hãy sử dụng mysqli_*
hoặc PDO
.