SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

TYPO3 Kochbuch

TYPO3 Kochbuch zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP für Fortgeschrittene und Experten

PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 13.05.2003, 16:44:28
Seoman Seoman ist offline
Anfänger
 
Registriert seit: May 2003
Beiträge: 10
Quiz Programmieren mit PHP

Wie kann man den so ein Quiz wie hier http://www.barrowdowns.com/QuizD2.asp?Size=

mit php Programmieren, ich hab das mit If befehlen versucht, hab es aber nicht hingekriegt.
Mit Zitat antworten
  #2  
Alt 13.05.2003, 16:54:30
OvenFreshBread OvenFreshBread ist offline
Anfänger
 
Registriert seit: Apr 2003
Beiträge: 50
Du brauchst eigentlich nur 2 seiten
Eine Seite mit den Fragen, das geht ja ganz einfach die den Radiobuttons, für jede frage nen namen wie frage1, oder so und dann jeder button nen wert 1, 2, 3, 4

und auf der nächsten Seite, der die variablen übergeben werden überprüfst du, ob die antworten richtig sind. Das geht ja mit der IF-abfrage

zb:
Frage 1:
Was ist rot?
1)nen auto
2)nen baum
3) ne farbe
4) nen grüner Apfel

if(antwort1=='3')
$richtig_antworten_zaehler++;

usw.
Mit Zitat antworten
  #3  
Alt 13.05.2003, 17:21:10
sourcecode sourcecode ist offline
Junior Member
 
Registriert seit: May 2003
Beiträge: 287
Es ist komplizierter. Zum Beispiel willst du doch sicher, dass die richtige Möglichkeit nicht immer variante A ist...da musst du noch mit Zufall arbeiten...bin gerade dabei, was auszuarbeiten (weil ich das irgendwie interessant finde)...könnte aber länger dauern...
Mit Zitat antworten
  #4  
Alt 13.05.2003, 18:21:47
Seoman Seoman ist offline
Anfänger
 
Registriert seit: May 2003
Beiträge: 10
ja es soll nicht immer antwort 1 die Richtige sein, sonst ist das ziemlich leicht zu beantworten.

man könnte doch eine if schleife einbauen oder für jede Frage eine eigene If schleife ...

bin mal gespannt was du so machst.
Mit Zitat antworten
  #5  
Alt 13.05.2003, 18:38:10
MiH MiH ist offline
Member
 
Registriert seit: Aug 2002
Beiträge: 775
das script ist etwas unglücklich, denn ein blick in den source zeigt dir die richtige antwort - wunderbar.

sowas zu programmieren ist einfach. du musst einfach nur dem formular ellement die einen namen geben und diesen dann vergleichen. ich habs mal mit einer db gemacht, da auch noch die userdaten gespeichetr werden sollten + gewinner 90 tage gespeichert werden.

so habe ich der frage ne id gegeben + die richtige antwort dahinter gehängt.
die tabelle sieht dann so aus:
Code:
quizid|frageid|antwort
danach kannst du mit mysql sehr schön selektieren. :)
Mit Zitat antworten
  #6  
Alt 13.05.2003, 19:24:36
sourcecode sourcecode ist offline
Junior Member
 
Registriert seit: May 2003
Beiträge: 287
Geht auch alles ohne MySQL, und stattdessen mit einfach zu handhabenden Text-Dateien
Geht auch alles ohne if-Abfrage und stattdessen mit Arrays

Die Fragen speicherst du in die Datei Fragen.txt, die Antworten speicherst du in die Datei Antworten.txt, und für die falschen Antwortmöglichkeiten speicherst du die erste falsche Antwort jeder Frage in die Datei Falsche_1.txt, die zweite in Falsche_2.txt und die dritte in Falsche_3.txt

Jede Frage bzw. Antwort(möglichkeit) mit genau einer Zeile. (Auch nach letzter Frage ein Zeilenumbruch)

Dann kannst mit dem Befehl file() die Dateien in Arrays einlesen,
als Argument zu übergeben ist der Dateiname.

also:

$Fragen = file("Fragen.txt");
$Antworten = file("Antworten.txt");
$Falsche_1 = file("Falsch_1.txt");
$Falsche_2 = file("Falsch_2.txt");
$Falsche_3 = file("Falsch_3.txt");


Du legst in der Variable $Fragenanzahl die Anzahl an Fragen fest, die angezeigt werden soll. Sollen alle vorhandenen Fragen angezeigt werden, so notierst du:

$Fragenanzahl = count($Fragen);

(Foreach, womit du Arrays durchlaufen kannst, kannst du in diesem Fall nicht verwenden, da du auch mit dem numerischen Index auf die anderen Arrays zugreifen musst, es sei denn, du verwendest ein multidimensionales Array)

Nun werden über eine for-Schleife die Fragen mit den Antwortmöglichkeiten dargestellt.

Nun soll natürlich nicht immer unbedingt Antwort A die richtige sein, deshalb solltest du das ganze dann noch mit einer Zufallsfunktion kombinieren. Von der aktuellen Frage werden die Frage und Antwortmöglichkeiten in ein temporäres Array gepackt. Aus diesem Array wird zufällig ein Wert gezogen. Dieser darf jedoch dann nicht nochmal gezogen werden und wird deshalb mit dem Befehl unset aus dem Array gefiltert, anschließend wird das Array mit dem Befehl array_values gepackt (damit im numerischen Index keine Lücken sind).

Außerdem das ganze noch mit HTML umschmücken.
Hier ist dann das komplette Skript, welches die Frage nennt und die Antwortmöglichkeiten in zufälliger Reihenfolge auflistet.
Speicher das Skript als Quiz.php, wenn du die Auswertung auf der gleichen Seite haben willst.

<?
// Skript legt die Dateien Fragen.txt, Antworten.txt, Falsche_1.txt, Falsche_2.txt und Falsche_3.txt in ein Array
// Es wird zuerst die Frage ausgegeben, und dann in zufälliger Reihenfolge die 4 Antwortmöglichkeiten inklusive der richtigen Antwort
// Skript ist auf genau 4 Antwortmöglichkeiten festgesetzt, bei dynamischer Anzahl der Antwortmöglichkeiten müsste es anders aufgebaut sein
$Fragen = file("Fragen.txt");
$Antworten = file("Antworten.txt");
$Falsche_1 = file("Falsche_1.txt");
$Falsche_2 = file("Falsche_2.txt");
$Falsche_3 = file("Falsche_3.txt");
$Fragen = str_replace("rn","",$Fragen);
$Antworten = str_replace("rn","",$Antworten);
$Falsche_1 = str_replace("rn","",$Falsche_1);
$Falsche_2 = str_replace("rn","",$Falsche_2);
$Falsche_3 = str_replace("rn","",$Falsche_3);
$Fragenanzahl = count($Fragen);
echo "<html><head><title>Quiz mit vorgegebenen Antwortmöglichkeiten</title></head><body>n";
echo "<form name="Formular" action="Quiz.php" method=post target=_self>n";
for ($Nummer = 0; $Nummer < $Fragenanzahl; $Nummer += 0) {
$Frage = $Fragen[$Nummer];
$Antwort = $Antworten[$Nummer];
$Falsch_1 = $Falsche_1[$Nummer];
$Falsch_2 = $Falsche_2[$Nummer];
$Falsch_3 = $Falsche_3[$Nummer];

$Möglichkeiten = array($Antwort,$Falsch_1,$Falsch_2,$Falsch_3);
srand((double)microtime() * 1000000);
$Zufall = rand(0,3);
$Antwort_A = $Möglichkeiten[$Zufall];
$Antwort_A = htmlentities($Antwort_A);

unset($Möglichkeiten[$Zufall]);
$Möglichkeiten = array_values($Möglichkeiten);
srand((double)microtime() * 1000000);
$Zufall = rand(0,2);
$Antwort_B = $Möglichkeiten[$Zufall];
$Antwort_B = htmlentities($Antwort_B);

unset($Möglichkeiten[$Zufall]);
$Möglichkeiten = array_values($Möglichkeiten);
srand((double)microtime() * 1000000);
$Zufall = rand(0,1);
$Antwort_C = $Möglichkeiten[$Zufall];
$Antwort_C = htmlentities($Antwort_C);

unset($Möglichkeiten[$Zufall]);
$Möglichkeiten = array_values($Möglichkeiten);
$Antwort_D = $Möglichkeiten[0];
$Antwort_D = htmlentities($Antwort_D);

$Nummer++;
echo "<p>Frage $Nummer von $Fragenanzahl: $Frage<br>n";
echo "<input type=radio name="Antwort_$Nummer" value="$Antwort_A">$Antwort_A<br>n";
echo "<input type=radio name="Antwort_$Nummer" value="$Antwort_B">$Antwort_B<br>n";
echo "<input type=radio name="Antwort_$Nummer" value="$Antwort_C">$Antwort_C<br>n";
echo "<input type=radio name="Antwort_$Nummer" value="$Antwort_D">$Antwort_D</p>n";
}

$Richtige_Fragen = 0;
$Nummern_der_richtigen_Fragen = array();
for ($Nummer = 1; $Nummer <= $Fragenanzahl; $Nummer++) {
$Richtig = $Antworten[($Nummer-1)];
$Antwort = $HTTP_POST_VARS["Antwort_$Nummer"];
if ($Antwort == $Richtig) {
$Richtige_Fragen++;
$Nummern_der_richtigen_Fragen[] = $Nummer;
}}
$Nummern_der_richtigen_Fragen = implode($Nummern_der_richtigen_Fragen,",");
echo "Du hast die Fragen $Nummern_der_richtigen_Fragen (insgesamt $Richtige_Fragen) richtig beantwortet !";
echo "<input type=submit value="Antworten auswerten"></form></body></html>";
?>


Kleine Anmerkung zu dem Skript:
Die Leerzeilen dazwischen dienen der Übersichtlichkeit. Sie trennen, wo das Array ein Element verliert.

Und am Ende des Skripts ist die Auswertung bereits enthalten:
Du prüfst mit einer Schleife, ob der vom User gepostete Wert für jede Frage mit dem entsprechenden Element im Antwort-Array identisch ist.

Geändert von sourcecode (14.05.2003 um 20:32:37 Uhr)
Mit Zitat antworten
  #7  
Alt 13.05.2003, 19:29:58
sourcecode sourcecode ist offline
Junior Member
 
Registriert seit: May 2003
Beiträge: 287
Achso, nun könntest du natürlich unterschiedlich schwere Fragen mit unterschiedlicher Punkteanzahl stellen, also brauchst du noch eine Datei Punkte.txt, wobei die Punkteanzahl jeder Frage wieder in einer einzelnen Zeile steht, dann kannst du das Auswertungsskript so erweitern:

$Richtige_Fragen = 0;
$Punkte = 0;
$Punkteliste = file("Punkte.txt");
$Punkteliste = str_replace("r","",$Punkteliste);
$Punkteliste = str_replace("n","",$Punkteliste);
for ($Nummer = 0; $Nummer < $Fragenanzahl; $Nummer++) {
$Richtig = $Antworten[$Nummer];
$Antwort = $HTTP_POST_VARS["Antwort_$Nummer"];
if ($Antwort == $Richtig) {
$Richtige_Fragen++;
$Punkte += $Punkteliste[$Nummer];
}}
echo "Du hast $Richtige_Fragen richtig beantwortet und somit $Punkte Punkte erzielt !";


Anmerkung: Ich verwende register_globals off in der php.ini
Deshalb sind die vom User übertragenen Antworten über das Array $HTTP_POST_VARS zu finden, entsprechend muss im Form-Tag dann natürlich method=post angegeben werden

Geändert von sourcecode (13.05.2003 um 19:57:20 Uhr)
Mit Zitat antworten
  #8  
Alt 14.05.2003, 08:46:55
Seoman Seoman ist offline
Anfänger
 
Registriert seit: May 2003
Beiträge: 10
Ihr seit aber fleißig, die Möglichkeiten werden ich mir mal genauer unter die Lupe nehmen und umsetzen.

Vielen Dank

mfg
Seoman
Mit Zitat antworten
  #9  
Alt 14.05.2003, 17:07:16
Seoman Seoman ist offline
Anfänger
 
Registriert seit: May 2003
Beiträge: 10
leider tauchen ein paar Fehler auf ...

zwischen den Fragen kommt immer das

Array enthält 4 Elemente.Array enthält 3 Elemente.Array enthält 2 Elemente.Array enthält 1 Elemente

und wenn ich aktualisiere, verschwinden manchmal ein paar Antwort möglichkeiten, also die richtige Antwort ist noch da nur ein oder zwei Falsche sind dann nicht mehr da.
Mit Zitat antworten
  #10  
Alt 14.05.2003, 17:46:00
sourcecode sourcecode ist offline
Junior Member
 
Registriert seit: May 2003
Beiträge: 287
Zitat:
leider tauchen ein paar Fehler auf ...

zwischen den Fragen kommt immer das

Array enthält 4 Elemente.Array enthält 3 Elemente.Array enthält 2 Elemente.Array enthält 1 Elemente
Ja, das hatte ich zur Kontrolle mit eingebaut, ob die Funktion unset ordentlich arbeitet, ich hatte es vorhin bereits wieder rausgenommen, und insgesammt den Beitrag nochmal überarbeitet. Also bitte nochmal anschauen, jetzt sollte es ordentlich funktionieren. Werd ihn vielleicht sogar nochmal verbessern - den Code zur Auswertung dazwischen packen.

Zitat:
und wenn ich aktualisiere, verschwinden manchmal ein paar Antwort möglichkeiten, also die richtige Antwort ist noch da nur ein oder zwei Falsche sind dann nicht mehr da.
Du hattest vermutlich noch die Version ohne die Zeile:

$Möglichkeiten = array_values($Möglichkeiten);

Deshalb fielen dort ein paar Antworten raus (weil es Lücken im Array gab. Habe nicht bedacht, das unset lediglich den Wert vom angegebenen numerischen Index löscht, ohne die anderen nachzurücken)

Geändert von sourcecode (14.05.2003 um 18:01:13 Uhr)
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 10:10:58 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt