Los campos los lleno yo, o sea primero verifica en la base de datos, y si no estan uno los coloca, si estan en la base de datos aparecen en los inputs o checkbox, aun no se si utilizar uno u otro, llevarian numeros, de momento he probado algo asi:
El formulario todos los campos los tiene como name="permisos[]" 
y el php que lo recibe tiene lo siguiente:   
 Código PHP:
    if(isset($_POST['permisos'])){
    foreach ($_POST['permisos'] as $val){
 $data[] = sqlValue($val,'text');
}
$imp  =  implode(",",$data);
echo $imp;
} 
    
  Solo es a modo de prueba, pero por ejemplo si lleno el formulario que puse en la imagen, con datos, me aparece 
'14','si','si','si','si','no','si','no','si','si',  'no','si','no' 
todo en una sola linea
y me olvidaba que no le puse permisos[] a zona1, zona2, zona3, etc. para saber el id de la zona.
Se supone que deberia ingresar una linea en el insert, luego la otra y luego la otra no?