En $_POST['seleccion'] solo te van a aparecer los checkbox que hayan sido marcados, por lo que tecnicamente estas recorriendo bien la matriz dentro del for, pero logicamente tienes una falla poprque en cada paso vuelves a inicializar $cod con el valor del elemento actual en $p sin realizar un procedimiento adicional.
Te recomiendo volver a la opcion del implode usando WHERE campo in (lista), resulta mucho mas optimo tanto para PHP como para acceso a base de datos, solo tienes que verificar:
Código php:
Ver originalif(count($_POST['seleccion']) < 1) // Al menos un checkbox debio ser marcado // Aqui finalizas el script, con die, exit, return o lo que prefieras
// Aqui continuas para realizar la consulta