maddinyo: Datenbanktabelle als zweidimensionales Array ausgeben

Beitrag lesen

Hi Frank

Die beiden Vermutungen bei den Gegenfragen von dir waren beide richtig. Ich habe das Quiz jetzt einfach mal bei piranho online gestellt: http://maddin-yo.piranho.de/

Dort siehst du, was ich mir so vorstelle. Ich möchte das nun eben so machen, dass es über Datenbanken geregelt wird, damit Benutzer auch eigene Quizze einstellen können.(Dafür möchte ich später natürlich noch ein Menü einfügen, wo alle Quizze zu sehen sind und die Option, ein eigenez Quiz einzustellen) Da ich möchte, dass es beliebig viele Fragen sein können, die ein Benutzer reinstellt, dachte ich mir, das Schleifen dazu ziemlich optimal sind. Ich habe dann erst einmal ohne Datenbank ein Array erstellt, welches ich später aus einer Datenbank holen würde, und habe eine Funktion gemacht, die dieses zweidimensionale Array mit Hilfe von Schleifen so darstellt, wie ich es haben möchte:

$frage[0][0]   = "0Wie heißt Peter Fox' erstes Soloalbum?";
  $frage[0][1] = "1Stadtaffe@/@";
  $frage[0][2] = "1Next!";
  $frage[0][3] = "1Landaffe";
$frage[1][0]   = "0Wer komponierte die "Sinfonie mit dem Paukenschlag"?";
  $frage[1][1] = "1Joseph Haydn@/@";
  $frage[1][2] = "1Johann Sebastian Bach";
  $frage[1][3] = "1Wolfgang Amadeus Mozart";
$frage[2][0]   = "0Wann kam Madsens Album "Frieden im Krieg" heraus?";
  $frage[2][1] = "12008@/@";
  $frage[2][2] = "12007";
  $frage[2][3] = "12006";
$frage[3][0]   = "0Von welcher Band ist "Smells like teen spirit"?";
  $frage[3][1] = "1Nirvana@/@";
  $frage[3][2] = "1The Bloodhound Gang";
  $frage[3][3] = "1Linkin Park";
$frage[4][0]   = "0In welchem Takt wird Walzer gespielt?";
  $frage[4][1] = "13/4@/@";
  $frage[4][2] = "14/4";
  $frage[4][3] = "19/8";
$frage[5][0]   = "0In welchem Jahr fand zum ersten Mal das Woodstock-Festival statt?";
  $frage[5][1] = "11969@/@";
  $frage[5][2] = "11968";
  $frage[5][3] = "11967";
$frage[6][0]   = "0In welchem Land ist die Oper entstanden?";
  $frage[6][1] = "1Italien@/@";
  $frage[6][2] = "1Frankreich";
  $frage[6][3] = "1Deutschland";
$frage[7][0]   = "0Wieviele Studioalben nahmen die Beatles auf?";
  $frage[7][1] = "112@/@";
  $frage[7][2] = "111";
  $frage[7][3] = "113";
$frage[8][0]   = "0In welcher Casting-Band sang Robbie Williams?";
  $frage[8][1] = "1Take That@/@";
  $frage[8][2] = "1N'Sync";
  $frage[8][3] = "1US5";
$frage[9][0]   = "0Wieviele Halbstonschritte enthält eine Oktave?";
  $frage[9][1] = "112@/@";
  $frage[9][2] = "18";
  $frage[9][3] = "116";
/* Nullen und Einsen für späteres sort(); @/@ für die richtige Antwort */

function showquiz($frage) {
  echo "<form method="post" action="auswertung.php" ><ol>";
  for($i = 0; $i < count($frage); $i++){
    sort($frage[$i]);
    echo "<li><select name="$i" ><option value="none">--Bitte ausw&auml;hlen--</option>";
    foreach($frage[$i] as $key => $value) {
      if($key == 0){
        continue;
      }
      echo "<option value="";
      if(strpos($frage[$i][$key], "@/@") === false){
        echo "0";
      }
      else {
        echo "1";
      }
      echo "" >" .str_replace("@/@", "", substr($frage[$i][$key], 1, (strlen($frage[$i][$key]) - 1))). "</option>";
    }
    echo "</select>" .substr($frage[$i][0], 1, (strlen($frage[$i][0]) - 1)). "</li>";
  }
  echo "</ol>\r\n";
  echo "<span id="auswertung" ><input type="Submit" name="submit" value="Auswertung" ></span></form>";
}

showquiz($frage);

Das sort() habe ich eingeführt, damit die richtige Antwort nicht immer an erster Stelle steht. Dann musste ich allerdings noch sicherstellen, das die Frage dennoch an richtiger Stelle steht, wofür ich die Nullen und Einsen an den Anfang stellte. Die Zeichenkette @/@, die ich so gewählt habe, weil sie vergelichsweise kurz ist und sie wahrscheinlich kein Benutzer in einer Antwortmöglichkeit so darstellen möchte, markiert, wie schon kommentiert, die richtige Antwort, die ich später für die Auswertung brauche, denn so konnte ich mit der if-abfrage (if(strpos($frage[$i][$key], "@/@") === false){echo "0";}else {echo "1";}) einen value für die option definieren.

Der nächste Schritt sollte dann sein, das Ganze in eine Datenbanktabelle zu packen, aus der ich dann sozusagen dass Array auslese. Als ersten brauchte ich zusätzlich eine Identifikationsspalte, in der jede Frage eine Zahl zugewiesen bekommt. Ansonsten gestaltete ich die Datenbanktabelle so, wie es aus dem Array her logisch schien. Nun kam ich an dem Punkt nicht weiter, das Array nach fragenr geordnet zu erstellen. Ich habe allerdings einen sehr großen Zeitaufwand (vielleicht etwa 6 bis 7 Stunden) gebraucht (die Auswertung habe ich ja auch schon erstellt), da ich in Sachen PHP noch sehr unerfahren bin (ich habe vor etwa einem Monat angefangen), sodass ich ungern meine bisherige Struktur über den Haufen werfen würde.

Ich hoffe, ihr versteht nun meine Denkensweise mit dem Array und der Datenbankstruktur und könnt mir, da ihr nun genauer wisst, was ich vorhabe, auch genauere Tipps geben.

mfg

Maddinyo