Radios mit mehreren richtigen auswerten
Der Mann aus dem Süden
- php
Hallo, ok... ich erlebe gerade mein eigenes kleines GANZ PERSÖNLICHES Waterloo; - bin für jeglichen Input überaus DANKBAR!
Es geht im Großen und Ganzen um einen Multiple-Choice-Test, gegeben ist also ein Formular mit vier Radio Input Typen (alle mit name="antwort") als Antwortmöglichkeiten. Solange nur EINE Antwortmöglichkeit richtig ist, funktioniert die Auswertung auch mit value="true" für die richtige, bzw. value="false" für alle anderen Optionen problemlos [analog dazu die Auswertung.php: if ($_POST["antwort"] == "true") ... ].
Was mache ich aber wenn keine, 1, 2, 3 oder auch alle 4 Antwortmöglichkeiten richtig sein können?
Erschwerend kommt hinzu, dass die Fragestellungen zufällig via rand() ausgewählt und via INCLUDE geladen werden, daher kann die Auswertung.php gar nicht "wissen", welche und wie viele der Optionen der jeweiligen Fragestellung richtig waren. Es sollte also jede einzelne Fragestellung optimalerweise nur ein "Ich wurde richtig beantwortet" bzw. "Ich wurde falsch beantwortet" in Richtig der Auswertung.php schicken.
Wie löst der gewiefte PHP-Experte (also nicht ich) das?
Meine Hochachtung gilt den Problemlösern und auch den innen, MfG Euer Mann aus dem Süden.
Was mache ich aber wenn keine, 1, 2, 3 oder auch alle 4 Antwortmöglichkeiten richtig sein können?
Etwas wie
<input type="checkbox" name="gruppe1[0]"> Dies und/oder <br>
<input type="checkbox" name="gruppe1[1]"> das<br>
<br>
<input type="checkbox" name="gruppe2[0]"> Foo und/oder <br>
<input type="checkbox" name="gruppe2[1]"> Bar und/oder <br>
<input type="checkbox" name="gruppe2[2]"> Baz
versucht?
Jörg Reinholz
Was mache ich aber wenn keine, 1, 2, 3 oder auch alle 4 Antwortmöglichkeiten richtig sein können?
Etwas wie
<input type="checkbox" name="gruppe1[0]"> Dies und/oder <br>
> <input type="checkbox" name="gruppe1[1]"> das<br>
> <br>
> <input type="checkbox" name="gruppe2[0]"> Foo und/oder <br>
> <input type="checkbox" name="gruppe2[1]"> Bar und/oder <br>
> <input type="checkbox" name="gruppe2[2]"> Baz
>
versucht?
Jörg Reinholz
Hallo, nein, hab ich nicht. Wie würde analog dazu die Auswertung.php aussehen?
Gruß aus dem Süden
Was mache ich aber wenn keine, 1, 2, 3 oder auch alle 4 Antwortmöglichkeiten richtig sein können?
Etwas wie
<input type="checkbox" name="gruppe1[0]"> Dies und/oder <br>
> > <input type="checkbox" name="gruppe1[1]"> das<br>
> > <br>
> > <input type="checkbox" name="gruppe2[0]"> Foo und/oder <br>
> > <input type="checkbox" name="gruppe2[1]"> Bar und/oder <br>
> > <input type="checkbox" name="gruppe2[2]"> Baz
> >
Hallo, nein, hab ich nicht. Wie würde analog dazu die Auswertung.php aussehen?
Im einfachsten und universellsten Fall:
<?php echo "<pre>"; print_r($_REQUEST);
Jörg Reinholz
Was mache ich aber wenn keine, 1, 2, 3 oder auch alle 4 Antwortmöglichkeiten richtig sein können?
Etwas wie
<input type="checkbox" name="gruppe1[0]"> Dies und/oder <br>
> > <input type="checkbox" name="gruppe1[1]"> das<br>
> > <br>
> > <input type="checkbox" name="gruppe2[0]"> Foo und/oder <br>
> > <input type="checkbox" name="gruppe2[1]"> Bar und/oder <br>
> > <input type="checkbox" name="gruppe2[2]"> Baz
> >
Ach ja.
Und spiele auch mal mit:
<input type="checkbox" name="gruppe1[0]" value="dies"> Dies und/oder <br>
<input type="checkbox" name="gruppe1[1]" value="das"> das<br>
<br>
<input type="checkbox" name="gruppe2[0]" value="Foo"> Foo und/oder <br>
<input type="checkbox" name="gruppe2[1]" value="Bar"> Bar und/oder <br>
<input type="checkbox" name="gruppe2[2]" value="Baz"> Baz
oder
<input type="checkbox" name="gruppe1[dies]" value="dies"> Dies und/oder <br>
<input type="checkbox" name="gruppe1[das]" value="das"> das<br>
<br>
<input type="checkbox" name="gruppe2[Foo]"> Foo und/oder <br>
<input type="checkbox" name="gruppe2[Bar]"> Bar und/oder <br>
<input type="checkbox" name="gruppe2[Baz]"> Baz
Du sollst ja lernen ...
Auswertung auch hier jeweils:
<?php
echo "<pre>";
print_r($_REQUEST);
Jörg Reinholz
Nein, tut mir leid, das bringt mir nichts.
[Kurzes_Detail_am_Rande] Ich muss eingestehen, dass RADIOs wahrscheinlich nicht die richtige Wahl waren, da sich nur CHECKBOXes mit demselben Namen mehrfach auswählen lassen... [/Kurzes_Detail_am_Rande]
Was du mir hier offenbar sehr kryptisch durch die Nelke sagen willst, ist, dass ich doch ein Array anlegen soll. ...?
...Ok, hab ich versucht, dies sei im Weiteren näher erläutert:
Meine weiteren Überlegungen waren nun, dass jede Fragestellung, im Falle dass sie richtig beantwortet wurde, einen gewissen Wert sendet.
Beispiel dazu: Eine richtig beantwortete Fragestellung sendet immer den Wert 4. Wäre jetzt in einer aus 4 Multiple-Choice-Antworten bestehenden Fragestellung Antwort 2 und Antwort 4 korrekt, so senden 2 und 4 jeweils den Wert 2 (value="2"), 1 und 3 senden hingegen 0 (value="0"). Zugegeben, wären drei der vier Antworten korrekt, wäre das wieder problematisch, da dann jede korrekte Antwort den Wert 1,33333333333333 senden müsste...
Hab meine Checkboxes also alle brav mit name="Antwort[]" versehen und tatsächlich, die Werte der einzelnen Wahlmöglichkeiten werden im Array abgespeichert.
Habe dann versucht, die Werte in der Variable $a zu speichern und diese dann zu summieren um eben zu überprüfen, ob ich auf 4 komme:
for ($i=0;$i<=3;$i++) {
$a = $_POST["Antwort"][$i];
echo "sum(a) = " . array_sum($a);
}
Nun wird eine Warnung ausgegeben, Parameter 1 entspräche einem String und keinem Array.
?
Langer Rede, gar kein Sinn -
DIE EIGENTLICHE FRAGESTELLUNG LAUTET: Wie kreiere ich ein checkbox Formular, welches "erkennt", dass z.B. Optionen 1, 3 und 4 richtig sind, und nur in dem Falle, dass alle drei auch ausgewählt wurden, ein "Ich bin richtig" an eine Auswerte-PHP schickt?
Dank aus dem Süden!
DIE EIGENTLICHE FRAGESTELLUNG LAUTET: Wie kreiere ich ein checkbox Formular, welches "erkennt", dass z.B. Optionen 1, 3 und 4 richtig sind, und nur in dem Falle, dass alle drei auch ausgewählt wurden, ein "Ich bin richtig" an eine Auswerte-PHP schickt?
Die Antwort lautet:
Niemals.
Grund:
Der Gefragte kann in den Quelltext sehen und die als richtig gewerteten Antworten erkennen.
Wenn schon summieren, dann hilft ein genial einfaches System:
checkbox value 1 (2^0) checkbox value 2 (2^1) checkbox value 4 (2^2) checkbox value 8 (2^3)
[richtig bei summe=7] 4 passt - ok -> 7-4=3 2 passt - ok -> 3-2=1 1 passt - ok -> 1-1=0
Rest ist 9 - Alles ok.
Das kann man, wenn man will, browserseitig mit JS sehr schön machen.
Nun wird eine Warnung ausgegeben, Parameter 1 entspräche einem String und keinem Array.
Trivial: In Javascript ist, wenn Du Zahlen willst, der Punkt das Komma.
Jörg Reinholz
checkbox value 1 (2^0) checkbox value 2 (2^1) checkbox value 4 (2^2) checkbox value 8 (2^3)
[richtig bei summe=7] 4 passt - ok -> 7-4=3 2 passt - ok -> 3-2=1 1 passt - ok -> 1-1=0
Rest ist 9 - Alles ok.
war natürlich ein Typo.
Rest ist 0 - Alles ok.
Jörg Reinholz
Das kann man, wenn man will, browserseitig mit JS sehr schön machen.
Nein, will man nicht, sondern schon mit PHP.
Nun wird eine Warnung ausgegeben, Parameter 1 entspräche einem String und keinem Array. Trivial: In Javascript ist, wenn Du Zahlen willst, der Punkt das Komma.
[FRAGEZEICHEN] ? [/FRAGEZEICHEN]
Was ist falsch an
for ($i=0;$i<=3;$i++) {
$a = $_POST["Antwort"][$i];
echo "sum(a) = " . array_sum($a);
}
?
Grüße aus dem Süden.
>
> for ($i=0;$i<=3;$i++) {
> $a = $_POST["Antwort"][$i];
>
>
> echo "sum(a) = " . array_sum($a);
> }
>
Ach das. Wird wohl zeit für eine Pause bei Dir.
array_sum($a) möchte einen array. Du übergibst aber einen String. Wenn schon:
> #for ($i=0;$i<=3;$i++) {
> #$a = $_POST["Antwort"][$i];
> echo "sum(a) = " . array_sum($_POST["Antwort"]);
> #}
>
Jörg Reinholz
Ach das. Wird wohl zeit für eine Pause bei Dir.
array_sum($a) möchte einen array. Du übergibst aber einen String.
MEINE GÜTE!
Ja, ich melde mich ab.
Lieber Jörg, vielen Dank für dieses beinahe 4-stündige, möcht fast sagen ATEMBERAUBENDE Date.
Liebe Grüße aus dem Süden.