Te estás complicando de mala manera y, además, me da que hace ya tiempo que ni si quiera piensas las cosas que haces, simplemente pruebas a ciegas en vez de pararte y analizar el problema. Nosotros podemos darte una idea y yo estoy seguro que me pongo y en un par de minutos te doy la solución, pero no te vale de nada, tienes que llegar tú a la solución y eso sólo lo vas a conseguir si prestas atención y, más importante, piensas.
Te doy la guía, lo que tienes que hacer es, una vez montado el if, ver los flujos que habrá para las diferentes ejecuciones. Copio de tu código y te guío:
Código PHP:
Ver originalif (isset($_POST['check11'])) { // check11=true
if (isset($_POST['check12'])) { // check11=true, check12=true
if (isset($_POST['check20'])) { // check11=true, check12=true, check20=true
if ($cond1 && $cond2 && $cond3) {
// check11=true, check12=true, check20=true, (cond1 && cond2 && cond3)=true. Del último sacamos que cond1=true, cond2=true, cond3=true
} else {
// check11=true, check12=true, check20=true, (cond1 && cond2 && cond3)=false. Del último sacamos que uno o varios cond (cond1, cond2, cond3) son falsos, al menos uno, pero pueden ser todos.
}
}
}
// a partir de aquí, si entra en algún elseif quiere decir que el primer if no se ha cumplido (no ha llegado a un final, luego a partir de aquí (check11 && check12 && check20)=false. Pero esta condición puede ser falsa para cualquier falso de check, como mínimo uno.
} elseif (isset($_POST['check11'])) { // check11=true
if ($cond1) {
// check11=true, cond1=true
} else {
// check11=true, cond1=false
}
// a partir de aquí, check11=false
} elseif (isset($_POST['check12'])) { // check12=true
if ($cond2) {
// check12=true, cond2=true
} else {
// check12=true, cond2=false
}
// a partir de aquí, check12=false
} elseif (isset($_POST['check20'])) { // check20=true
if ($cond3) {
// check20=true, cond3=true
} else {
// check20=true, cond3=false
}
// a partir de aquí, check20= false
} else {
// (check11 && check12 && check20)=false, check11=false, check12=false, check20= false
}
Y ahora te pones casos posibles:
Caso 1: check11=true, check12=true, check20=false, cond1=true, cond2=false, cond3=true
Código PHP:
Ver originalif (isset($_POST['check11'])) { // entra if (isset($_POST['check12'])) { // entra if (isset($_POST['check20'])) { // no entra, al no entrar se va al final del if if ($cond1 && $cond2 && $cond3) {
} else {
}
} // aquí viene del no entra y sigue
} // sigue
} elseif (isset($_POST['check11'])) { // entra if ($cond1) { // entra
// Hace lo que haya aquí
} else {
}
} elseif (isset($_POST['check12'])) { // entra if ($cond2) { // no entra y se va a else
} else {
// Hace lo que haya aquí
}
} elseif (isset($_POST['check20'])) { // no entra y sigue if ($cond3) {
} else {
}
} else { // no entra, porque entró en al menos uno de los otros
}
Eso es un ejemplo de flujo, pero puedes hacer mil. Ya con este te das cuenta de que tu if es desastroso, porque las condiciones de un if tienen que ser excluyentes, es decir, no puede entrar por dos, porque se te descontrola. Y el tuyo está muy descontrolado. Estoy seguro que incluso hay un caso en que entra por todos los ifs (menos el else, obviamente) cosa que es nefasta. Las condiciones de un if deben ser completas y excluyentes. Te pongo un ejemplo:
Código PHP:
Ver originalif ($num < 4) {
} else if ($num >= 4 && $num < 20) {
} else { // se sobreentiende que $num >= 20
}
Este caso es completo y excluyente, porque para cualquier valor de $num entra por un if y, además, sólo por uno.
Código PHP:
Ver originalif ($num < 1) {
} else if ($num >= 4 && $num < 20) {
} else { // se sobreentiende que $num >= 20
}
Este caso no es completo, pero si excluyente, es decir, nunca se entra por dos, pero qué pasa cuando $num está entre 1 y 4? No entra por ninguno, no es completo.
Código PHP:
Ver originalif ($num < 8) {
} else if ($num >= 4 && $num < 20) {
} else { // se sobreentiende que $num >= 20
}
Este caso es completo, pero no excluyente, es decir, siempre entra por alguno, pero qué pasas cuando $num está entre 4 y 8? Que cumple dos condiciones, debería entrar por dos ifs.
Código PHP:
Ver originalif ($num == 5) {
} else if ($num >= 4 && $num < 20) {
} else if ($num >= 20)
} // sin else
Este caso ni es completo ni excluyente. Porque para cualquier valor menor de 4 no entra por ningún if y, además, si $num es 5, cumple las condiciones de los dos primeros.
En serio, replantéate el problema tranquilamente, diferencia las condiciones unas de otras claramente y monta un buen if, te juro es lo más sencillo del mundo. Espero que la explicación te sirva de algo.
Un saludo.
PD: Por el amor de dios, deja de citar textos enteros, porque cada vez que cargo este post mi ordenador echa humo. Simplemente contesta, no hace falta que cites nuestros posts.