Vuelvo a preguntar:
Cita: A ver, si la variable del foreach() es $classes, ¿por qué se te ocurre comprobar con empty() la variable $_POST['classes'] si no es la misma variable?
No se ve por ningún lado de tu código como estás asignando la variable $clases que usas en el foreach().
¿Asignas dicha variable en algún lado o cómo hay que hacer para adivinar?