Probleme mit und / oder Verknüpfung

Sprint

Erfahrenes Mitglied
Hallo zusammen,

ich stehe hier vor einem Problem, bei dem ich nicht mehr durchsteige. Es geht darum, daß in einem Formular der Kunde angeben soll, wann geliefert werden soll. Er kann dazu entweder über Radio-Buttons eine von vier Vorgaben auswählen ODER ((die Kalenderwoche ODER den Monat) UND das Jahr) angeben.
Mein größeres Problem ist nun, daß die Abfrage immer falsch ist, egal welche Felder befüllt sind. Aber so schwierig ist das doch eigentlich nicht.
PHP:
if (!empty($lieferzeit) || (!empty($lieferjahr) && !(empty($liefermonat) && empty($lieferkw))))
	$dummy = 1;
else
	$fehler['lieferzeit'] = 1;
Mein zweites, kleineres Problem erledigt sich vielleicht mit der Lösung des ersten. Ich wollte zuerst die Abfrage aus nicht negierten Teilen zusammenbauen. Aber das hab ich überhaupt nicht hinbekommen.

Ich hoffe, jemand von euch hat da die richtige Idee.
Viele Grüße,
Sprint

Edit: Das erste Problem hat sich auf wundersame Weise gelöst. Fragt mich bitte nicht warum, es ist einfach so. Aber die zweite Frage besteht immer noch. Ich hätte einfach gerne den else Zweig weg.
 
Zuletzt bearbeitet:
Du solltest nicht alles gleichzeitig auswerten

PHP:
if( Lieferzeit wurde ausgewählt){
    //TODO: Lieferzeit auslesen
} elseif ((Jahr wurde ausgewählt) && (Kalenderwoche wurde angegeben)){
    //TODO: Lieferzeit über Kalenderwoche auswerten
} elseif((Jahr wurde ausgewählt) && (Monat wurde angegeben)){
    //TODO: Lieferzeit über den Monat auswerten
} else {
    //TODO: Fehlermeldung: Keine Auswahl
}
 
Stimmt, ist ne Ecke klarer, nur sind zu dem Zeitpunkt schon alle Auswertungen erledigt. Es geht da nur darum herauszufinden, ob irgendwelche Felder nicht gewählt oder ausgefüllt wurden. Ich müßte also bei allen deinenTODOs einen leeren Befehl einsetzen, da nur der else Zweig mit dem Setzen des Fehler-Flags was tut. Und das wollte ich einfach nur vermeiden. Aber so langsam befürchte ich, das das wohl nicht funktionieren wird. Wenn ich mich so an meinen Mathe Unterricht erinnere, waren ja auch da nicht alle Beweise umkehrbar.
 
Du kannst den ganzen True-Teil zusammenstzen und dann diesen mit ! umdrehen, nicht die einzelnen Teile
Code:
if( ! ([Lieferzeit] || ([Jahr] && [KW]) || ([Jahr] && [Monat])){
    //TODO: Fehler
}
 
Ja, so macht das Sinn. Ich hatte immer versucht, KW, Monat und Jahr in einem unterzubringen, aber so ist es viel klarer. Bei sowas frag ich mich immer, warum ich so kompliziert denke.
Danke für deine Hilfe.
 
Zurück