HTML/PHP Bestenliste in Tabellenform

  • HTML5

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

  • HTML/PHP Bestenliste in Tabellenform

    Hallo Experten!

    Habe mir Gedanken gemacht, wie man eine Highscoretabelle für GM-Studio-HTML5 Spiele gestalten könnte.
    Es ist mir auch schon teilweise gelungen, nun fehlt mir nur noch eine Sortierungsmöglichkeit auf der PHP-Anzeigeseite.
    Finde einfach keine richtigen Beispiele (SORT) für mein Projekt.
    Auch mit SQlite komme ich nicht weiter und hier habe ich noch zusätzlich das Problem, dass die Umlaute nach der Übertragung mit _GET in eine Datenbank nicht richtig dargestellt werden.
    Also bleibe ich lieber bei der Textdatei, welche am Server liegt und dort ohnehin nicht so leicht manipulierbar ist.

    Vielleicht hat jemand von euch eine Lösung parat, wie ich die unten angeführte PHP-Seite ergänzen könnte, um die Bestenliste absteigend nach Punkten zu sortieren.

    Ich bin mir sicher, es gibt eine einfache Möglichkeit, leider habe ich bislang nur Fehlversuche zu verzeichnen.
    Mit eurer Hilfe habe ich in den letzen Jahren so ziemlich alle meine Probleme lösen können, dafür bedanke ich mich sehr.

    MfG. Hubsl

    Hier mein Beispiel:

    GM-Studio Skript (im
    Create-Event am Ende der Übung).



    highliste =
    global.name +'|' +score ;
    http_get("bestenliste01.php? ergebnis=" +highliste);


    Diese PHP-Seite (bestenliste01.php)
    wird vom GM-Spiel im Create-Event aufgerufen.

    Bei jedem Aufruf erfolgt ein Eintrag in die bestenliste01.txt in einer neuen Zeile.


    <?php
    $handle = fopen("bestenliste01.txt","a");
    fwrite($handle,"\r\n".$_GET["ergebnis"]); //r= lesen, n= nächste Zeile
    fclose($handle);
    ?>


    Die PHP-Anzeigeseite
    <html>
    <head>
    <title>Bestenliste anzeigen</title>
    <body bgcolor="#ffffed">
    <p>
    <p align="center"><font face="Arial,
    Helvetica, sans-serif" size="4"><b>Bestenliste Übung1</b></font>
    <p align="center"> <font
    face="Arial, Helvetica, sans-serif" size="4">

    <?php
    echo '<table border="1">
    <tr>
    <td><font
    face="Arial, Helvetica, sans-serif" size="4"><b>Name</b></td>
    <td><font
    face="Arial, Helvetica, sans-serif" size="4"><b>Punkte von 100</b></td></tr>';


    $datei = file("bestenliste01.txt");

    foreach($datei AS $ausgabe)
    {
    $zerlegen = explode("|",$ausgabe);
    echo "<tr><td>$zerlegen[0]
    </td><td>$zerlegen[1]</td></tr>";
    }
    echo
    '</table>';
    ?>
    </body></html>

    Beispiel der Anzeige: Nun hätte ich die Tabelle gerne absteigend nach Punkten sortiert!


    Name | Punkte von 100
    Anton | 55
    Berta | 20
    Christian | 75
    Günther | 45
    Franziska | 85

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

  • Dein Vorhaben sollte sich mit der PHP-Funktion array_multisort umsetzen lassen. Da ich jetzt nicht weiß, wie fit du in PHP bist, hier mal ein (ungetesteter) Versuch deinen Code entsprechend anzupassen.

    PHP-Quellcode

    1. $name = array();
    2. $punkte = array();
    3. foreach($datei as $ausgabe) {
    4. $zerlegen = explode("|",$ausgabe);
    5. $name[] = $zerlegen[0];
    6. $punkte[] = $zerlegen[1];
    7. }
    8. array_multisort($punkte,SORT_DESC,$name,SORT_ASC);
    9. for ($i = 0; $i < count($datei); $i++) {
    10. echo "<tr><td>".$name[$i]."</td><td>".$punkte[$i]."</td></tr>";
    11. }
    Alles anzeigen

    Sollte so in etwa klar sein, wie es funktioniert.

    Davon abgesehen solltest du dir aber im Klaren sein, dass die Art der Übertragung nicht sehr sicher ist gegenüber Angreifern.

    PS: Benutze doch bitte die entsprechenden Tags, wenn du Code postest.
  • Ein großes Dankeschön an Bl@ckSp@rk!
    Funktioniert super!

    Da ich im PHP wirklich eine Null bin, wäre ich selber wahrscheinlich daran gescheitert.

    Bl@ckSp@rk schrieb:

    Davon abgesehen solltest du dir aber im Klaren sein, dass die Art der Übertragung nicht sehr sicher ist gegenüber Angreifern.

    PS: Benutze doch bitte die entsprechenden Tags, wenn du Code postest.

    Wie ist das mit den entsprechenden Tags gemeint?
    Könntest du mir einen Tip geben, wie ich die ganze Sache sicherer gegenüber Angreifen machen könnte?

    Nochmals vielen, vielen Dank für die wertvolle Unterstützung!

    MfG. Hubsl
  • hubsl schrieb:

    Wie ist das mit den entsprechenden Tags gemeint?

    Nunja, wenn du einen Beitrag hier im Forum schreibst, hast du doch im Editor oben einen Button "<?", mit dem du deinen PHP-Code schöner darstellen lassen kannst, wie in meinem Post oben. :)
    Ist einfach schöner zu Lesen, da der Code farbig dargestellt und eingerückt wird.

    hubsl schrieb:

    Könntest du mir einen Tip geben, wie ich die ganze Sache sicherer gegenüber Angreifen machen könnte?

    In irgendeiner Weise Verschlüsseln. Bei meinem Online Highscore System habe ich beispielsweise aus den zu übertragenen Daten und einem selbstgewählten Passwort einen MD5-Hash erzeugt und mitgesendet, um die Daten auf dem Server zu verifizieren. Wenn nicht gerade jemand irgendwie auf das Passwort stößt, z.B. durch den Decompiler, ist diese Methode eigentlich recht sicher. Du könntest natürlich statt einer Hashfunktion auch ein "richtiges" Verschüsselungsverfahren verwenden. Wichtig ist nur, dass der Server erkennen kann, ob die Daten gefaked oder echt sind.

    Beispiel mit MD5:

    GML-Quellcode

    1. highliste = global.name +'|' +string(score);
    2. hash = md5(highliste+password);
    3. http_get("bestenliste01.php?ergebnis="+highliste+"&hash="+hash);

    PHP-Quellcode

    1. if ($_GET["hash"] != md5($_GET["ergebnis"]+password)) {
    2. exit("ungültige Werte");
    3. }

    Weiß jetzt gerade nicht, ob das Studio schon eine Funktion für MD5 hat. Wenn nicht, kannst du z.B. das Script hier nehmen.

    Aber ungeachtet dessen wie du dich absicherst, solltest du auch darauf achten, dass die Daten im richtigen Format ankommen. Zur Zeit überträgst du sie ja durch <name>|<score>. Was aber wenn <name> selber ein "|" enthält? Was wenn der String überhaupt kein "|" enthält? Was wenn nach "|" nicht nur Zahlen folgen? Was wenn der Name extrem lang ist oder nicht darstellbare Zeichen enthält? Was wenn in dem String irgendwo ein "&" vorkommt, welches das Ende des Wertes in der URL Query darstellt? Oder was wenn "bestenliste01.php" gar ohne "ergebnis" aufgerufen wird? Das sind alles Fälle, die du im GM oder in deiner PHP Datei abfangen und entsprechend drauf reagieren solltest. Gehe nie davon aus, dass "bestenliste01.php" immer genau so aufgerufen wird, wie du dir das vorstellst. Wenn die Seite vom GM aus aufgerufen wird, mag das stimmen, aber man kann eben die Seite auch z.B. einfach über den Browser oder sonst wie aufrufen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Bl@ckSp@rk ()

  • Bl@ckSp@rk schrieb:

    Nunja, wenn du einen Beitrag hier im Forum schreibst, hast du doch im Editor oben einen Button "Ist einfach schöner zu Lesen, da der Code farbig dargestellt und eingerückt wird.
    Danke für die Informationen, werde mich bei meinen nächsten Beiträgen danach richten.
    Bezüglich der Verschlüsselung werde ich mir noch genau überlegen, was für mich die beste Lösung ist.

    Bl@ckSp@rk schrieb:

    Aber ungeachtet dessen wie du dich absicherst, solltest du auch darauf achten, dass die Daten im richtigen Format ankommen. Zur Zeit überträgst du sie ja durch |. Was aber wenn selber ein "|" enthält? Was wenn der String überhaupt kein "|" enthält? Was wenn nach "|" nicht nur Zahlen folgen? Was wenn der Name extrem lang ist oder nicht darstellbare Zeichen enthält? Was wenn in dem String irgendwo ein "&" vorkommt, welches das Ende des Wertes in der URL Query darstellt? Oder was wenn "bestenliste01.php" gar ohne "ergebnis" aufgerufen wird? Das sind alles Fälle, die du im GM oder in deiner PHP Datei abfangen und entsprechend drauf reagieren solltest. Gehe nie davon aus, dass "bestenliste01.php" immer genau so aufgerufen wird, wie du dir das vorstellst. Wenn die Seite vom GM aus aufgerufen wird, mag das stimmen, aber man kann eben die Seite auch z.B. einfach über den Browser oder sonst wie aufrufen.
    Dachte gar nicht daran, dies alles zu berücksichtigen, danke für die Hinweise.

    Danke nochmals für alle deine Bemühungen.
    Bis zum nächsten Mal.
    MfG. Hubsl
  • Benutzer online 1

    1 Besucher