Quiz mit Javascript erstellt - bitte um Code-Beurteilung

  • Mit JSON hatte ich schon zu tun, darunter kann ich mir etwas vorstellen. Aber: Wenn ich eine JSON-Datei erzeuge, liegt dann nicht wieder eine Quelle vor, aus der ein User die Antworten entnehmen könnte? Und das bringt mich zu der generellen Frage:


    Muss ich die Daten aus der Datenbank erst komplett in meine PHP-Datei bzw. eine JSON-Datei einlesen, bevor mein Javascript darauf zugreifen kann? Ich merke, dass hier eine gewaltige Wissenslücke besteht.


    ---


    Ansonsten bin ich aus Zeitgründen noch nicht weitergekommen. Heute hätte ich etwas Zeit und habe mir deshalb dieses Beispiel vorgenommen:

    https://www.w3schools.com/php/php_ajax_database.asp


    Um es besser zu verstehen, habe ich mir das Ganze lokal angelegt, also eine Datenbank und die beiden Dateien (HTML und PHP) angelegt. Rufe ich getuser.php auf, bekomme ich folgende Meldungen:


    "Notice: Undefined index: q in D:\home\tests\php\DB\getuser.php on line 27"


    Das ist diese Zeile:

    $q = intval($_GET['q']);


    Und:


    "Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, bool given in D:\home\tests\php\DB\getuser.php on line 46"


    Das ist diese Zeile:

    while ($row = mysqli_fetch_array($result)) {


    Google ich nach diesen Meldungen, finde ich genau mein Beispiel von w3schools.com mit der Aussage, dass diese Anleitung völliger Müll sei. Und natürlich funktioniert mein lokales Beispiel nicht.


    Also suche ich mal weiter ... irgendwo wird sich schon etwas finden, das funktioniert. ;)

    Dieser Beitrag wurde bereits 1 Mal editiert, zuletzt von Failix () aus folgendem Grund: falschen Links korrigiert

  • Zitat

    Wenn ich eine JSON-Datei erzeuge, liegt dann nicht wieder eine Quelle vor, aus der ein User die Antworten entnehmen könnte?

    ...

    Muss ich die Daten aus der Datenbank erst komplett in meine PHP-Datei bzw. eine JSON-Datei einlesen, bevor mein Javascript darauf zugreifen kann?

    In deinem Fall brauchst Du gar keine JSON-Datei sondern Du brauchst JSON nur, um die Daten aus dem PHP-Skript an den Client bzw. das Javascript im Browser zu übergeben. Also im PHP die Daten nach JSON kodieren und mit echo ausgeben. Dann im Javascript wieder dekodieren.

    Damit der Benutzer jetzt nicht wie zuvor die Antworten ablesen kann, musst Du so vorgehen, wie ich es früher beschrieben hatte: Im ersten Schritt nur die 1. Frage und die Antworten darauf vom Server holen. Hat der Benutzer sich dann für eine Antwort entschieden, dann erst die richtige Antwort vom Server holen.

  • Ja, ich verstehe, was zu tun ist, ich verstehe aber nicht, wie es getan wird. Mittlerweile habe ich mir mithilfe dieser Seite einen JSON-String erstellt. Aber das ist es ja nicht, was ich will ...


    Ich stochere absolut im Dunkeln. Mir ist völlig unklar, wie ich nur einen Teil der Daten und später einen weiteren Teil der Daten aus der Datenbank hole. Die Tutorials, die ich bisher gesehen habe, holen zunächst alle Daten und verwenden JavaScript danach, um einzelne Teile davon anzuzeigen.


    Kennt Ihr ein Tutorial, das eher auf mein Vorgehen zutrifft? Ich wüsste nicht einmal, mit welchen Begriffen ich googeln sollte ...

  • Nein, natürlich wird es dieses Tutorial nicht geben – aber vielleicht eins, das es mir ermöglicht, zumindest das Ende des Knäuels zu finden, um am Faden ziehen zu können.


    Zurzeit stochere ich planlos herum, weil ich keinerlei Ansatz habe. Und ich denke, meine Grundkenntnisse sind einfach zu gering, um hier wirklich weiterzukommen. Wäre auch nicht schlimm, nichts drängt mich. Nachdem ich mit JavaScript relativ gut vorangekommen bin, hoffte ich, es würde so weitergehen. Ist aber nicht so, das Ganze wird offenbar zu komplex für mich. Ist zwar nicht schön, das einsehen zu müssen, aber ist halt die Realität.


    Ich werde, sofern ich Zeit habe, weiter googeln, vielleicht will der Zufall, dass ich etwas finde.

  • Ganz herzlichen Dank! Der Einstieg hat prima funktioniert, ich kann nun in meiner PHP-Datei gezielt Werte aus meiner Datenbank abfragen.


    Natürlich habe ich bei weitem noch nicht alles durchgelesen, geschweige denn verstanden. Und natürlich habe ich nach wie vor keine Ahnung, wie ich das Ganze für mein Quiz einsetze, aber das macht nichts – irgendwann wird sich auch das ergeben, nehme ich doch an. :)


    In diesem Zusammenhang hätte ich doch noch mal eine Frage zu meiner Tabellenstruktur:


    musicquiz-db.png


    Ist es sinnvoll, die Struktur so anzulegen? Irgendwas sagt mir, dass es nicht gut ist, aber das ist nur so ein Bauchgefühl. Ich würde mich über Eure Meinung dazu freuen, vielen Dank!

  • Danke, das klingt einleuchtend. Ich denke, ich werde dieser einen Spalte "isCorrect" dann immer die Spaltennamen der jeweils korrekten Antwort mitgeben, also sowas wie "answer4".


    Mittlerweile bin ich so weit, dass ich Fragen und mögliche Antworten selektiert per Javascript in einer HTML-Datei anzeigen kann. Ich forsche weiter ... ;)

  • Ist es sinnvoll, die Struktur so anzulegen?

    Nein. Nummerierte Spalten sind idR ein deutlicher Hinweis darauf dass das Datenbankdesign defekt ist. So auch hier: die Antworten gehören in eine extra Tabelle in der dann noch die ID der Frage steht (ggf. eine Spalte mit einem Sortier-Wert wenn die Reihenfolge der Antwortmöglichkeiten festgelegt werden soll). Wo du speicherst welche Antwort richtig ist, hängt etwas davon ab ob es (zukünftig) möglich sein soll dass auch mehr als eine Antwort richtig ist: wenn nur eine richtig ist kannst du sie in der Fragen-Tabelle speichern, sonst in der Antworttabelle.

    Und: Datenbankdesign immer als SQL-Querys (CREATE TABLE für das Design und INSERT für die Daten) posten, nie als Bild - hat auch den Vorteil dass man evtl. falsche Spaltentypen gleich mit erkennt.

  • Besten Dank für Eure Hinweise. Auch wenn meine Vorstellungen noch diffus sind, stelle ich doch fest, dass sich langsam ein Bild abzeichnet.


    Wenn nummerierte Spalten nicht optimal sind, wie soll man die Spalten mit den vier Fragen dann bezeichnen? Oder trifft die Aussage nur auf die vier "isCorrect"-Spalten zu (von denen ich ahnte, dass sie unsinnig sind)?

  • Wenn nummerierte Spalten nicht optimal sind, wie soll man die Spalten mit den vier Fragen dann bezeichnen?

    Die Spalte, Singular. in der Antworten-Tabelle gibt es zu jeder Frage vier (bzw. so viele wie es Antwortmöglichkeiten gibt eben) Datensätze wie die Spalte mit den Antworten jetzt genau heißt sei dir überlassen (frag 3 Leute und du bekommst 5 Antworten). Beschäftige dich mit der Normalisierung von Datenbanken, im Beispiel zur zweiten Normalform im Artikel bei Wikipedia sind die CDs quasi deine Fragen und die Lieder die Antworten.

  • So what - inwiefern enthält die Struktur von Failix Redundanzen?

    Die Struktur verletzt die erste Normalform. Ja, aktuell mag es so sein dass es immer vier Antwortmöglichkeiten gibt, trotzdem ist es sinnvoll die Datenbank gleich richtig aufzubauen - auch so Dinge wie eine Suche in den Antworten oder das Auflisten der Fragen samt richtiger Antworten werden dadurch (überhaupt bzw. ohne Verrenkungen) möglich.