highscore mit php/mysql
-
Hallo liebe Forengemeinde,
Ich brauche mal wieder ein wenig Hilfe.
Und zwar ich wollte ein kleines Highscore schreiben die Punkte stehen in einer Tabelle mit den anderen Daten.jetzt möchte ich das die Daten (username und score) aus der Datenbank ausgelesen werden und dann sortiert in die Website aufgelistet werde zu erst nur die ersten 3 und dann eine ganze Rangliste
Ich hoffe das ihr mich da ein wenig unterstützen könnt
danke
-
Um etwas mit PHP und MySQL zu machen, sollte man am besten PHP und MySQL können.
-
hallo,
ja das ist verständlich allerdings kann es immer mal vorkommen das man etwas nicht weiss oder man einfach nicht weiterkommt
mfg
-
derdefeckter schrieb:
ja das ist verständlich allerdings kann es immer mal vorkommen das man etwas nicht weiss oder man einfach nicht weiterkommt
Und wo kommst du nicht weiter?
-
hallo,
bei allen ich kann ohne probleme eine registrirung schreiben aber mit dem highscore da komm ich gar nicht weiter ich dachte mir das zunächst so
<?php require ('config.php'); error_reporting(E_ALL); $abfrage = "SELECT username,score FROM login ORDER BY score LIMIT 0,10"; $end = mysql_query($abfrage); echo mysql_result( $end, 0, 0); ?>
dann mit einem array sortieren allerdings gibt er mir da schon die falschen texte aus
-
so nochmals hallo,
ich bin etwas weiter gekommen:
<?php require ('config.php'); error_reporting(E_ALL); $abfrage = "SELECT username,score AS highscore FROM login ORDER BY username,score LIMIT 0,10"; $end = mysql_query($abfrage); while( $row = mysql_fetch_assoc( $end )) { echo $row['highscore']."<br />"; } ?>
die ausgabe ist
0 0 0 0
allerdings kein username
hoffentlich kann mir da jemand helfen
danke
-
Also um das sortieren brauchst du dich zunächst mal garnicht kümmern.
Dafür sorgt das ORDER BY in deiner SQL-Abfrage schon.Zur Ausgabe:
Wenn du den Usernamen ausgeben willst, dann musst du den Usernamen ausgeben
Klingt komisch, ist aber so:echo $row['username']."<br />"; echo $row['highscore']."<br />";
-
hallo BasicMan01,
vielen dank erstmal
dann noch eine frage brauche ich AS oder kann ich das weglassen?
wofür steht das AS genau was macht es mit dem AS habe ich mich noch gar nicht beschäftigt und finde dazu auch keine plausible und verständliche erklärungdanke
-
hinter dem AS gibst du einen Alias an.
Nehmen wir an, du hast lange Spaltennamen wie "ich_bin_ein_langer_spaltenname", dann
kann man mit so einem Alias die Schreibarbeit verringern in dem man dann mit einem kurzen Bezeichner weiterarbeitet.Außerdem "verbirgst" du den Ursprungsnamen nach außen, was in Hinblick auf Security an vielen Stellen auch zu empfehlen ist. (sei es, weil man aufgrund von Sortierung die Spaltenbezeichnungen im Javascript verwendet).
Des weiteren kann es vorkommen, dass sich mal ein Spaltennamen ändert, dann muss man diese Änderung nur in der Query vornehmen und der Rest des Codes bleibt verschont. (wenn der Alias weiterhin auf den Inhalt der Spalte hinweißt).
Ist also wie dein Nickname hier im Forum, damit niemand weiß, wie du wirklich heißt
-
ja jetzt klappt es alles soweit
nur habe ich jetzt noch ein problem
er listet den mit den meisten punkten von unten an und denn mit den wenigsten punkten nach oben aber eigentlich bräuchte ich das andersrum wäre das auch so einfach möglich?mfg
EDIT: Danke das war mal eine sehr plausible und auch verständliche erklärung
-
SELECT username,score FROM login ORDER BY score DESC LIMIT 0,10
kommt von descent => Abstieg
-
gut
vielen dank an alle die mitgeholfen haben!
zur letzten frage wie kriege ich vor jeder ausgabe jetzt den rangplatz bei 1 angefangen?
sonst hätte ich allesmfg
-
derdefeckter schrieb:
gut
vielen dank an alle die mitgeholfen haben!
zur letzten frage wie kriege ich vor jeder ausgabe jetzt den rangplatz bei 1 angefangen?
sonst hätte ich allesmfg
Speicherst du den Rangplatz auch in der Datenbank? Nein? Dann machst du das in PHP:
$rank = 1; while (...) { echo "Rang " . $rank . "..."; $rank++; }
Du musst also nur die Variable $rank einbauen, denke ich.
Solltest du natürlich so sortieren, dass die niedrigste Highscore oben steht, musst du eben runter zählen. Dazu die Anzahl der Einträge in der Datenbank als Startwert nutzen.Eventuell lässt sich der Rangplatz auch in der Abfrage direkt berechnen. Aber wie das geht, weiß ich nicht.
-
so danke an alle!
habe es jetzt fertig!wer es sehen will wie ich es gelöst habe ich poste den code hier mal
$abfrage = "SELECT username,score AS highscore FROM login ORDER BY score DESC LIMIT 0,10"; $result = mysql_query($abfrage); $num=1; $rank = 1; while ($ar=mysql_fetch_array($result,MYSQL_ASSOC)){ echo "<p>"."Rang ".$rank." " .$ar['username'].": ".$ar['highscore']."</p>"; $rank++; }
-
Und du denkst natürlich an SQL Injections, richtig?
Lass mich raten: Du weißt nicht, was das istIst das eine Spielerei oder soll das wirklich online geschaltet werden?
Falls ja, schlag das Wort lieber nach. Falls nein, tu es trotzdem in einer Minute voller Langeweile. Sinnvoll investierte Zeit
-
hallo,
SQLINJEKTION
brauch ich doch da eigentlich nicht da keine eingabe über ein formular etc gemacht wird oder?
also ich habe die sqlinjektion beim registrirungs formular und beim login mehr brauchte ich bisher nicht nachher noch beim profil ändern
bei verbesserungen lasse ich mich gerne eines besseren belehren
-
Und du prüfst auch die Benutzernamen auf zulässige Zeichen (Stichwort XSS)?
Dann ist ja gut.
-
ja
zeichen wie !"§$%&/()=?`´+*#'<>|~\}][{²³
kommen bei mir nicht rein
habe ich extra so gemacht
sicherheit steht bei mir an erster stellemfg
Edit: habe nochmal nach geguckt also der grossteil der Zeichen sind unzulässig!
Und ich habe jetzt das Highscore System komplett fertig!
sogar in einer tabelle!
-
Ein kleiner Tipp: Eine Whitelist ist sicherer als eine Blacklist.
Das heißt: Leg nicht fest, was man NICHT darf, sondern leg fest was man DARF.
Im Falle von Namen vielleicht: a-Z, 0-9, _, -, ...
Denn du weißt nicht, welche Zeichen man dir noch ins System "schmuggelt".
Wichtig ist auch, dass du deine Benutzer darauf hinweist, dass nur diese Zeichen erlaubt sind. Ansonsten ist das sehr frustrierend.
Wofür ist eigentlich die Variable $num im oben geposteten Code? Sie wird in dem Codeausschnitt gar nicht verwendet. Auch die Einrückung und die Freiräume sind nicht so schön.
So wäre es schon schöner. Es ist sicher Geschmackssache, aber unterschiedliche Anzahl von Leerzeichen, Einrückungen, etc. ist für die Lesbarkeit nicht förderlich.
Wenn du schreibst:
$x = 0;
dann schreib nicht 3 Zeilen weiter:
$y= 1;
und danach:
$z=1;
So ists doch schon wesentlich lesbarer, oder?
$abfrage = "SELECT username,score AS highscore FROM login ORDER BY score DESC LIMIT 0,10"; $result = mysql_query($abfrage); $rank = 1; $num = 1; // Wozu? while ($ar = mysql_fetch_array($result, MYSQL_ASSOC)) { echo "<p>" . "Rang " . $rank . " " . $ar['username'] . ": " . $ar['highscore'] . "</p>"; $rank++; }
-
hallo vielen dank!
ja die variable num ist da wohl irgendwie rein geraten
ich werde die gleich raus nehmen da sie nutzlos ist
und ja es stimmt ich hatte den code nur in meiner test datei um es von dort zutesten da ich nichts veröffentlichen möchte das nicht sauber funktioniert
mfg
EDIT:
<?php require ('config.php'); $abfrage = "SELECT username,level,score AS highscore FROM login ORDER BY score DESC "; $result = mysql_query($abfrage); $rank = 1; echo "<center><table Border=\"2\"> <tr> <td><p>Rang</p></td> <td><p>Username</p></td> <td><p>Score</p></td> <td><p>Level</p></td> </tr>"; while ($ar=mysql_fetch_array($result,MYSQL_ASSOC)){ echo "<tr>"."<td><p>".$rank."</p></td><td><p>".$ar['username']."</p></td><td><p>".$ar['highscore']."</p></td><td><p>".$ar['level']."</p></td></tr>"; $rank++; } echo "</table></center>"; ?>
so sieht es in meiner online datei aus