Daten zu einem Webserver übertragen mit 39.dll nicht möglich

  • HTML5

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

  • Daten zu einem Webserver übertragen mit 39.dll nicht möglich

    Hallo Experten!

    Seit einem Monat versuche ich Texte (Namen) und Ergebnisse (score) von Onlinespielen in irgend einer Form auf eine HTML-Seite oder in eine Datenbank (MySQL, bzw SQLite) zu übertragen. Leider habe ich bis jetzt noch keine geeignete dll bzw. kein skript gefunden.
    Versuche mit39.dll und HTML.dll habe ich erfolglos abgebrochen.

    Hat jemand von euch schon mit dem GM-Studio so etwas ähnliches probiert?
    Es wäre schön, wenn man bei HTML5 Online-Spielen so etwas wie einen Highscore mit Namen, score, und Texten machen könnte, welcher dann eventuell sogar von einem Administrator ausgewertet werden kann.

    MfG. Hubsl
  • Also mit der 39dll wird das nicht gehen, da HTML5 bzw. JS keine DLL's ausführen kann - Windows only.
    Es gibt jedoch eine HTML5-39dll-Erweiterung, mit JS (Javascript) erstellt, welche mit HTML5 funktioniert und zu vergleichen mit der originalen 39dll ist. Downloadlink weiter unten. Ich selbst habe nie damit gearbeitet, lies evtl. die Readme-Datei. Ausserdem liegen sowohl für Server- als auch Cilent entsprechende Examples bei.

    Um auf diese Erweiterung zu verzichten, könnte man auch mit den integrierten HTTP-Funktionen von Studio und mit einem PHP-Skript arbeiten. Dazu sendest du relevante Daten an das PHP-Skript, welches das ganze in einer Datenbank oder Datei speichert.



    Download der 39dll-JS-Variante:
    xup.in/dl,17703950/39dll_HTML5.zip/
    :thumbsup:
  • jlsnews schrieb:

    Um auf diese Erweiterung zu verzichten, könnte man auch mit den integrierten HTTP-Funktionen von Studio und mit einem PHP-Skript arbeiten. Dazu sendest du relevante Daten an das PHP-Skript, welches das ganze in einer Datenbank oder Datei speichert.
    Genau die will ich ja schon die ganze Zeit machen, leider habe ich bisher nur eine php-Seite geöffnet in der keine Daten angezeigt wurden.
    <?php
    echo $_POST ["data"]
    ?>
    habe noch kein skript gefunden, mit welchem ich z.B. global.data posten kann.

    Hubsl
  • Also...

    Du legst ein PHP-Script im selben Ordner wie das Game ab (auf dem Webserver).
    Da rein schreibst du:

    PHP-Quellcode

    1. <?php
    2. $handle = fopen("datei.txt","w");
    3. fwrite($handle,print_r($_REQUEST));
    4. fclose($handle);
    5. echo "OK";
    6. ?>


    Anschliessend in Studio:

    IrgendEinObject - :event_create: (was auch immer du willst)

    GML-Quellcode

    1. data = "Diesen String erhält das PHP-Skript!";
    2. ergebnis = http_post_string("dasphpskript.php",data);


    Hab's nicht getestet!
    :thumbsup:
  • Schaut schon ganz gut aus!

    Es erscheint auf der php-Seite "Array ( ) OK"



    Werde nun mit den beiden Skripten weiter experimentieren.



    Da ich mit PHP-Skripten noch fast nichts gemacht habe, noch eine Frage:
    Was ist hier: $handle = fopen("datei.txt","w");
    Vielen Dank einstweilen, melde mich wieder sobald ich Ergebnisse zu berichten habe.
    Hubsl



    Leider komme ich nicht wirklich weiter.


    Es wird auf dem Server zwar eine datei.txt erzeugt, in dieser steht leider nur ein Einser in der ersten Zeile.
    Auf der php-Seite steht "Array ( ) OK"



    Vielleicht habe ich ein paar wichtige Eintragungen nicht richtig gemacht?


    PHP-Quelltext

    <?php
    $handle
    = fopen("datei.txt","w");
    fwrite($handle,print_r($_REQUEST));
    fclose($handle);
    echo
    "OK";
    ?>



    Anschliessend in Studio:

    GML
    data = "Diesen String erhält das PHP-Skript!";
    ergebnis = http_post_string("gamedata1.php",data);


    Hubsl

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

  • Ich habe selbst ein wenig versucht, sehe aber nicht ein, mit welchem Namen der POST-Wert übermittelt wird. Wenn du also nicht zu sensible Daten überträgst, bzw. nicht mehr als... Keine Ahnung, ich glaub GET hat einen grenzwert... kannst du zwischenzeitlich auf GET umsteigen (HIER EINE ERKLÄRUNG).

    Also...
    IrgendEinObjekt - IrgendEinEvent (ich nehme :event_keyrelease: mit <Space>)

    GML-Quellcode

    1. http_get("skript.php?varname=varinhalt");
    2. http_get("gamedata1.php?spieler="+global.playername+"&game_id="+string(global.game_id));


    PHP-Quellcode

    1. <?php
    2. $handle = fopen("datei.txt","a"); // ÖFFNET DATEI "DATEI.TXT" IM MODUS "A". INFOS WEITER UNTEN!
    3. fwrite($handle,"\r\n".$_GET["game_id"].": ".$_GET["spieler"]);
    4. fclose($handle);
    5. echo "Anything OK!";
    6. ?>


    Kurz zur Erklärung des PHP-Skripts:

    In Zeile 1 wird die Datei "datei.txt" im Modus A geöffnet (HILFE und ERKLÄRUNG).
    In Zeile 2 wird in die Datei die Game-ID sowie der Benutzername geschrieben. Das sieht beispielsweise so aus: 37828759: hansi1
    In Zeile 3 wird die Datei geschlossen, um speicher freizugeben, und um Schäden der Datei zu vermeiden.
    In Zeile 5 wird ein Text ausgegeben.
    :thumbsup:
  • habe die beiden skripte pobiert., nun erscheint folgendes:
    Notice: Undefined index: game_id in C:\xampp\htdocs\GM-Studio\gamedata1.php on line 22

    Notice: Undefined index: spieler in C:\xampp\htdocs\GM-Studio\gamedata1.php on line 22
    Anything OK!



    Danke für den Hinweis (Hilfe und Erklärung).
    Werde diese Seiten mal genauer ansehen.


    Hubsl

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

  • hast du denn in GM:Studio die Variablen die Übertragen werden auch so genannt?

    also beispiel:

    http_get("url....blblblblbl...../test.php?game_id=12345&spieler=hansi01");

    Wenn diese fettgedruckten Werte in deinem Studio-Code anders sind, musst du natürlich das auch im PHP-Skript ändern...
    :thumbsup:
  • Hallo da bin ich wieder!

    Mit GET funktioniert die Übertragung auf die datei.txt am Server problemlos!

    Hier noch meine beiden Skripte:

    GML: (Obj."Senden-Button" re. Maustaste)

    name = global.name+string(', ')+score+string(' Punkte')+string(', am ')+date_datetime_string( date_current_datetime() );
    http_get("gameget.php? spieler=" + name);


    <?php
    $handle = fopen("datei.txt","a"); // ÖFFNET DATEI "DATEI.TXT" IM MODUS "A". INFOS WEITER UNTEN!
    fwrite($handle,"\r\n".$_GET["spieler"]);
    fclose($handle);

    echo "Deine Ergebnisse wurden gespeichert!";
    ?>

    Derzeit reicht es mir vollkommen, Name, Punktestand und das aktuelle Datum bei jedem Klick auf mein "Senden-Button" der Reihe nach in der datei.txt am Server zu speichern. Bestimmt wird in Zukunft noch das Eine oder Andere Skript dazukommen, bis dahin Danke nochmal.

    MfG. Hubsl
  • hubsl schrieb:

    GML: (Obj."Senden-Button" re. Maustaste)

    name = global.name+string(', ')+score+string(' Punkte')+string(', am ')+date_datetime_string( date_current_datetime() );
    http_get("gameget.php? spieler=" + name);


    Nur so nebenbei, die string() Funktion muss nicht ständig angewandt werden.
    Diese Funktion dient nur dazu, um reale Werte darzustellen.

    Sprich:
    [hide='Variante "Real"']:event_create:

    GML-Quellcode

    1. lives = 3;


    :event_draw:

    GML-Quellcode

    1. draw_text(x,y,"Leben: "+string(lives));
    2. draw_text(x,y,"Leben: "+lives); // GIBT EINEN FEHLER AUS, DA "lives" EINE ZAHL IST.
    [/hide]

    [hide='Variante "String"'] :event_create:

    GML-Quellcode

    1. lives = "3";


    :event_draw:

    GML-Quellcode

    1. draw_text(x,y,"Leben: "+string(lives));
    2. draw_text(x,y,"Leben: "+lives);
    3. // FUNKTIONIERT BEIDES, DA "lives" NUN EIN STRING IST.
    [/hide]

    Nur um ein wenig Code zu sparen, könntest du es also auch einfach so machen;

    GML-Quellcode

    1. name = global.name+', '+score+' Punkte'+', am '+date_datetime_string( date_current_datetime() );
    2. http_get("gameget.php? spieler=" + name);
    :thumbsup:
  • Danke für den Tip!

    Der Vollständigkeit halber hier noch die Tabelle (HTML), mit welcher ich die Ergebnisse des Spieles anzeige:

    <html>
    <head>
    <title>Hubert Burb&ouml;ck/PHP-Ergebnisliste anzeigen</title>
    <link REL="SHORTCUT ICON" HREF="favicon.ico">

    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

    <body bgcolor="#ffffed">
    <p>
    <p align="center"><font face="Arial, Helvetica, sans-serif" size="4">
    <?
    $fp = fopen('datei.txt', 'r');

    // Der Kopf der Tabelle
    echo '<table border="4">
    <tr>
    <td><b>Name, Punktestand, Datum und Uhrzeit</b></td>
    </tr>';

    while (!feof($fp)) {
    $zeile = fgets($fp,500);
    $daten = explode(" | ", $zeile);
    // Die einzelnen Zeilen in der Tabelle
    echo "<tr><td>$daten[0]</td>
    </tr>";
    }
    // Das Ende der Tabelle
    echo '</table>';

    fclose($fp);
    ?>

    </body></html>




    Mfg. Hubsl

    ___

    PROBLEM!
    Nun habe ich ein Spiel auf den Server geladen und muss leider erkennen, dass oft keine Zeichen übertragen werden.
    Es werden nur manchmal die richtigen Daten übertragen. Ansonsten gibt es eine Leerzeile.

    Finde einfach keinen Grund, warum das am Server nicht richtig funktioniert.
    Wenn ich die linke Maustaste nur extrem kurz antippe, funktioniert es fast jedesmal!

    Am Rechner mit xammp (Lokalhost) funktioniert alles immer bestens!

    Hubsl

    ___

    PROBLEM behoben!!!

    Mit Maus left pressed wurde der Code augerufen und auch der Url geöffnet.

    Nun öffne ich den Url erst mit Maus left released.

    Jetzt aber passt alles!

    Hubsl
  • Benutzer online 1

    1 Besucher