Highscore Anzeige PHP über mySCL connector

  • Hi.

    Ich habe folgendes PHP Script geschrieben um auf meine Homepage über mySQL Highscores zu empfangen. Das funktioniert auch soweit ganz gut.

    Nur möchte ich gerne die Ausgabe auf max 10 Einträge beschränken. Dafür würde sich ja DESC LIMIT 10 anbieten. Aber sobald ich das einfüge funktioniert mein Script nicht mehr. Was mache ich falsch?




    <?php

    $conn = new mysqli('localhost', 'root', 'test', 'test');

    if($conn->connect_error){

    die("Error in DB connection: ".$conn->connect_errno." : ".$conn->connect_error);

    }


    $field = $_GET['sort'];

    if($field == ''){

    $field = 'score';

    }


    $ordertype = ($_GET['order'] == 'desc')? 'asc' : 'desc';


    $select = "SELECT * FROM `players` ORDER BY $field $ordertype" DESC

    LIMIT 10 ;

    $result = $conn->query($select);

    if($result->num_rows > 0){

    echo '<table class="tbl-content" >';

    echo '<tr>';


    echo '</a></th>';

    echo '<th>Username ';


    echo '</a></th>';


    echo '<th>Score</th>';



    echo '</a></th>';

    echo '</tr>';

    while($row = $result->fetch_object()){

    echo '<tr>';


    echo '<td>'.$row->username.'</td>';


    echo '<td>'.$row->score.'</td>';

    echo '</tr>';

    }

    echo '</table>';

    }

    ?>

  • Das DESC gehört zu ORDER BY und hat mit LIMIT nichts zu tun. Wenn Du es weg lässt, sollte die Abfrage wieder funktionieren.

    Du meinst

    $select = "SELECT * FROM `players` ORDER BY LIMIT 10 $field $ordertype" ;

    ?


    Das funktioniert auch nicht

  • Das HTML ist auch irgendwie falsch.

    Auch wenn mein Browser das laut Konsole richtig angezeigt, kommt der Quelltext aber falsch an.

    Das solltest du auch noch beheben

    zb so

    Bei viel echos, kannst du auch erst sammeln ( so nenne ich das )

    Dieser Beitrag wurde bereits 1 Mal editiert, zuletzt von basti1012 ()

  • Bitte nicht direkt in SQL-Abfragen Variabeln einbauen. Das ist ein Sicherheitsrisiko und man kann dadurch z.B. die komplette Datenbank mit 'score ASC; DROP TABLE "players";' als GET Variable "sort" löschen. Stattdessen immer PDO und prepared statements verwenden, da kann das nicht passieren.

    Dieser Beitrag wurde bereits 1 Mal editiert, zuletzt von prodev ()

  • Was prodev sagt (prepared statements)


    plus alle daten, die Du in HTML ausgibst maskieren.

    Bsp:

    <td>'.htmlspecialchars($row->score).'</td>

    Auch Daten, die aus Deiner db kommen. Alle Daten sind als nicht sicher anzusehen.


    Details auf Anfrage oder im Netz zu fniden.