Die Kommunikation zwischen PHP und JavaScript und das daraus resultierende Endergebnis in einem schnellem und sicherem Verfahren

  • Hallo, da das Thema JS und PHP gleichermaßen behandelt wusste ich nicht genau wohin damit.


    Es geht hierbei die Umsetzung eines Programmes, welches Daten von Client zum Server sendet, der Server erstellt wiederrum Daten, diese wiederrum gehen zum Client. Der Weg der Daten sieht so aus:


    1. Client schickt Formular ab/betätigt Knopf
    2. index.js wertet Formular aus und
    3. übermittelt das an ein weiteres script.js
    4. dieses script.js übermittelt das an programm.php
    5. php erstellt Daten, verrechnet diese und wertet sie aus
    6. php schickt alles an script.js
    7. script.js schickt andere Daten an index.js
    8. script.js stellt alle Daten dar
    9. script.js schickt sämtliche Daten nochmal an programm.php und einen Datenabgleich zu machen


    Das wirkt auf den ersten Blick nicht kompliziert zu programmieren, muss aber so strukturiert sein, dass 1. schnell ist. ( maximal millisekunden ) und 2. erweiterbar ist. Damit meine ich, wenn es ein weiterer Arbeitsschritt eingefügt werden soll, soll das ohne weiteres möglich sein.


    Zudem kommt der aspekt der Sicherheit. Warum am ende der Datenabgleich? Um sicher zu stellen dass keiner versucht hat in der JS oder im DOM zu fuschen.

    Zusätzlich kann es sein dass noch mehr Ajax Requests stattfinden müssen, in ein und der selben Handlung.


    Jetzt wollte ich fragen ob und wie man das angeht. Ist das überhaupt sinnvoll eine PHP und eine JS Datei dafür arbeiten zu lassen? Oder sollte man das ganze anders machen? Hat einer von euch schon mal sowas gebraucht? Oder gibt es bestimmte Librarys für solche Fälle?

  • Es gibt das XmlHttpRequest-Objekt, womit das problemlos umsetzbar ist.

    Ich verstehe allerdings den Ansatz nicht, warum so viele JS-Scripte erst mit den Daten jonglieren müssen, bevor die an PHP gesendet werden?

    Das ist eigentlich ein Zeichen dafür, dass an der Stelle Optimierungsbedarf besteht.

  • Ich benutze JQuery, darum mit welchen Mitteln das gemacht wird ging es gar nicht primär, sondern eher um den sicheren Aufbau.


    Das erste Script wertet aus welche Aktion vom User ausgeführt wurde. Es gibt 10 Spiele, jedes macht etwas anderes, die Knöpfe allredings sind immer die gleichen. Daher arbeitet das erste Script seperat von den anderen.


    Jedes Spiel hat 2 Dateien, eine JS und eine php. Die JS ist dafür zuständig alles beim User anzuzeigen, die php soll alles berechnen. Das System ist so gewählt, damit es schwieriger ist die Daten zu manipulieren. Um sicherzustellen dass auch kein Versuch stattgefunden hat, müssen die Daten nochmal mit den im php script liegenedn Daten abgeglichen werden.


    Ich selbst sehe keine bessere Möglichkeit als es so zu machen.

  • Das erste Script wertet aus welche Aktion vom User ausgeführt wurde. Es gibt 10 Spiele, jedes macht etwas anderes, die Knöpfe allredings sind immer die gleichen.

    Du solltest doch aber wissen, in welchem Spiel sich der User befindet, wenn ein Knopf gedrückt wurde. Dies kannst Du dann mit einem entsprechenden weiteren Parameter direkt an PHP übermitteln. Auf PHP Seite prüfst Du erst ab, in welchem Spiel man sich befindet und rufst entsprechend ein Verarbeitungs-Script speziell für dieses auf, das die Berechnungen ausführt und entsprechende Resultate zurückgibt, falls erforderlich.


    Du solltest so wenig wie möglich auf Client Seite mit Daten jonglieren, denn die sind immer irgendwie manipulierbar.

  • Nach diesem Prinzip gäbe es aber nur ein php Script für alle Spiele oder nicht? Die Spiele sollten möglichst frei von anderen Scripten arbeiten können. Odser hab ich das falsch verstanden?

  • Du hast ein PHP-Script, aber je Spiel mind. ein weiteres Script ( ich würde es eher Controller nennen ).

    Die Daten werden aus JS ( mit einer Spielkennung als zusätzlichen Parameter ) an das Root-Script gesendet und das entscheidet an der Spielkennung, welcher Controller geladen wird. Die Arbeit erledigt das Controller-Script, das Root-Script weiß nichts davon.


    Wenn man dann die Controller sauber aufgebaut hat, sollten diese mind. eine einheitliche Methode enthalten, worüber das Root-Script die Ergebnisse erhält und an das JS zurücksenden kann.


    Ein Beispiel zum Verständnis ( ohne funktionalen Bezug ):

    Ein Root-Script, das von JS aufgerufen wird, könnte so aussehen:

    Das ist natürlich nur der programmatische Ablauf, aber viel mehr muss das Root-Script gar nicht können.

    Die ganze Magie spielt sich in den Game-Controllern ab. Darin hast Du alle Freiheiten, was auch immer Du mit den Daten verarbeiten willst.


    Als Rückgabewert habe ich nur mal JSON angenommen, weil das relativ einfach mit JS zu verarbeiten ist. Wenn Du anders arbeitest, musst Du das dahingehend halt anpassen und zwecks Verwirrung die Methode GetJSON() entsprechend umbenennen.


    Aber das gehört zu Deiner Fantasie der Umsetzung ;)

  • Eine Datenbank habe ich in meinem Konzept gar nicht erdacht. Wäre das ne wichtige Sache?


    Ich bin schwer vom Begriff, da muss ich nochmal nachhaken :D - Ein ganzes Spiel hätte also so eine Dateistruktur:


    (Ordner) Spielname

    -> index.html - (beinhaltet canvas)

    -> root.php

    -> controller.php

    -> anzeige.js



    Zusätzlich gibt es noch die nicht im Spielordner enthaltene game-interface.js die auswertet welche Knöpfe gedrückt wurden. Auswertung wird an root.php geschickt und root gibt es weiter an controller.php. Ich verstehe nur nicht ganz wie es dann weiter geht.

  • Eine Datenbank habe ich in meinem Konzept gar nicht erdacht. Wäre das ne wichtige Sache?

    Aus meiner Sicht ja. Es wird sicher auch ohne gehen, aber eine DB macht an der Stelle defintiv Sinn!


    Ein ganzes Spiel hätte also so eine Dateistruktur:

    Sieht soweit doch gut aus, außer dass die root.php für mein Verständnis da nicht reingehört.

    Aber vielleicht klärt sich das im nächsten Absatz.


    Zusätzlich gibt es noch die nicht im Spielordner enthaltene game-interface.js die auswertet welche Knöpfe gedrückt wurden. Auswertung wird an root.php geschickt und root gibt es weiter an controller.php.

    Soweit richtig. Nur sollte die root.php nicht zur Spielstruktur gehören. Vielleicht meinen wir ja auch etwas anderes, aber für mich ist die root.php die Schnittstelle zur game-interface.js. Diese gibt alle nötigen Infos - inkl. Spielekennung - an die root.php und dort wird anhand der Spielekennung die controller.php aus dem zugehörigen Spieleordner eingebunden.


    Ich verstehe nur nicht ganz wie es dann weiter geht.

    In der controller.php wird alles dem Spiel gemäß verarbeitet. Die root.php holt sich dann das Resultat für die Ausgabe an den Browser und das JS auf Client Seite erledigt den Rest.

  • Ne, irgendwie gefällt mir das noch nicht. Also das ganze System. Es ist einfach viel zu kompliziert. Das muss doch leichter gehen. Deine Ideen haben das System zwar vereinfacht aber selbst dann ist es meiner Meinung nach noch zu kompliziert.


    Ich versuch das nochmal runter zu brechen.


    Es gibt verschiedene Spiele. Alle haben die gleichen Eingabeaufforderungen, also würde es da schonmal Sinn machen eine einzige Datei für die Eingabeaufforderungen zu machen und diese überall einzubinden. Jedes Spiel braucht mindestens eine JS für die visuelle Umsetzung und eine PHP Datei für das berechnen.


    auf der Hauptseite game.php wird das game-interface eingebunden und die html Datei des ausgewählten Spiels. Ab da sollte ja am besten alles von selbst laufen.

    Also ich könnte jedes Spiel einbinden und es funktioniert.


    Zur Zeit habe ich mehrere Dateien die miteinander kommunizieren müssen und eine Datenbank bei der ich den Zweck doch noch nicht ganz verstanden habe. Kann man die Arbeit der root.php nicht dann sowieso direkt in die game-interface.js mit reinpacken?


    Oder sollte ich die game-interface.js bei jedem Spiel einzeln hinzufügen?


    Das jetzige Konzept passt wie ich finde vorn und hinten nicht.


    EDIT: Ich sehe bei anderen Websiten dass sie ein leicht anderes Konzept nutzen. Da wird einmal etwas eingebunden. Also einmal und alle anderen sachen werden dann vom Spielscript geladen. Sowie das game-interface und so weiter.


    Ich markier mal basti1012 weil der auch so gerne über sowas nachdenkt.

  • Kann man die Arbeit der root.php nicht dann sowieso direkt in die game-interface.js mit reinpacken?

    Definitiv NEIN!

    PHP "geschieht" auf dem Server; nur dort hast Du Kontrolle.

    Das JS kann vom Client in beliebiger Weise manipuliert werden.

  • Ich sehe bei anderen Websiten dass sie ein leicht anderes Konzept nutzen. Da wird einmal etwas eingebunden. Also einmal und alle anderen sachen werden dann vom Spielscript geladen. Sowie das game-interface und so weiter.

    Das ist im Prinzip genau das, wo es hingehen sollte, wenn Du es so machst, wie ich es beschrieben habe. Ich vermute, dass Du das nicht ganz so umgestzt hast, wie es gemeint war.


    Zur Zeit habe ich mehrere Dateien die miteinander kommunizieren müssen und eine Datenbank bei der ich den Zweck doch noch nicht ganz verstanden habe. Kann man die Arbeit der root.php nicht dann sowieso direkt in die game-interface.js mit reinpacken?

    Nein, denn abgesehen davon, dass PHP und JavaScript wie schon erwähnt i.d.R. in vollkommen unterschiedlichen Welten arbeiten, sehe ich es zumindest als FailByDesign, alles in JavaScript berechnen zu lassen. Die Frage ist natürlich, was genau Du damit meinst. Reine mathematische Berechnungen wären kein Problem, aber es sollten keine sensiblen oder Spiel abhängige Daten in JS hantiert werden. JS kann jeder Nutzer mit etwas KnowHow manipulieren.


    Die Datenbank hat den Hintergrund, dass Du dort bspw. bestimmte Dinge dauerhaft speichern kannst.

    Ich kenne Deine Spiele nicht, aber wo speicherst Du den Spielstand oder eine HighScore oder ähnliches?

    Wenn ich Deine Spiele verlasse und Du es nirgendwo speicherst, fange ich jedes mal jungfräulich an, wer will das?

    Solltest Du solche oder ähnliche Dinge in Dateien speichern, sei Dir gesagt, dass hier die DB besser geeignet ist.


    auf der Hauptseite game.php wird das game-interface eingebunden und die html Datei des ausgewählten Spiels. Ab da sollte ja am besten alles von selbst laufen.

    Also ich könnte jedes Spiel einbinden und es funktioniert.

    Genau das Ziel verfolgt das Konzept, das ich Dir genannt habe.

    Eine JS kommuniziert mit nur einer PHP, was auf dem Server passiert ist dem Spiel egal und sollte es auch...

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!