Online-Highscore mit PHP aber ohne Verschlüsselung

  • Online-Highscore mit PHP aber ohne Verschlüsselung

    Hallo,
    ich bin kein GM-Profi und "Wurschtel" mich so durch. Ich habe lange Zeit versucht den Online-Highscore mit SQL zum laufen zu bringen was mir aber nicht gelungen ist.
    Mit dem was ich aus der SQL-Lösung verstanden habe und mit PHP-Scripten die ich solange
    verändert habe bis es lief habe ich eine Lösung die Funktioniert. Leider komme ich aber mit
    der Verschlüsselung nicht so recht weiter. Es wäre toll wenn mir jemand helfen könnte der die
    SQL-Lösung verstanden hat bzw. eine andere hat die leicht einzusetzen ist. Das mit diesem CRC scheint mir ganz gut zu sein, da ich sowas bei PHP auch schon gesehen habe. Bis dahin hoffe ich das meine Lösung jemanden hilft oder einen Ansatz bietet. Wenn Interesse besteht werde ich auch die "Endversion" Uploaden.

    Danke und bis dann
    Dateien
  • ist ganz nett, aber mit mysql ists eigenlich viel einfacher, vor allem kann man die ausgabe schön sortieren.

    der schreibe skript klappt überhaupt nicht, wie soll er an die wertze kommen? da müsstest du noch irgendwo get-varibalen einbauen, dass er auch bekommt, was er braucht ( register globals benutzt ich nie und hab ich auch net aktiviert).

    außerdem würde ich, wenn das teil schon ohne reload bzw. crack-speree ist, die umleitung per http-header machen, denn sonst kann man bei machen browsern einfach auf zurück drücken und steht nomal drin

    Quellcode

    1. </table></div>
    2. </div></div>
    3. </div>
    4. </body>
    5. </html>


    wozu sind die ganzen div-tags?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von schlieperich ()

  • Hallo,
    die Werte werden durch das GM-Script aus der Highscoreliste ausgelesen

    url_string += "?p1=" + string(highscore_value(1));
    url_string += "&n1=" + highscore_name(1);

    und über

    browser="IEXPLORE.EXE";
    execute_shell(browser,url_string);

    an das PHP-Script übergeben.

    url_string = "www.deinedomain.de/highscore/schreibe.php";

    Das sieht dann so aus:

    deinedomain.de/highscore/schreibe.php?p1=88&n1=Meier

    Der Meier hat also 88 Punkte gemacht.

    (browser="IEXPLORE.EXE"; weil es mit Opera und Firefox Probleme gab wenn im Namen Umlaute enthalten sind. So nehmen wir den Internet-Explorer, bin zwar kein Fan, aber mit dem geht es.)

    Eine Umleitung per HTTP-Header ist in der schreibe.php enthalten, die ruft die ausgabe.php
    auf. Oder meinst Du das nicht?

    Das Sortieren kann über die Zeile "rsort( $array, SORT_NUMERIC );" in der ausgabe.php
    geregelt werden. Also Auf- oder Absteigend nach Nummer oder Zeichen.

    Und die DIV-Tags. Gute Frage :) Ich glaube die habe ich Vergessen zu löschen.
    Im GM-Script habe ich auch gerade gesehen das ich vergessen habe eine Auskommentierte-Zeile zu löschen.

    Sorry! Ich habe gepennt.

    Ich hoffe Dir mit den Antworten geholfen zu haben. :-)))
  • eingelich hatte ich ja gar nix gefragt, sondern wollte dir nur verbesserungsvorschläge geben.

    mit den get-variablen mein ich nur, dass die meißten php-server (ua. meiner) register globals nicht aktivert haben. folglich wird aus der get-varibale "?p=123" nicht $p.

    du musst in deinen skript zb. $p = $_GET['p']; (oder mit getenv() ) schreiben.

    hier mein vorschlag zur schreibe.php:

    PHP-Quellcode

    1. <?php
    2. $punkte = $_GET['p1']; // Variablen einlesen
    3. $name = $_GET['n1'];
    4. if(empty($punkte) || empty($name)) die('Fehlende Werte');
    5. $text = "$punkte ; $name \n"; // Textstring zusammensetzen
    6. $dateiname = "test.txt"; // Name der Datei
    7. if(!$fp = @fOpen ($dateiname , "a")) die('Fehler beim Öffnen der Datei'); // Datei öffnen
    8. fWrite ($fp , $text); // Dateiinhalt in die Datei schreiben
    9. fClose ($fp); // Datei schließen
    10. header('Location: http://'.$_SERVER['HTTP_HOST'].'/ausgabe.php'); // Umleiten
    11. ?>
    Alles anzeigen


    achja, das problem mit den umlauten und sonderzeichen hab ich gelöst, in dem ich den string vorher in hexadezimal konvertiert hab.

    der skript dec2all() :

    GML-Quellcode

    1. var dec,len, ref, a, b;
    2. ref='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    3. ref=string_copy(ref,1,argument1);
    4. a=argument0;
    5. b='';
    6. if(argument0==0)
    7. b=string(argument0);
    8. else
    9. {
    10. while(a<>0)
    11. {
    12. b=string_char_at(ref,frac(a/argument1)*argument1+1)+b;
    13. a=floor(a/argument1);
    14. }
    15. }
    16. return b;
    Alles anzeigen



    dazu passender code-schnipsel:

    GML-Quellcode

    1. name = string_replace_all(der_eingegebne_name,'&','');
    2. name = string_replace_all(name,'?','');
    3. len = string_length(name);
    4. str = '';
    5. for (i=1; i<=len; i+=1;) {
    6. str += '%' + string( dec2all(real(ord(string_char_at(name,i))),16) );
    7. }
    8. name = str;

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

  • Hallo,

    Super-Vielen-Dank für die Arbeit die Du dir gemacht hast und das Du die
    schreibe.php verbessert hast. Ich hatte es bei Strato getestet und Glück gehabt das es dort Funktionierte.
    Deine Lösung für das Umlaute-Problem alles in Hex umzuwandeln hat mich auf die Idee gebracht ob das nicht meine Lösung für eine "Verschlüsselung" sein könnte. Im Grunde reicht mir das Punkte und Name nicht im Klartext übertragen werden. Also könnte doch die Umwandlung in Hex
    das Umlaute- und Verschlüsselungsproblem gleichzeitig lösen. Sehe ich doch richtig. Oder? Ein entsprechendes PHP-Script das aus Hex wieder einen String macht habe ich mir aus Code-Schnippseln von "selfphp"-Beispielen schon gemacht.

    Somit sieht die Funktionierende schreibe.php jetzt so aus :

    <?php
    $punkte = $_GET['p1']; // Variablen einlesen
    $name = $_GET['n1'];

    function hex2str($hex) {
    for($i=0;$i<strlen($hex);$i+=2) {
    $str.=chr(hexdec(substr($hex,$i,2)));
    }
    return $str;
    }

    $name = hex2str($name);
    $punkte = hex2str($punkte);


    if(empty($punkte) || empty($name)) die('Fehlende Werte');

    $text = "$punkte ; $name \n"; // Textstring zusammensetzen

    $dateiname = "test.txt"; // Name der Datei
    if(!$fp = @fOpen ($dateiname , "a")) die('Fehler beim Öffnen der Datei'); // Datei öffnen
    fWrite ($fp , $text); // Dateiinhalt in die Datei schreiben
    fClose ($fp); // Datei schließen
    header('Location: '.$_SERVER['HTTP_HOST'].'/1/ausgabe.php'); // Umleiten

    ?>


    Mit den zwei Quelltexten von Dir, dec2all() und code-schnipsel, habe ich meine Probleme.
    Dafür habe ich zuwenig Wissen. In der Hoffnung weitere Infos zu finden die mir weiterhelfen können habe ich hier im Forum nach dem Begriff "Hex" gesucht aber die gefundenen 13 Treffen halfen nicht. Auch die Hilfe vom GM habe ich nichts gefunden was mir hilft.
    Darum Frage ich Dich jetzt einfach mal ganz Mutig:

    Wie müsste mein GML-Script das ich aufrufe aussehen damit highscore_name und highscore_value in hex übertragen werden ?

    Wäre klasse wenn Du mir so kurz vor dem Ziel nochmal helfen könntest.

    Bis dann


    GML-Code aktuell:

    url_string = "www.deinedomain.de/highscore/schreibe.php";
    url_string += "?p1=" + string(highscore_value(1));
    url_string += "&n1=" + highscore_name(1);
    browser="IEXPLORE.EXE";
    execute_shell(browser,url_string);
  • ist doch ganz einfach: nach dem du den skirpt "dec2all" erstellt hast und alles reinkopiert hast erweiterst du den Platz1Senden-Skript wie folgt:

    GML-Quellcode

    1. var name,punkte,i,str,len;
    2. // Punkte "verschlüsseln"
    3. punkte = string(highscore_value(1));
    4. len = string_length(punkte);
    5. str = '';
    6. for (i=1; i<=len; i+=1;) {
    7. str += '%' + string(dec2all(real(ord(string_char_at(punkte,i))),16) );
    8. }
    9. punkte = str;
    10. // Name in hexadezimal
    11. name = string_replace_all(highscore_name(1),'&','');
    12. name = string_replace_all(name,'?','');
    13. len = string_length(name);
    14. str = '';
    15. for (i=1; i<=len; i+=1;) {
    16. str += '%' + string( dec2all(real(ord(string_char_at(name,i))),16) );
    17. }
    18. name = str;
    19. url_string = "http://deinedomain.de/highscore/schreibe.php";
    20. url_string += "?p1=" + punkte;
    21. url_string += "&n1=" + name;
    22. execute_shell(url_string,''); // den Standard-Browser verwenden
    Alles anzeigen


    ich habs bei mir übringens so gemacht, dass ich die punkte zwar einfach als zahl übertragen hab, aber davon noch zum beispiel das 17fache + 6347 und nochmal durch 12 oder sowas als weitere variable. im php skript wurde dieser wert dann zurückgerchnet und dann mit den echten punkten verglichen. auf diesen schritt muss dann erstmal jemand kommen, um das ganze zu manipulieren.
  • Hallo,

    vielen Dank das Du mir das Script angepasst hast. Es läuft Super. Ich habe es inzwischen
    sogar etwas erweitert. Über eine INI-Datei lass ich prüfen ob ein Highscore schon mal übertragen wurde. So verhindere ich das ein Highscore mehrmals übertragen wird.
    Mit der "Verschlüsselung" und den Hinweisen von Dir werde ich auch noch rumspielen.
    Wenn ich alles ausgetestet habe werde ich alles zusammen unter Downloads allen anderen auch zur Verfügung stellen. Es ist für mich klar das Du natürlich darin Vorkommst, ist das für Dich auch OK? Ich werde auch noch Zeit brauchen um genau zu Verstehen warum Du eine Zeile so gemacht hast wie sie ist. Könnte ich mich bei Fragen an Dich wenden?

    Nochmals vielen vielen vielen Dank für alles was Du gemacht hast, das war ganz große Klasse.
    Ich bin Superglücklich.
  • Hallo Fledermaus55. Könntest du den neusten Code mal hochladen. Mein Freund und ich haben nämlich damit gearbeitet (also mit der hochgeladenen). Hat alles funktioniert, aber die neuen Funktionen hören sich gut an. Mein Freund hat nämlich ne registrierte Version. Mit meiner lite funktioniert das nämlich nicht.

    Danke

    Edit: Wie wärs, wenn man den aktuellen score hochladen würde, anstelle des besten

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

  • Benutzer online 1

    1 Besucher