Beiträge von Failix

    Ich glaube, ich habe jetzt das Grundprinzip des Callbacks verstanden. Aber es bleiben Fragen offen ...



    Bei diesem Code liefert mir die Funktion counter beide Werte, den von i und den von j. Das liegt vermutlich daran, dass beide mit dem Parameter callback übergeben werden. Ob ich in der Funktion getCounter von der Konsole i oder j ausgeben lasse, ist auch egal.


    Also habe ich so etwas versucht:



    Das liefert die Fehlermeldung "Uncaught TypeError: newCallback is not a function at counter ...".


    Wie müsste ich denn vorgehen, wenn die die Werte aus counter getrennt oder wahlweise übergeben möchte?

    Sprachlich ist JavaScript eine echte Herausforderung für mich – gemeint ist damit, dass ich das, was ich als Code sehe, oft nur schwer in Worte fassen kann.


    Ich schrieb es an anderer Stelle schon mal: Wenn ich den Code, den ich lese, nicht mit eigenen Worten beschreiben kann, dann habe ich ihn nicht verstanden, und wenn ich ihn nicht verstanden habe, gibt es Lernbedarf.


    Mir ist es soeben gelungen, den Code für mein Musik-Quiz anzupassen, und er funktioniert! Danke noch einmal, Sempervivum – für Deine Geduld und Deine Unterstützung!


    Ich werde jetzt mal schauen, ob ich bei YouTube ein Video zum Thema finde, denn ein wenig verfestigen sollte ich das heute Gelernte durchaus, und da wäre eine Kombination aus Bild und Ton sicher das hilfreichste.

    Das habe ich jetzt verstanden, d. h. ich glaube es zu verstehen:



    Ist das so halbwegs richtig ausgedrückt?


    Und danke natürlich! :)

    Ich kapiere gerade nichts, das nervt mich total. Vielleicht versuchen wir es mal ganz primitiv:



    Was muss man tun, damit die Konsole die ids ausgibt? Ich habe das gesamte Prinzip vorn und hinten nicht verstanden. :(

    Herzlichen Dank, das muss ich mir ganz in Ruhe ansehen und sicherlich den Code erst mal komplett auseinandernehmen, damit ich es verstehe. Auf den ersten Blick gibt's keine Erleuchtung bei mir. ;)


    Zu Deiner Frage im Kommentar: Die Anzahl der Fragen ist gleich der Anzahl der IDs, deswegen hatte ich es so benannt. Oder lauert da eine Fehlerquelle, die ich noch nicht sehe?

    Wie immer vielen Dank für Deine schnelle Rückmeldung, Sempervivum ! Ich habe zunächst countIds in eine Funktion countRows() gepackt, sie beginnt auf Zeile 30 und endet auf Zeile 118, umgibt also alles andere in der Funktion questionsAndAnswers().



    Zum Callback (unbekanntes Land bisher für mich) habe ich gegoogelt und unter anderem dieses Beispiel gefunden:


    Code
    1. function doSomething(callback) {
    2. /* ... */
    3. callback();
    4. /* ... */
    5. }
    6. function doSomethingElse() {
    7. console.log('Callback aufgerufen');
    8. }
    9. doSomething(doSomethingElse); // Ausgabe: "Callback aufgerufen"


    Das kann ich zwar nachvollziehen, verstehe den Sinn aber nicht. Demzufolge gelingt es mir auch nicht, das Beispiel für meinen Code zu abstrahieren. Für weitere Erläuterungen wäre ich sehr, sehr dankbar.

    Ich habe immer noch bzw. immer wieder Probleme mit der richtigen Verschachtelung. Hier mein aktueller Code:



    Schauen wir auf Zeile 4 und 8: Die Funktion questionsAndAnswers() startet mit dem Objekt countIds, alle weiteren Elemente der Funktion sind darin verschachtelt. Das Objekt countIds erzeugt den String ids, welcher mir die Anzahl der Reihen in der DB liefert. Diese Zahl brauche ich, um das Ende des Spiels ermitteln zu können, und deshalb ist countIds auch das äußerste Objekt der Funktion. Es funktioniert tadellos.


    Nun würde ich den String ids aber auch gern außerhalb der Funktion questionsAndAnswers() verwenden, um diese Zahl in einem Prolog zum Spiel anzuzeigen, also bevor questionsAndAnswers() ausgeführt wird. Ist das irgendwie möglich?


    Die meiner Meinung nach unschöne Lösung wäre, das Objekt countIds außerhalb der Funktion zu duplizieren. Das würde funktionieren, aber ist es denn ein sauberer Weg? Irgendwas lässt mich daran zweifeln ...


    Die Frage ist also: Kann ich den String ids irgendwie außerhalb der Funktion questionsAndAnswers() anwenden, ohne das Objekt countIds zu duplizieren?

    Ob eine der unzähligen Erweiterungen für VSC Dir das Einfügen von Links erleichtert, kann ich nicht sagen, ich hatte nie Bedarf daran. Was auf alle Fälle funktioniert, sind die Verwendung von PHP und eine Live-Ansicht der gerade bearbeiteten Seite.


    Um mir immer gleiche Arbeitsschritte zu erleichtern, benutze ich gern Makros, diese allerdings in Notepad++. Hier werden die Makros als XML abgelegt und können jederzeit angepasst werden. Das wäre eventuell auch interessant für Dich.

    Uwe Graf Koks Wäre jetzt nicht der richtige Zeitpunkt, Dich von WYSIWYG zu verabschieden und Dir eine richtig gute, aber dauerhaft kostenlose Software zur Code-Bearbeitung zuzulegen? Dann bist Du a) alle Probleme mit irgendwelchen veralteten oder überteuerten Programmen los und hast b) eine steigende Lernkurve, was Dir in jedem Fall zugutekommen wird.


    Ein Programm wie Visual Studio Code beispielsweise (ja, eine Open-Source-Software von Microsoft!) unterstützt Dich massiv beim Schreiben des Codes und nervt Dich nicht mit unverständlichen Fehlermeldungen. Etliche Erweiterungen stehen zur Verfügung und erleichtern das Codeschreiben zusätzlich. Aber VSC ist nur eine Möglichkeit von vielen ...

    Endlich hatte ich mal wieder etwas Zeit ...


    Wie ich in #99 schrieb, störte mich die Redundanz in der Datenbank. Ich hatte ja die richtige Antwort als Kopie einer der Fragen in der Spalte trueanswer hinterlegt. Heute war es mein Ziel, eine Spalte truenumber anzulegen, diese mit der Ziffer der richtigen Antwort zu befüllen und dann mit PHP und Javascript diese Spalte auszuwerten.


    Und es ist mir gelungen. Das PHP anzupassen, war nicht sonderlich schwer, aber fürs JavaScript "musste" ich erst was lernen, und zwar getAttribute, damit ich statt des Inhalts der Antwort die ID des Antwortbuttons auslesen konnte. Das hat wunderbar geklappt, ich bin ein klein wenig stolz auf mich, dass ich mal was ganz ohne Fragen hinbekommen habe. ;)


    Hier ist das Ergebnis: http://music-quiz.bplaced.net/index1.html

    Es ist geschafft, das gesamte Konstrukt funktioniert jetzt endlich. Und Dir, Sempervivum , wiederum ganz herzlichen Dank! Ich hätte das ohne Dich nicht hinbekommen – vor allem bei PHP sind meine Kenntnisse noch völlig unzureichend.


    Die Vorgehensweise mit dem Debugger, die Du oben zeigst, habe ich gerade nachvollzogen, und nein – selbst wenn ich auf die Idee gekommen wäre, ihn zu benutzen, wäre mir das große "A" nicht aufgefallen. Einen direkten Hinweis, dass es falsch ist, liefert der Debugger ja auch nicht, es muss einem schon wirklich ins Auge stechen.


    Was mich freut: Der Umgang mit MySQL war viel einfacher, als ich zunächst befürchtet hatte. Datenbanken waren bis vor kurzem für mich die großen, geheimnisvollen Unbekannten, jetzt wirken sie schon fast etwas vertraut. Wichtig ist es für mich nun, PHP so weit zu verstehen, dass ich MySQL auch optimal nutzen kann.


    Ich werde deshalb sicher wieder mit Fragen ankommen, aber nicht hier im JavaScript-Bereich, versteht sich. ;)


    Jetzt wünsche ich erst mal allerseits einen guten Start in die Woche, bleibt gesund!

    Sempervivum Wiederum herzlichen Dank, wenngleich die beiden Links mir – zumindest mit meinem derzeitigen Wissensstand – überhaupt nicht weiterhelfen. Das, was ich gerade tue, ist nichts als hilfloses Stochern in einer für mich trüben Brühe, die nur dann aufklart, wenn mir jemand konkret sagt, was zu tun ist.


    Klar bin ich enttäuscht, dass das alles für mich so kompliziert ist. Anderseits muss ich aber auch bedenken, dass ich erst vor ziemlich genau drei Monaten damit angefangen habe, mich überhaupt mit Programmierung zu beschäftigen und dass ich dafür nur wenige Stunden in der Woche Zeit habe. Ich würde gern viel schneller viel mehr wissen, aber der Weg ist steinig und steil. :(


    Die genannte überflüssige Zeile zu löschen, hat mich zumindest von jener PHP-Warnung befreit. Nun bekomme ich auf PHP-Seite auch {"id": "1", "trueanswer": false} bzw. {"id": "1", "trueanswer": true} geliefert, je nach angeklickter Antwort. Das funktioniert also. Aber das JavaScript kann damit leider nichts anfangen.


    Die Online-Version ist aktuell: http://music-quiz.bplaced.net/


    m.scatello Ich hatte die öffnende Klammer und die Zeile mit den Zugangsdaten weggelassen, aber das ist natürlich blöd, wenn man eine Fehlermeldung mit Zeilenangabe postet ... sorry!

    Leider funktioniert der Code nicht wie gewünscht, hier die aktuelle Datei "animalgame3.php":



    Ich bekomme die Warnung "Trying to access array offset on value of type bool in /users/music-quiz/www/animalgame3.php on line 21". Dazu spuckt Google knapp 7 Millionen Treffer aus ... das, was ich zu lesen bekomme, ist für mich völlig unverständlich.


    Schalte ich die PHP-Warnungen aus, wird mir ausschließlich {"id": "1", "trueanswer": false} zurückgegeben – egal, welche Antwort ich anklicke.


    Das Ganze ist auch online zu sehen: http://music-quiz.bplaced.net/

    Ich bin jetzt dazu gekommen, mir den Code anzuschauen. Ich habe verstanden, dass neben der ID auch die gewählte Antwort an den Server geschickt wird.


    Ich habe versucht, die Datei "animalgame3.php" anzupassen, hier der bisherige Code:



    Mein Versuch sieht so aus:



    Das überträgt jetzt den Wert der gewählten Antwort, aber ob es der korrekte Ansatz ist, weiß ich nicht – dummerweise ersetzen gerade Vermutungen die Erkenntnis.


    Und dann wäre ja auch noch die Abfrage im JavaScript:


    if (questions.answers[j] == rightOne.trueanswer) {


    Mir ist völlig unklar, welche beiden Werte ich nun miteinander vergleichen müsste. Für Licht in meinem geistigen Dunkel wäre ich dankbar ...

    Als ich die Datenbank erstellt habe, kam mir bereits der Verdacht, dass es nicht gut ist, was ich da mache: Ich habe eine Spalte "trueanswer" angelegt und dort die jeweils richtige Antwort eingetragen. Schon allein die Redundanz war mir dabei nicht geheuer.


    Dein Vorschlag klingt gut, aber ich habe nicht die leiseste Vorstellung, wie ich ihn umsetzen könnte. Da sind zwei Dinge, die ich nicht weiß:


    1. Wie müsste die Datenbank strukturiert sein, wie wird der richtige Eintrag gekennzeichnet? Was ein Boolean ist, weiß ich aber. ;)


    2. Wie schicke ich etwas zum Server? Bisher habe ich ja immer nur etwas geholt, habe also per JavaScript PHP-Dateien angesprochen, die Daten geholt haben. Oder ist mit "schicken" dasselbe Vorgehen gemeint?