Automatische Vorgabe samt Variablen?

Don Stefano

Erfahrenes Mitglied
Ich lerne derzeit zwecks der folgenden Problemstellung PHP. Ich verfüge bereits über mittelmäßige Kenntnisse in HTML, PASCAL und BASIC und habe mich nun einige Tage in die PHP-Grundlagen eingearbeitet (habe also noch sehr geringe Kenntnisse). Leider komme ich derzeit nicht weiter.


Hier meine Problemstellung:

Ich möchte einen Wissenstest programmieren. Die 30 Aufgaben dieses Tests bestehen aus 30 einzelnen jpg-Graphiken (je eine für jede Aufgabe) und jeweils 6 möglichen Antwortalternativen. Die Beantwortung dieser Alternativen ist immer gleich (es wird eine Auswahl aus A, B, C, D, E oder F getroffen). Was diese Alternativen bedeuten, ist in den jeweiligen 30 Graphiken zu sehen.

Nun könnte ich ja 30 Html Seiten programmieren. Jede Seite enthält eine Aufgabe und die Skala von A-E zum ankreuzen. Dabei könnten dann die Variablen z.B. bei Aufgabe 1 mit A1, B1, C1 ... bis Aufgabe 30 mit A30, B30, C30 ... benannt werden und jeweils den Wert 0 oder 1 annehmen.

Dann könnten jeweils beim senden des Formulars (mittels „Weiter“ Button für den Anwender) die nächste HTML Seite mit der nächsten Aufgabe geöffnet werden, und die 6 Variablenwerte an eine php Datei weitergegeben werden, die diese Werte sofort in eine Datei oder Datenbank schreibt.

So dass letzten Endes eben die Werte sämtlicher 6 Variablen für sämtliche 30 Aufgaben für sämtliche n-Teilnehmer in einer Datei / Datenbank landen, von wo sie später zur Weiterverarbeitung ausgelesen werden sollen.



Hier nun meine Fragen:

1) Wäre es bei der obigen (sehr unpraktischen Realisierung) möglich eine einzige php Datei zu programmieren, die jeweils die entsprechenden übertragenen 6 Variabelenwerte in die Datenbank schreibt ? (Ich gehe nicht davon aus, dass ich dann 30 php. Dateien bräuchte ?)

2) Es muss doch eine einfachere Lösung geben, als 30 html Seiten zu programmieren! Meine Vorstellung wäre ein Skript, welches jeweils die korrekte Aufgabe vorgibt. Also zuerst die erste Aufgabe, nach deren Beantwortung die zweite, dann die dritte usw. Aber ich habe derzeit keine Ahnung wie sich das praktisch realisieren lässt, bin aber sicher dass es irgendwie gehen muss die entsprechenden Graphiken anzuzeigen (mittels eines Zählers und einer Schleife?)

3) Aber damit nicht genug. Es muss doch auch möglich sein, dass man nur einmal das Formular mit den 6 Alternativen programmiert (dieses bleibt ja immer gleich, außer der Namen für die 6 Variablen). So dass dieses Formular dann immer wieder mit jeder der 30 Graphiken vorgegeben wird. Problem hierbei. Die Variablennamen müssten sich ja jedes Mal ändern (also bei der ersten Aufgabe A1, B1 ... heißen und bei der 15 Aufgabe A15, B15... heißen). Ich habe aber keine Ahnung wie ich mit Html und php automatisch bei jeder Aufgabe die Variablennamen ändern kann. (ähnliches Problem wie bei Frage1).

4) Außerdem muss für die gesamte Bearbeitung der 30 Aufgaben ein Zeitlimit existeiren, so dass ein Skript nach z.B. 20 Minuten abbricht und ein neue Seite lädt „Ihre Bearbeitungszeit ist nun um, danke für die Teilnahme“.

Ich vermute, so etwas lässt sich mit Sessions lösen und irgendeiner Zeitmessfunktion, die es hoffentlich gibt.



Ich hätte durchaus noch 2-3 weitere Fragen, will es aber hierbei nun erst einmal belassen. Ich danke allen von Herzen, die die Zeit und Lust finden, mir hierauf zu antworten. Ich wäre schon für ein paar Stichworte und Hinweise dankbar in welche Richtung ich denken / was ich lernen muss.
 
Mein erster Vorschlag wäre eine Aufteilung auf 4 PHP und eine TXT-Datei.
Die erste PHP-Datei enthält quasi nur einen Link (kann alsoa uch eine HTML-Seite sein), die einen Counter und Zeit startet.

Die 2. PHP-Datei wäre dann das eigentliche Quiz, in dem du den Counter als Variable für Bild und Antworten einfügst.
Bild wäre dann beispielsweise:
PHP:
echo "<img src=\"pfad/bild".$counter.".jpg\" />";
Bei den Namen der antworten genau so.
Wenn du auf weiter klickst wirst du zu ner PHP-Datei geleitet die die Antworten dann in die TXT einträgt, den counter im eins erhöht und dann wieder auf die 2. PHP-Datei weiterleitet.
Wenn dann der $counter einen Wert gleich 30 hat soll von der 3. PHP-Datei aus auf die Auswertung weitergeleitet werden.
Der Übersicht wegen würde ich das erstmal so auf mehrere Dateien verteilen, prinzipiell kann man das aber auch alles in einer zusammenfassen (mit ein wenig mehr Aufwand).
 
(1 und 2) Vielleicht hilft Dir das Tutorial Navigation über die URL "index.php?section=index" in leicht abgewandelter Form, um das Quiz mit einer PHP-Datei zu lösen. was dort als Parameter übergeben wird, könntest Du in einem hidden-field in Deinem Formular übergeben, als Zahl der Fragennummer.
(3) Mit dem Operator Punkt (.) kannst Du die Zeichenkette als Pfad zu Deinem Bild dann zusammensetzen.
(4) Auch die Startzeit könntest Du über ein hidden-field übergeben, was natürlich relativ unsicher ist.
Mit Sessions könntest Du sowohl die Startzeit überprüfen, als auch sicherstellen, dass der User mit seinem Backbutton Fragen nicht mehrfach beantwortet, indem Du Dir darin bereits gegebene Antworten merkst.

Gruß hpvw
 
test.php
PHP:
<?
session_start();
if (!isset($_SESSION['start_time'])) {
    $_SESSION['start_time'] = time();
} elseif ($_SESSION['start_time']+1200 <= time()) {
    die('zeit abgelaufen');
}

if (isset($_POST['id'])) {
    $id = $_POST['id'] + 1;
    $_SESSION['antworten'][$_POST['id']] = $_POST['antwort'];
    if ($_POST['id'] == 30) {
        header('Location: http://www.example.de/auswertung.php');
        exit;
    }
} else {
    $id = 1;
}

echo '<form method="post" action="'.$_SERVER['PHP_SELF'].'">';
echo '<input type="hidden" name="id" value="'.$id.'">';
echo '<img src="frage_'.$id.'.jpg">';
echo '<input type="radio" name="antwort" value="a">A<br>';
echo '<input type="radio" name="antwort" value="b">B<br>';
echo '<input type="radio" name="antwort" value="c">C<br>';
echo '<input type="radio" name="antwort" value="d">D<br>';
echo '<input type="radio" name="antwort" value="e">E<br>';
echo '<input type="radio" name="antwort" value="f">F<br>';
echo '<input type="submit">';
?>

in auswertung.php kannst du dann den Test auswerten. die Antworten sind in $_SESSION['antworten'][1] bis $_SESSION['antworten'][30] zu finden.
 
Zuerst einmal vielen Dank für die schnellen Hinweise! Jetzt weiß ich schon mal wieder in Richtung ich gehen und denken muss.

Da ich eben noch Anfänger bin, kann ich leider noch nicht alles nachvollziehen. Besonders den unkommentierten Code von Bob verstehe ich bislang nur grob in Ansätzen (trotzdem danke!).

Ich muss mir die Themen "Arrays" und "Sessions" erst noch in den nächsten beiden Tagen erarbeiten.

@ pnx
Danke für diese "einfache" Idee. Habe ich es richtig verstanden, dass es mit
PHP:
echo "<img src=\"pfad/bild".$counter.".jpg\" />";
möglich ist z.B. dann die Dateien "bild1.jpg", "bild2.jpg" usw. in Abhängigkeit des Zählers auszugeben ? Das war und ist mir neu.

Verstanden habe ich nur noch nicht, wie dass dann bei den Variablen funktionieren könnte, die automatisch weiternummeriert werden müssen. Ich hoffe aber dazu wird mir der Beitrag von Bob helfen, wenn ich mich in das Thema Arrays eingearbeitet habe.

Das empfohlene Tutorial von hpvw werde ich mir auch erst nachher noch einmal ansehen.

Danke!
Stefan
 

Neue Beiträge

Zurück