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]
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]
Kommentar