Beiträge von Failix

    Hallo zusammen,


    ich versuche, aus den Datensätzen einer MySQL-Datenbank ein valides, multidimensionales JSON-Array zu erzeugen (hoffentlich habe ich das richtig formuliert).


    Das ist mein Code:



    Und das ist das Ergebnis: http://music-quiz.bplaced.net/test05/json.php


    Obwohl mir mein PHP-Code sehr fragwürdig vorkommt, ist das Ergebnis fast korrekt. Fast … denn das Komma hinter dem letzten Datensatz macht den JSON-Code invalide.


    Wie mache ich es richtig? Wie muss der PHP-Code aussehen, um ein valides JSON-Array zu erzeugen?


    Vielen Dank und Gruß

    Felix

    Sempervivum Vielen Dank für Deine Wünsche und Deinen Lösungsvorschlag!


    Ja, so ist es wirklich viel besser. Mit PHP und JSON habe ich (auch) noch so meine Schwierigkeiten. Sollte ich diesbezüglich weitere Fragen haben, mache ich dann aber wirklich einen Thread im entsprechenden Unterforum auf.


    Die dritte Version meines Quiz, bei der man die Auswertung der Fragen erst am Ende bekommt, ist auf dem Weg, dazu brauche ich halt andere Arrays als in der zweiten Version.


    Schönen Abend noch!

    Da wir in diesem Thread schon mehrfach über das Zusammenspiel von JavaScript und PHP geschrieben hatten, habe ich mir auch diesmal erlaubt, keinen neuen Thread in einem anderen Unterforum zu eröffnen, da ich annahm, dass es für alle Beteiligten so übersichtlicher bleibt, vielleicht auch für User, die später aus irgendeinem Grund per Suchmaschine in diesem Thread landen und alle Bestandteile an einer Stelle vorfinden.


    Ich habe mein Problem mittlerweile lösen können, Dein Hinweis auf implode brachte mich auf die Idee, das PHP viel einfacher zu halten, und zwar so:


    PHP
    $statement = $pdo->prepare("SELECT truenumber FROM questionsAnswers");
        $statement->execute(array());
        while ($row = $statement->fetch()) {
          echo $row['truenumber'];
        }


    Das JavaScript dazu sieht dann so aus:



    Ich musste die 15-stellige Zahl in 15 Zahlen innerhalb eines Arrays wandeln, was hiermit auch gelungen ist.


    Edit: Die Problematik bezieht sich natürlich immer noch auf mein Musik-Quiz, was der Hauptgrund war, sie hier zu stellen. Das war aber vermutlich nicht eindeutig ersichtlich.

    Ich wünsche allseits ein gesundes neues Jahr!


    Ganz besonders herzliche Wünsche gehen an Sempervivum – Du hast mir hier so aufopferungsvoll und freundlich geholfen, dass ich (ich sagte es zwar schon mehrfach, aber ich wiederhole es gern) Dir dafür sehr, sehr dankbar bin. Viel Glück und Gesundheit in 2022!


    Tja, und schon habe ich wieder eine Frage ...


    Ich möchte mir alle 15 Ziffern aus der Datenbank-Spalte truenumber holen. Dazu habe ich mich an folgendem PHP versucht:


    Code
    $statement = $pdo->prepare("SELECT truenumber FROM questionsAnswers");
        $statement->execute(array());
        while ($row = $statement->fetch()) {
          $numbers = [
            $row['truenumber'],
          ];
          echo json_encode($numbers) . ',';
        }


    Das Ergebnis ist: ["4"],["4"],["3"],["1"],["2"],["3"],["1"],["4"],["1"],["3"],["1"],["2"],["2"],["3"],["4"],


    Ich bekomme also nicht ein Array mit allen Zahlen, wie ich es eigentlich gern hätte, sondern 15 Arrays mit je einer Zahl, was natürlich keinen Sinn ergibt.


    Ich habe Etliches versucht, um die Ausgabe zu ändern, aber es ist mir nichts Brauchbares gelungen. Deswegen die Frage: Wie muss der PHP-Code aussehen, damit ich folgendes Ergebnis bekomme: [4, 4, 3, 1, 2, 3, 1, 4, 1, 3, 1, 2, 2, 3, 4]?


    Herzlichen Dank!

    Ach, ich Döskopp – wieder die Hälfte übersehen. Ich danke Dir, jetzt funktioniert alles!


    Nun muss ich mir das wirklich mal in Ruhe anschauen. Das Prinzip der Callbacks habe ich eigentlich verstanden, hatte mir, als es hier darum ging, auch ein paar einfache Beispiele gebastelt. Aber das Script, welches mein Spiel steuert, ist mittlerweile für mich ein ziemliches Monstrum geworden. ;)


    Einen guten und eisfreien Start in die Woche wünsche ich!

    Blitzeis beschert mir heute einen unfreiwillig freien Tag, also habe ich mich gleich wieder mit dem Script beschäftigt. Und ich muss zugeben, dass ich im Augenblick erst mal nicht mehr wirklich durchblicke, ich muss das am Ende noch mal genau analysieren.


    Jetzt habe ich den Zustand, dass keine Mouseevents mehr funktionieren. Wenn ich im Debugger in Chrome als Event Listener Breakpoints „Mouse -> click“ auswähle, wird nichts angezeigt, auch keine Fehlermeldung.


    Das aktualisierte Script ist online, Link unverändert wie in #159. Habe ich irgendwas falsch kopiert?

    Ah, besten Dank – ich habe das HTML online aktualisiert. Jetzt funktionieren die Klicks, aber die Konsole meldet „Uncaught (in promise) ReferenceError: countofquestions is not defined at sempervivum.js:417“. Liegt es daran, dass die Bedingung if (i == countofquestions)nun nicht mehr innerhalb der Funktion getCountRows liegt?


    Zum Debugger für Javascript: Ich kann nicht behaupten, dass ich mit ihm vertraut bin. Ich kenne ihn und benutze ihn (z. B. habe ich den Eventlistener damit laufen lassen und dabei mitbekommen, dass sich die Klicks summieren). Ich werde mal schauen, ob ich ein gutes Lehrvideo zum Debugger finde, denn ganz sicher bietet er Möglichkeiten, von denen ich noch nichts ahne.

    So, ich habe mir mittlerweile alles angeschaut – ganz herzlichen Dank für Deine Mühe, Sempervivum !


    Leider gibt es gibt beim Klick auf einen Button keinerlei Reaktion. Nicht mal eine Fehlermeldung in der Konsole, es passiert einfach nichts. Deswegen habe ich alles inklusive Deines Scripts online gestellt:


    http://music-quiz.bplaced.net/test04/

    http://music-quiz.bplaced.net/test04/sempervivum.js


    Ich habe Dir – Sempervivum – auch einen Datenbankdump und die PHP-Dateien an dieses Posting angehängt, falls Du lokal testen möchtest. Klar, dass ein Stochern im Dunkel keine wirklichen Aufschlüsse bringt. Ich staune schon immer, wie Du mit einem Blick auf ein Script weißt, was es tun wird. ;)


    Die Zugangsdaten in den PHP-Dateien sind absolut unverfänglich, also kein Problem, falls sich das noch irgendwer herunterlädt.


    Zum zweiten Teil des Postings: An Übung und Erfahrung fehlt es mir völlig, wie hier ja unschwer zu erkennen ist. Trotzdem merke ich, dass ich doch schon einiges gelernt habe, wozu natürlich Deine Unterstützung hier massiv beigetragen hat.


    Auf den Bug mit dem vielfachen Eventlistener bin ich übrigens gekommen, weil ich eine weitere Version dieses Quiz basteln will, und zwar eine, in der man erst am Ende angezeigt bekommt, welche Fragen man richtig und welche falsch beantwortet hat. Dazu habe ich bereits eine PHP-Datei, welche mir die korrekten Antwortnummern liefert. Mit JavaScript wollte ich dann die Nummern der gegebenen Antworten (man kann dann nur einmal pro Frage klicken) in ein Array speichern und aus diesen beiden Arrays einen Vergleich erstellen. Und beim Speichern des Arrays ist mir aufgefallen, dass die Zahlen immer mehr und mehr und mehr wurden … ;)


    Einen geruhsamen Feiersonntagsabend wünsche ich!

    Der zweite Feiertag, und ich bin gerade völlig frustriert. Nein, nicht über die minus 12 Grad draußen, sondern darüber, dass ich obige Aufgabe nicht lösen kann. Ich gerate dabei genau an den Punkt, der meine größte Schwachstelle beim Programmieren ist: Ich kann mir die Abläufe nicht bildlich vorstellen, und das ärgert mich gewaltig.


    Der Eventlistener beinhaltet sozusagen das Herz dieses Spiels. Wenn ich irgendwas verändere – und ich habe gestern Abend und heute Morgen etliches versucht –, werden die verschiedensten Fehlermeldungen ausgespuckt.


    Jetzt habe ich zwei Anliegen: Erstens wäre ich natürlich dankbar für die Lösung dieses Rätsels. Und zweitens: Wie kann ich meine Vorstellungskraft für die Abläufe trainieren? Immer, wenn es um Verschachtelungen geht, steigt mein Gehirn aus. :(


    Ich wünsche einen schönen zweiten Feiertag mit gut funktionierenden Heizungen, wärmestrahlenden Öfen oder knisternden Kaminen!

    Schöne Feiertage allerseits!


    Mein Quiz ist eigentlich fertig, aber nur eigentlich, denn ich habe einen Bug entdeckt, dessen Herkunft ich nicht wirklich verstehe:


    http://music-quiz.bplaced.net/test03/

    http://music-quiz.bplaced.net/test03/musicQuiz.js


    Alles, was innerhalb von function makeQuestion(countofquestions) (Zeile 244) abläuft, wird mit countofquestions hochgezählt. Also, bei der ersten Frage läuft es einmal ab, bei der zweiten zweimal, bei der dritten dreimal etc. Man kann das mit dem Debugger feststellen oder einfach im Network-Tab schauen: Mit jedem Aufruf von getQuestions.php wird checkAnswer.php einmal mehr aufgerufen.


    Wie kann ich die Stelle finden, an der der Bug sitzt, und wie kann ich das Untier eliminieren?

    Ich habe nun eine erste Version meines datenbankgestützten Musik-Quiz' erstellt: http://music-quiz.bplaced.net/mq01/


    Das ist noch nicht das, wo ich hin will, es sind auch noch Bugs drin, die ich beseitigen muss. Aber eine Sache ärgert mich sehr, und ich finde dafür keine Lösung: Man kann schnell hintereinander eine falsche und die richtige Antwort (oder andersrum) auswählen und bekommt dann beide Overlays zu sehen, das rote und das grüne.


    Ich hatte once: true für den EventListener ergoogelt, aber das zeigt keine Wirkung. Außerdem hätte ich ohnehin nicht gewusst, wie ich es für die zweite Frage wieder loswerde.


    Mir ist eine Lösung eingefallen, die sehr unsauber wäre: Ich könnte mit dem Klick auf einen Antwortbutton ein leeres Div mit opacity: 0 über die Fragen legen, dann wäre kein weiterer Klick mehr möglich. Aber das wäre selbst mir zu laienhaft … ;)


    Ich wäre also dankbar für einen Hinweis, wie ich während des Timeouts vom ersten Klick auf eine Antwort bis zum Erscheinen des Overlays weitere Klicks auf die Antwortbuttons verhindern kann.

    Normalerweise ärgert man sich ja, wenn etwas nicht funktioniert. Ich ärgere mich gerade, weil etwas funktioniert und ich nicht weiß, wieso.



    Der EventListener tut hier das, was er soll … obwohl die Elemente start und prologue überhaupt nicht mit document.getElementById() definiert worden sind.


    Ist mir etwas entgangen? Reicht es aus, dass die Elemente im HTML-Code eindeutig bezeichnet sind? Seltsamerweise habe ich noch nie etwas davon gehört oder gelesen, dass man document.getElementById() weglassen könnte, im Gegenteil: Mir wurde es so beigebracht, und bisher hat nie jemand daran Anstoß genommen …