Otra solución rápida, pero que saca de bastantes apuros, es agregar el modificador (array) delante del nombre de la variable:
Código PHP:
foreach((array)$cat as $key => $valor) {
// ...
}
Si $cat es un array, no tiene efecto; pero si no, trata de convertir $cat, cualquiera sea su tipo, en un array.
Pero como dije, es una solución rápida. Si el foreach se ha de ejecutar sólo si $_POST existe, entonces lo ideal es crear un apartado que incluya todos los procesos que se ejecutarán si el request es POST, incluyendo el foreach. Un if sería suficiente.
P.D.: @pateketrueke, ese ¿listo?? suena algo espeluznante