[JavaScript/PHP] Variable von JS in PHP "übergeben"

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • [JavaScript/PHP] Variable von JS in PHP "übergeben"

    Hallo.

    Momentan arbeite ich an einem Script, was die 3 neusten Videos von einem Youtube-Kanal anzeigen lassen soll. Klappt soweit auch, jetzt möchte ich allerdings die Variablen von JavaScript in meinen PHP-Code übergeben.
    Im JavaScript wird über die Youtube API v3 die Schnittstelle angesprochen bzw ausgelesen und wird dementsprechend im Browser wiedergegeben.

    Mein Anliegen hierbei ist es, die 3 Videos in eine Variable (ob mit oder ohne Array egal) ins PHP zu übergeben, so dass ich z.B. folgendes habe:

    Quellcode

    1. $result[1] = Video 1
    2. $result[2] = Video 2
    3. $result[3] = Video 3


    Die möchte ich mittels $_GET['']; herausbekommen, damit ich per Game Maker HTTP-Funktion einen Request senden kann und die Informationen der Videos auslesen kann.

    Mein JS Quellcode:

    Quellcode

    1. var videoResultOutput = new Array(3);
    2. var videoResultId = 0;
    3. ...
    4. ...
    5. ...
    6. videoId = item.snippet.resourceId.videoId;
    7. ...
    8. //Send Video to PHP
    9. videoResultId = videoResultId + 1;
    10. videoResultOutput[videoResultId] = 'www.youtube.com/embed/'+videoId+'&videoResultId='+videoResultId;
    Alles anzeigen


    Mein HTML/PHP Code:

    PHP-Quellcode

    1. [...]
    2. <script src="js/jquery-1.11.3.min.js"></script>
    3. <script src="js/script.js"></script>
    4. [...]
    5. <?php
    6. $result = $_GET['videoResultOutput'];
    7. echo $result;
    8. ?>
    Alles anzeigen


    Beim PHP Code ist es bis jetzt so, dass wenn ich meine URL www . meineseite . de/index.php?videoResultOutput="HIER DIE VIDEO URL" eingebe, er mir auch den Link - also die Variable videoResultOutput anzeigt. Aber das ist ja keine Kunst, wenn ich den Link manuell eingebe, hier möchte ich gerne, dass er es automatisch ausliest - dazu habe ich die videoResultId als Zählervariable dazu genommen, jetzt fehlt mir nurnoch die Richtige Umsetzung - und da stehe ich auf dem Schlauch.

    Liebe Grüße
    icqgamer
  • Hallo,

    habe ich bereits gemacht. Aber mein Englisch ist nicht das aller Beste und das was dort steht ist für mich auch nur schwer nachzuvollziehen (unter Anderem auch, da ich dort garnicht so richtig weiß, wo ich überhaupt anfangen muss zu suchen, was nun das richtige für mich ist).

    Am Ende steht etwas ganz Interessantes:

    Quellcode

    1. var menuId = $( "ul.nav" ).first().attr( "id" );
    2. var request = $.ajax({
    3. url: "script.php",
    4. method: "POST",
    5. data: { id : menuId },
    6. dataType: "html"
    7. });
    8. request.done(function( msg ) {
    9. $( "#log" ).html( msg );
    10. });
    11. request.fail(function( jqXHR, textStatus ) {
    12. alert( "Request failed: " + textStatus );
    13. });
    Alles anzeigen


    und

    Quellcode

    1. $.ajax({
    2. method: "GET",
    3. url: "test.js",
    4. dataType: "script"
    5. });


    Aber wirklich schlauer geworden bin ich dadurch ehrlich gesagt jetzt nicht, weil mir da die richtige Erklärung zu fehlt. Das ist alles noch zu oberflächlich erklärt und die Codes einfach reingehaun, ich möchte ja auch Learning by Doing anwenden :P
  • Erstmal muss man wissen, dass Javascript und PHP in der Regel nicht direkt miteinander kommunizieren können. Deswegen auch das Wort Anfrage. Sobald die Webseite sichtbar ist, hat der Server den Benutzer komplett vergessen. Deswegen wird in diesem Fall eine Session benötigt. Dafür muss in PHP vor jeglicher Ausgabe der Code session_start(); stehen. Dann kann man alle Variablen im Array $_SESSION['name'] speichern. Hier würde sich eine Klasse empfehlen die alles zusammenfasst. Die Session dient dazu einige Dinge zu speichern, solange der Nutzer die Webseite offen hat.
    Dann würde ich erstmal Ajax weg lassen und auf das grundlegende Element XMLHttpRequest(); zugreifen. Dazu erstellt man sich eine globale Instanz von XMLHttpRequest.

    Quellcode

    1. var xmlhttp=new XMLHttpRequest();
    2. function search(VideoUrl)
    3. {
    4. xmlhttp.open("GET","anfrage.php?videoResultOutput="+VideoUrl,true);
    5. xmlhttp.send();
    6. }
    7. xmlhttp.onreadystatechange = function()
    8. {
    9. if(xmlhttp.readyState === 4) //Wenn die Anfrage erfolgreich war
    10. {
    11. var ergebniss = xmlhttp.responseText;
    12. }
    13. }
    Alles anzeigen

    In diesem Beispiel müsste in anfrage.php es dann in der SESSION abgespeichert werden. Sobald die Anfrage erfolgreich war kann man das was der Server ausgibt, mit responseText auch auswerten.
    Dann stört mich nurnoch, dass du direkt auf $_GET[] zugreifst. Mach das bitte Zukünftig nicht mehr. Das Gilt auch für $_POST[] und $_REQUEST[]. Statdessen sollte man alle Eingaben, die der Nutzer macht, filtern, um keine falschen Angaben anzunehmen. Das macht man mit der filter_input() Funktion. In diesem Fall wird eine URL erwartet. Deswegen benutzt man filter_input(INPUT_GET, 'videoResultOutput', FILTER_SANITIZE_URL);.

    Ich hoffe der JavaScript Code ist verständlich. Wenn nicht, einfach fragen.

  • Vorerstmal vielen Dank für die ausführliche Erklärung. Ich werde da mal ein wenig rumprobieren und werde deine ratschläge anwenden.
    Ich hoffe, es ist auf dem Wege auch möglich per HTTP-Request vom Game Maker die Variable dann über das PHP Script in den Game Maker zu übergeben. Das wäre allerdings dann erst der nächste Schritt.



    So habe ich mir das ganze in etwa vorgestellt!

    Gruß
    icqgamer
  • icqgamer schrieb:

    Vorerstmal vielen Dank für die ausführliche Erklärung. Ich werde da mal ein wenig rumprobieren und werde deine ratschläge anwenden.
    Ich hoffe, es ist auf dem Wege auch möglich per HTTP-Request vom Game Maker die Variable dann über das PHP Script in den Game Maker zu übergeben. Das wäre allerdings dann erst der nächste Schritt.



    So habe ich mir das ganze in etwa vorgestellt!

    Gruß
    icqgamer


    Das ganze so zu realisieren wie es auf der Grafik gezeigt ist, wird so einfach nicht möglich sein.
    PHP-scripts laufen auf dem Webserver wodurch du problemlos HTTP requests machen kannst und der Server dir die jeweilige Information einfach zurücksendet.

    Javascript ist hingegen eine Scriptsprache die lokal auf dem Client ausgeführt wird. (Beim Surfen im Web ist es der Webbrowser selbst)
    Sprich: Du wirst über PHP keinen Javascript code ausführen können.
    Eine Javascript-php kommunikation wäre z.B nur dann möglich/sinnvoll wenn du auf einer Webseite eine Realtime-app in javascript realisiert hast welche in echtzeit daten vom Webserver beziehen soll (welche dann z.B: über PHP ausgelesen werden.)
    Javascript ist sozusagen die Sprache welche eine Kommunikation mit PHP startet (javascript steuert dann die kommunikation). Das ganze Umzukehren ist nicht möglich.

    Kruzum:
    PHP > serverseitige Sprache
    Javascript > clientseitige Sprache
    Der Webserver wird keinen Javascriptcode ausführen können.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von LEWA ()

  • Dacht ich mir schon fast.. dann muss ich mir da etwas Anderes überlegen. Ich dachte es könnte vielleicht klappen, wenn man das Ergebnis vom JS in die Session vo PHP speichert, aber Game Maker fragt ja nur den aktuellen Status des Scriptes aus und in dem Moment wird ja das Script erstmal ausgeführt und es ist noch kein Result vorhanden, dann unterbricht der das ganze natürlich und dann erst kommt die Result Variable in der Session für das PHP Script an.

    Wäre es vielleicht anders möglich, dass wenn noch keine Session sozusagen vorhanden ist das JavaScript ausgeführt wird, die Variable dann in dieser Session angespeichert wird wie Chris987 bereits sagte und ich dann mit dem Game Maker einfach eine neue Anfrage schicke, wo er dann - bei der aktuell vorhandenen Session - dann einfach das Result ausliest und die Session wieder löscht? Wobei ich mir da unsicher bin, ob ich dann zum gewünschten Ergebnis komme.
  • icqgamer schrieb:


    Wäre es vielleicht anders möglich, dass wenn noch keine Session sozusagen vorhanden ist das JavaScript ausgeführt wird, die Variable dann in dieser Session angespeichert wird wie Chris987 bereits sagte und ich dann mit dem Game Maker einfach eine neue Anfrage schicke, wo er dann - bei der aktuell vorhandenen Session - dann einfach das Result ausliest und die Session wieder löscht? Wobei ich mir da unsicher bin, ob ich dann zum gewünschten Ergebnis komme.

    Das Problem ist dass du vom Webserver aus keinen Javascriptcode starten kannst.
    Du sendest zwar z.B: ein HTTP request vom GM aus an den Webserver, dieser kann dann PHP code ausführen aber du kannst keinen Javascriptcode von PHP aus starten.

    Das einzige was du evtl nachschauen könntest ob es serverseitige Javascriptlösungen gibt. (Diese werden aber wahrscheinlich custom-tech sein und werden auch sehr wahrscheinlich nicht so einfach mit komplexeren APIs wie die von Youtube funktionieren.)
  • vielleicht für nächstes mal recht interessant:

    zwei größere Browserhersteller bieten ihre Ecmascript/JS Interpreter auch als Standalone/"Server" Versionen an:
    nodejs
    rhino

    damit ist es durchaus möglich, Je nach Spielraum im Server, JS Code serverseitig ausführen zu lassen. HTTP Requests sind damit natürlich auch möglich.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von domis4 ()