prueba a cambiar esto:
Código PHP:
SELECT dni, nombre, apellidos FROM personal WHERE (dni not in (SELECT dni FROM persofun)) or
(dni not in (SELECT dni FROM persofun WHERE codfuncion in (SELECT codfuncion FROM funciones WHERE nombre=$_POST['nombre']"))) ORDER BY dni
por esto
Código PHP:
$nombre=$_POST['nombre'];
SELECT dni, nombre, apellidos FROM personal WHERE (dni not in (SELECT dni FROM persofun)) or
(dni not in (SELECT dni FROM persofun WHERE codfuncion in (SELECT codfuncion FROM funciones WHERE nombre='$nombre'"))) ORDER BY dni
a veces se le va la olla.. no se si sera por eso.. peor puedes probarlo