A ver, vamos con calma, ¿antes de modificar te mostraba los mensajes de error?
Bien, si eso es correcto, entonces el problema no está en mostrar los errores sino en la asignación de los mismos.
Ahora... al usar foreach() extraes cada palabra como índice de post y se asigna automáticamente a $nombre dicho valor, así pues la comparación empty($nombre) jamás va a dar false.
Entiendo que intentas simular variables para resumir el código, pero lo estás haciendo mal, pues no estás simulando ningún variable mas que en tu imaginación.
Para hacerlo verdadero debes usar la sintaxis de variables variables, como dice en el manual.
Código PHP:
foreach ($foo as $bar)
{
if (empty($$bar)) // ...
}
Nota que el doble
$$ es lo que hace falta en algún punto de tu script para que funcione.