Tach!
Gibt es vielleicht unerwartetes Verhalten mit true und false?
Die Frage ist eher, welche Werte wirklich verarbeitet werden. Allein aus dem Code kann man vielleicht irgendwo eine unlogische Konstellation finden, die immer true oder false ergibt. Wenn es allerdings abhängig von den verarbeiteten Werten ist, nützt der Code allein nicht viel.
Debugausgabe ins else $ok = true einbauen und schauen ob das Script dort ankommt.
Von oben nach unten durcharbeiten wäre mein Vorschlag. Mit var_dump(...) die Werte anschauen und die Ergebnisse der jeweiligen Ausdrücke. Und das sowohl bei Teil-Ausdrücken als auch bei der gesamten Bedingung für die ifs. Das ist die "Drecksarbeit", die ein Programmierer immer machen muss, bevor er drüber nachdenkt, was denn geändert werden muss. Ohne das Wissen, welcher Wert an welcher Stelle das Problem verusacht, ist in der Regel keine gescheite Antwort möglich. Es ist auch nicht besonders nett, einem Forum den Code reinzukippen und nur "da läuft was schief" zu sagen. Besser ist: "Ich hab an der und der Stelle den und den Wert und bekomme das Ergebnis X, erwarte aber Y. Der Ursprung der Werte ist dort und sie werden auf dem Weg bis zur Problemstelle hier und da verarbeitet." Diese Formulierung zu finden ist meist schon die halbe, oft aber auch die ganze Miete für die Fehlerfindung.
Wenn ich den Code so lese fällt mir die Diskussion ein, warum manche Programmierer Variablen umkopieren und ob man das tun sollte oder nicht.
Die umkopierte Variante wäre für mich die schönere und einfacher zu überschauende. Kürzer, weniger Sonderzeichen die man beim drüberlesen ausblenden muss. Viel einfacher zu schreiben, weniger Fehlermöglichkeiten...
Das sind Argumente dafür. Die meisten machen das aber ohne Nachzudenken und oftmals verwenden sie den umkopierten Wert einmal. Das ist dann nur noch Mehrarbeit.
Ganz verstanden habe ich noch nie, warum die Frage nach dem umkopieren immer wieder kommt. Beim einmaligen Zugriff ist es schon nachvollziehbar zu überlegen ob man sich das umkopieren antun will.
Hier frage ich mich, warum tut man es nicht?
Vermutlich wieder wegen zu wenig Nachdenken. Eine sinnvolle Alternative statt einfachem Umkopieren wäre eine Aufteilung der Prüfung. Der erste Teil nimmt die Eingabewerte entgegen und erzeugt daraus ein Objekt oder Array. Dabei wird schon auf das Vorhandensein der Werte geprüft und ansonsten ein sinnvoller Default-Wert vergeben (beispielsweise Leerstring oder 0 oder null). Gemäß dem DRY-Prinzip (don't repeat yourself) macht man nicht für jeden Parameter händisch die ganze Prozedur sondern schreibt sich eine kleine Funktion dafür. Auch das Durchlaufen für alle Werte kann man auf ein Array mit den Namen und eine foreach-Schleife recht übersichtlich gestalten. Das entstandene Objekt/Array übergibt man dann der Funktion, die die fachliche Prüfung vornimmt.
Es ist nicht generell verkehrt, Werte von einer Form in eine andere umzukopieren. Es sollte nur mit Sinn und Verstand erfolgen.
dedlfix.