Zwei Bedingungen in einer PHP-if-Anweisung
-
14-11-2019 - |
Frage
Das ist wahrscheinlich so einfach wie es nur geht, aber ich bin neu in PHP und es ist nicht meine Stärke, also bitte haben Sie Geduld mit mir!Ich stecke fest!
Ich habe ein Formular mit einer Ja- oder Nein-Antwort als Optionsfeld eingerichtet.Wenn der Benutzer klickt yes
ihnen werden zwei weitere Optionsfelder angezeigt: a
und b
.Wenn sie geklickt hätten no
sie wären mit Optionsfeldern dargestellt worden c
und d
.
Übrigens habe ich etwas JavaScript, das das versteckt a
und b
DIV und die c
und d
DIV bis entweder yes
oder no
wird angeklickt, nur um Ordnung zu halten.Der no
DIV, enthaltend c
und d
verschwindet und wird durch die ersetzt yes
DIV wann yes
wird danach geklickt no
, und umgekehrt.Das funktioniert alles gut.
Mein Problem ist mit dem PHP.Es ist nicht wahrscheinlich, aber wenn der Benutzer trifft no
, trifft eine Wahl, sagen wir d
, dann beschließt, ihre Antwort zu ändern yes
, wählen a
, gibt das Skript immer noch zurück d
.Ich denke, das liegt daran d
ist immer noch ausgewählt und erscheint zuletzt im HTML-Fluss.
Ich möchte, dass mein Skript ignoriert c
und d
, auch wenn sie ausgewählt wurden, wenn yes
ausgewählt ist.Ähnlich würde ich gerne a
und b
ignoriert werden, wenn no
ausgewählt ist.
Ein HTML sieht ungefähr so aus:
<label for="yes_or_no">Yes or No?</label>
<input type="radio" name="yes_or_no" id="yes" value="yes" />
<label for="yes">Yes</label>
<input type="radio" name="yes_or_no" id="no" value="no" />
<label for="no">No</label>
<div id="yes">
<label for="a_or_b" id="a_or_b">A or B?</label>
<input type="radio" name="a_or_b" id="a" value="a" />
<label for="a">A</label>
<input type="radio" name="a_or_b" id="b" value="b" />
<label for="b">B</label>
</div>
<div id="no">
<label for="c_or_d" id="c_or_d">C or D?</label>
<input type="radio" name="c_or_d" id="c" value="c" />
<label for="c">C</label>
<input type="radio" name="c_or_d" id="d" value="d" />
<label for="d">D</label>
</div>
Mein PHP sieht so aus, aber es funktioniert nicht richtig:
$yes_or_no = $_REQUEST["yes_or_no"] ;
$a_or_b = $_REQUEST["a_or_b"] ;
$c_or_d = $_REQUEST["c_or_d"] ;
if ($yes_or_no="yes" && $a_or_b!="") $result="$a_or_b";
if ($yes_or_no="no" && $c_or_d!="") $result="$c_or_d";
$feedback = "$result";
Variabel $feedback
wird dann an mich gemailt.
Ich hoffe, das macht Sinn!Danke für deine Hilfe!
Martin.
Lösung
Verwenden ==
zum Testen der Gleichheit:
if ($yes_or_no == "yes" && $a_or_b != "") $result="$a_or_b";
if ($yes_or_no == "no" && $c_or_d != "") $result="$c_or_d";
Ich bin mir nicht sicher, ob das Ihr Problem vollständig lösen wird, aber vielleicht wird es Ihnen den Einstieg erleichtern.
Oh, und du kannst es tun $result = $a_or_b
statt $result="$a_or_b"
, aber das wird hier nichts beeinflussen.
Andere Tipps
Sie sind derzeit Einstellung variabel $yes_or_no
auf den Wert in der if
.Verwenden ==
statt =
.Das eine ist Zuordnung, das andere ist Vergleich.
if ($yes_or_no="yes" && $a_or_b!="") $result="$a_or_b";
Das Problem ist mit $yes_or_no = "yes"
.Das ist die Zuweisungsoperator, nicht die Vergleichsoperator.Es sagt "Set $yes_or_no
zu yes
, dann kehren Sie zurück true
" (das ist es nicht genau, aber es ist nah dran).Sie möchten einen Operator, der "return" sagt true
wenn $yes_or_no
ist gleich yes
".
Ersetzen =
mit ==
und dein Code sollte funktionieren.
(Es gibt einen anderen Grund, warum Ihr Code hier kaputt ist.) -- =
hat niedriger Vorrang als &&
, während ==
hat höhere Priorität, aber das ist nicht das größte Problem.)
Sie können js verwenden, um jede Auswahl von a und b zu löschen, wenn nein ausgewählt ist und dasselbe gilt, wenn der Benutzer Ja auswählt.
Außerdem haben Sie einige Fehler in Ihrem PHP, die andere erwähnt haben.