Fragen per Zufall aus Datenbank auswählen + auswerten

  • Hi,
    ich bin gerade dabei meinen IQ-Test zu programmieren. Dafür habe ich viele Fragen in einer Datenbank gespeichert. Ich möchte nun immer einen Teil der Fragen per Zufall aus der Datenbank auswählen und in meinen Test integrieren. Die simpelste Möglichkeit wäre wohl es so zu machen:

    SQL
    SELECT Frage
    FROM tabelle 
    ORDER BY RAND() 
    LIMIT 10;


    Das Problem ist, dass ich dann zwar die Fragen habe, ich sie aber einzeln in meine HTML-Maske schreiben muss:

    Ich habe in meiner Datenbank die Fragen mit nur einer Antwortoption logischerweise in einer anderen Tabelle gespeichert als die mit Multiple Choice.
    Problem Nummer1 ist, wie kriege ich jetzt die per Zufall ausgewählten Fragen samt Antwortoptionen in meine Maske?
    Problem Nummer 2 ist wie erkenne ich bei der Auswertung der Antworten welche Frage eigentlich gestellt wurde und was somit die richtige Antwort ist?

  • Problem 1 und 2:
    du gibst allen fragen eine einmalige ID
    diese wird zu den dazugehörigen antworten eingefügt in der Datenbank
    Damit hast du mal eine Verknüpfung zwischen den beiden.
    In dein forumlar gibst du dann noch ein hidden-input, das die Fragen-ID beinhaltet.

    Und diese kasst du dann in PHP abfragen und beide Tabellen wieder auslesen.

    Mit freundlichen Grüßen
    Dodo

    Something big is coming. And there will be pirates and ninjas and unicorns...

  • Zitat von Dodo

    du gibst allen fragen eine einmalige ID


    Das sollte man besser mysql überlassen und nicht selber machen. Die spalte id auf auto_increment setzen und gut ist.

  • jop so meine ich es ;)
    aber die ID muss er dann auch in die 2. Tabelle eintragen (mysql_insert_id)

    Something big is coming. And there will be pirates and ninjas and unicorns...

  • Also ich konkretisiere mal ein bisschen wie meine Datenbank aufgebaut ist. Der IQ-Test besteht aus mehreren Teilen (zahlenreihen,Textaufgaben, Wortanalogien...). Für jeden Teil habe ich eine eigene Tabelle erstellt. In den Tabellen ist in jeder Reihe enthalten, die ID, die Frage und die Antwort(en).Ich habe bei jeder Tabelle bei den IDs mit 1 angefangen.
    Nun mache ich das beispielsweise so:

    Wie bekomme ich es jetzt hin, die 5 ausgewählten Fragen samt Antwortoptionen in meinen Fragenteil zu kriegen. Dabei muss auch berücksichtigt werden, dass ich dia Anworten ja auch noch auswerten muss, d.h ich muss genau wissen wo welche Frage steht.
    Sorry wenn ich stresse, aber meine Programmierkentnisse sind äußerst beschränkt.

  • du kannste deine Formulardaten als array versenden.
    Google mal danach

    So kannst du zB. name="Frage[]" für schreiben.
    oder name="AW1[]"

    Und so gehören dann alle mit dem index 0 zusammen
    alle mit index 1
    etc...

    Something big is coming. And there will be pirates and ninjas and unicorns...

  • Zitat von Krendipont

    Sorry wenn ich stresse, aber meine Programmierkentnisse sind äußerst beschränkt.


    Und was spricht dagegen, diesen Zustand zu ändern? :x Einen IQ-Test programmieren wollen, aber an so Grundlagen schon scheitern, passt ja riesig.

  • Na ja, ich bin doch dabei diesen Zustand zu ändern. Unter Druck zu arbeiten hat noch niemandem geschadet.
    Deine Lösung funktioniert auch nicht. Ich möchte aus meiner Datenbank ja fünf per Zufall ausgewählte Fragen samt Antworten in meine HTML-Maske kriegen und diese dann auch auswerten.

  • Da werden fünf fragen per zufall aus der DB gelesen. Was natürlich noch fehlt, ist der rest des formulars und die auswertung der daten. Aber das kannst du ja erst mal alleine versuchen, alles vorkauen muss ja nicht sein.

    11. Variablen und Formulare
    http://www.php-faq.de/ch/ch-webvariablen.html

  • Also das Formular und die Auswertung sind kein Problem. Ich scheitere leider schon davor. Ich habe jetzt die fünf Fragen mit Antworten. Das Problem ist, dass ich sie nicht aufrufen kann. $F ist doch ein assoziatives Array in dem alle 5 Fragen gespeichert sind, oder? Wie rufe ich jetzt die 5 veschiedenen Fragen auf.
    Ich weiß es ist total simpel und blöd aber ich hab irgendwie ein Brett vorm Kopf.
    Wenn ihr mir das beantworten könnt seid ihr mich los(hoffentlich :roll: ).

  • Ok natürlich völliger Quatsch was ich geschrieben habe.
    Das PROBLEM ist: $row['F'] liefert mir lediglich eine von 5 Fragen. Wie kriege ich die anderen vier?

  • Foreach kann dir den Key des jeweiligen Inhalts zurückgeben

    Code
    foreach ( $array as $key => $wert ) {  
      [...]
    }


    @bandit600: Was ein sinnvoll ergänzender Beitrag :D


    [EDIT]
    Die Antwort auf deine ueberarbeitete Frage:

    Code
    while($row = mysql_fetch_array($query)) {
     [..]
    }


    $row beinhaltet dann die jeweilige Frage

  • Schau doch mal oben in meinen Quellcode. Da hab ich das ja schon(ich habe statt mysql_fetch_array , mysql_fetch_assoc verwendet. Problem: Ich habe in meiner DB in der Spalte F, 10 Fragen.5 davon werden per Zufall ausgesucht. $row['F'] liefert mir aber lediglich eine von den 5 Fragen. Ich brauche aber alle.

  • Du kannst entweder nacheinander laufen lassen (sprich bei jedem Durchlauf nur den jeweiligen HTML-Code ausgeben) oder jedesmal die row
    mit >> $array[] = $row; << in ein multidimensionales Array kleben, und später mit foreach rausziehen (was aber hier sinnlos ist ;) )

    [Illustration zu 1]

    Code
    [vorheriger code]
    echo 'MEIN TEST';
    $query = mysql_query('blablabla');
    while($row = mysql_fetch_array($query)) {
      'echo FRAGE x';
    }
    echo 'ENDE';
  • Könntest du das vielleicht ein bisschen erläutern? Irgendwie kapier ich nicht so ganz was das alles bedeuten soll.
    Hast du dir meinen Quellcode angeschaut?
    Ich habe in meiner query die 5 ausgewählten Fragen.Aber die stehen alle in der Spalte F. Wenn ich sie mir mit mysql_fetch_array hole, dann wird in $row nur die letzte Frage aus der query gespeichert. Ich brauche Zugriff auf alle 5 Fragen.
    Es ist das gleiche als hätte ich in miner DB eine Tabelle mit einer Spalte "Login". Dort sind 'Peter', 'Heinz' und 'klaus' gespeichert. Ich mache meine Query und will alle 3 Namen ausgeben. Wie geht das?

  • In jedem Durchlauf von mysql_fetch_array wird nur eine eigzige Spalte ausgelesen, du kannst also nur jeweils auf 1 Frage zugleich zugreifen.

    Wenn du einfach bei jedem Durchlauf nur den jeweiligen Code mit echo ausgibst hast du das Problem schon gelöst ;)

    Tipp IN der SelfPHP Doku oder der offiziellen PHP.net Doku sind die Befehle sehr gut dokumentiert - und du verstehst es vielleicht besser als mich :D

  • Jo vielne Dank, aber ich habe die von dir vorgeschlagene zweite Option ,it dem Array gewählt.Ich habe dadurch zwar einen Haufen Arrays, die ich aber alle mit dem Index ganz leicht abrufen und in meine HTML-Maske per echo setzen kann.Hier ein Beispiel: