na was soll ich sagen - mir fehlen die Worte.....
ES FUNKT. Hab jetzt 20 Min lang alle Varianten durchgeckeckt und das script macht's jedesmal richtig.
VIELEN VIELEN DANK Titus.
Hast mir wirklich weitergeholfen!!!
Highscorelisten-Eintrag via php-script (special thanxs to BrainBug)
Einklappen
X
-
Vermutlich liegt der Fehler in der Abbruchbedingung der letzten Schleife, da fehlen ein paar Klammern. So sollte es laufen:
for (reset($hitlist), $i=0; (list($key, $val) = each($hitlist)) && ($i<10); $i++)
Falls nicht: Überprüfe mal mit var_dump ($hitlist); an welcher Stelle die Daten aus dem Array verschwinden.
Und: ja, ich verstehe was du meinst. Und das wird in dem Skript auch berücksichtigt. (siehe Kommentare)
Einen Kommentar schreiben:
-
@Titus:
Hab deine Version gerade in PHP-Edit getestet. Jetzt schreibt er mir allerdings nur mehr Strichpunkte (;;- so viele Einträge wie vorhanden sind - in die Data.txt rein?!?!
P.S.: Ist BrainBug irgendwo aufzutreiben?? Er hat so gut wie das ganze Script geschrieben.
Einen Kommentar schreiben:
-
Danke Titus, aber hast Du auch im Code berücksichtigt, dass sich der Spieler (wenn weniger als 10 drinnen sind) eigentlich so gut wie immer in die Highscore eintragen kann. Ein Beispiel zum besseren Verständnis:
es sind vier Spieler eingetragen:
Mario;120
Enno;100
Jan;80
Frank;60
Nun kommt ein fünfter Spieler hinzu mit 40 Punkten.
Also:
Mario;120
Enno;100
Jan;80
Frank;60
SPIELERFÜNF;40
Wären hingegen bereits zehn Spieler eingetragen dann dürfte sich SPIELERFÜNF jetzt logischerweise nicht eintragen.
Verstehst Du was ich meine?? => Das war nämlich das Augangsproblem.
Bye
Einen Kommentar schreiben:
-
Code:<? $winnername="Mario"; //kommt von Flash zurück $winnercredits=120; //kommt von Flash zurück $fp = fopen("data.txt","r"); while($data = fgets($fp,1024)){ // zeile für zeile einlesen $data = explode(";",$data); // jede zeile aufsplitten $hitlist[$data[0]] = trim($data[1]); // ein array erzeugen mit allen spielern } fclose($fp); // falls ein alter Eintrag existiert, den höheren im Array speichern, sonst einen neuen erstellen if (min($hitlist)<$winnercredits // wenn der neue größer ist als der bisherige kleinste || count($hitlist)<10) // oder noch keine 10 Einträge da sind { $hitlist[$winnername] = max ($hitlist[$winnername], $winnercredits); // absteigend sortieren arsort($hitlist); // maximal zehn Elemente des Arrays speichern: $fp=fopen("data.txt","w"); for (reset($hitlist), $i=0; list($key, $val) = each($hitlist) && $i<10; $i++) fputs($fp,$key.";".$val."\n"); fclose ($fp); } ?>
Und wenn am Array nix geändert wird, mußt du auch nicht speichern; daher ist der Rest auch im if.
Einen Kommentar schreiben:
-
ja, wäre auch 'ne Möglichkeit. Im Prinzip genügt es aber wenn man die If-Anweisung
if ($winnercredits>$min) { // WENN ÜBERGEBENER WERT GRÖSSER ALS MIN-WERT DANN EINTRAG SCHREIBEN => DER EINTRAG SOLL ABER AUCH GESCHRIEBEN WERDEN WENN ER KLEINER ALS MIN-WERT IST => ABER NUR DANN WENN WENIGER ALS 10 EINTRÄGE VORHANDEN SIND
um den Kommentar erweitert. Bin aber leider fast noch 'n Newbie in PHP und kriegs irgendwie nicht hin.
Einen Kommentar schreiben:
-
Metallica hat ein Thema erstellt Highscorelisten-Eintrag via php-script (special thanxs to BrainBug).Highscorelisten-Eintrag via php-script (special thanxs to BrainBug)
Hi Leute!
Hab ein kleines Problem mit meinem PHP-Highscorelisteneintrag.
Das Script schreibt den neuen Winner in eine Data.txt rein die folgendermaßen aussieht:
Hoschi;700
Jan;400
Enno;170
hetfield;998
Erlaubt werden max. 10 Einträge. D.h. sind 10 Einträge in der Data.txt drinnen, dann löscht das Script den kleinsten Eintag und der neue wird stattdessen hinzugefügt. Sind weniger als 10 Einträge vorhanden, dann soll dieser nur hinzugefügt werden. Das funkt alles.
Das Problem:
Wenn weniger als 10 Einträge drinnen sind und der neue Eintrag kleiner ist als der kleinste Wert der vorhanden ist (in diesem Fall Enno;170) dann schreibt mir php den neuen Eintrag nicht in die Data.txt hinein. (Anmerkung: Ist der Wert größer als 170 dann funtzts komischerweise)
Hier der Code (ich glaube, dass es an der If-Anweisung scheitert => siehe großgeschriebenen Kommentar):
<?
$winnername="Mario"; //kommt von Flash zurück
$winnercredits=120; //kommt von Flash zurück
$fp = fopen("data.txt","r");
while($data = fgets($fp,1024)){ // zeile für zeile einlesen
$data = explode(";",$data); // jede zeile aufsplitten
$hitlist[$data[0]] = trim($data[1]); // ein array erzeugen mit allen spielern
}
fclose($fp);
arsort($hitlist);
$eintraege=count($hitlist); // max.10 Einträge erlauben
if ($eintraege<10) { // letzten Eintrag nicht abspalten, sondern nur holen
end($hitlist); // letzter Eintrag selektieren
list($key_min,$min)=each($hitlist); // Credits holen, bleibt aber im Array erhalten
}
else {
$min=array_pop($hitlist); // letzten Array-Eintrag (kleinster Credits-Wert)
}
reset($hitlist); // damit Array-Zeiger nicht auf letztem Eintrag steht => sonst wird in While-Schleife nichts herausgeschrieben
if ($winnercredits>$min) { // WENN ÜBERGEBENER WERT GRÖSSER ALS MIN-WERT DANN EINTRAG SCHREIBEN => DER EINTRAG SOLL ABER AUCH GESCHRIEBEN WERDEN WENN ER KLEINER ALS MIN-WERT IST => ABER NUR DANN WENN WENIGER ALS 10 EINTRÄGE VORHANDEN SIND
$fp=fopen("data.txt","w");
while (list ($key, $val) = each ($hitlist)) {
fputs($fp,$key.";".$val."\n"); // vorher alle restlichen Einträge schreiben
}
fputs($fp,$winnername.";".$winnercredits."\n"); // und dann den neuen Eintrag am Ende anhängen
fclose($fp);
}
?>
Kennt ihr euch einigermaßen aus oder war es zu undeutlich??
Hoffentlich nicht!
[Editiert von Metallica am 12-08-2001 um 12:09]Stichworte: -
Einen Kommentar schreiben: