| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

17-07-2001, 18:39
|
|
Metallica
PHP Expert
|
|
Registriert seit: Jun 2001
Ort: 20cm vorm Monitor
Beiträge: 2.037
|
|
Hi Leut's,
meine Flash/PHP Highscoreliste funkt super bis auf den Umstand, das php beim zurückschreiben auch den letzten Eintrag löscht wenn nicht 10 Einträge (soviel erlaube ich maximal) vorhanden sind. D.h. dass man noch irgendwo einen Check machen müßte, ob in der Data.txt auch wirklich 10 Highscore-Einträge vorhanden sind.
Data.txt:
Tiger2;1200
tiger;1000
Hoschi;700
Martin;614
Thomas;592
Alex;541
Richi;397
Manfred;341
tiger;1000
php-writeback-funktion:
<?
$winner="tiger"; //kommt von Flash zurück
$credits=1000; //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);
$min=array_pop($hitlist); // letzten Array-Eintrag (kleinster Credits-Wert)
if ($credits>$min) { // wenn übergebener Wert größer als Min-Wert dann Eintrag schreiben
$fp=fopen("data.txt","w");
while (list ($key, $val) = each ($hitlist)) {
fputs($fp,$key.";".$val."\n"); // vorher alle restlichen Einträge schreiben
}
fputs($fp,$winner.";".$credits."\n"); // und dann den neuen Eintrag am Ende anhängen
fclose($fp);
}
?>
Bitte um Rat?!?!?
CU
__________________
$PHP resource 4ever$
|

18-07-2001, 08:11
|
|
BrainBug
PHP Senior
|
|
Registriert seit: Mar 2001
Ort: Raum Frankfurt
Beiträge: 1.110
|
|
Code:
<?
$winner="tiger"; //kommt von Flash zurück
$credits=1000; //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); // wieviele Einträge sind es überhaupt -> max. 10 Stück
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)
}
if ($credits>$min) { // wenn übergebener Wert größer als Min-Wert dann Eintrag schreiben
$fp=fopen("data.txt","w");
while (list ($key, $val) = each ($hitlist)) {
fputs($fp,$key.";".$val."\n"); // vorher alle restlichen Einträge schreiben
}
fputs($fp,$winner.";".$credits."\n"); // und dann den neuen Eintrag am Ende anhängen
fclose($fp);
}
?>
|

18-07-2001, 10:38
|
|
Metallica
PHP Expert
|
|
Registriert seit: Jun 2001
Ort: 20cm vorm Monitor
Beiträge: 2.037
|
|
Danke BrainBug, werde das morgen mal auschecken!
Meld mich!
__________________
$PHP resource 4ever$
|

19-07-2001, 18:47
|
|
Metallica
PHP Expert
|
|
Registriert seit: Jun 2001
Ort: 20cm vorm Monitor
Beiträge: 2.037
|
|
Hi BrainBug. Hab's grad getestet. Es passiert bei der Funktion leider ein Fehler beim Zurückschreiben in die Data.txt
Man kann den neuen Eintrag in die HighscoreListe in Flash zwar durchführen. Wenn man allerdings auf SaveScore klickt müßte php den Eintrag in die Data.txt reinschreiben. Genau das tut es nicht.
Keine Ahnung warum. An Flash liegt es 100%ig nicht. Irgendwo paßt da was in der php-funktion nicht. Da ich ein paar Variablennamen geändert habe, hier nochmal die letzte Version:
<?
$winnername="hetfield"; //kommt von Flash zurück
$winnercredits=998; //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)
}
if ($credits>$min) { // wenn übergebener Wert größer als Min-Wert dann Eintrag schreiben
$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);
}
?>
__________________
$PHP resource 4ever$
|

23-07-2001, 07:58
|
|
BrainBug
PHP Senior
|
|
Registriert seit: Mar 2001
Ort: Raum Frankfurt
Beiträge: 1.110
|
|
Code:
if ($winnercredits>$min) { // wenn übergebener Wert größer als Min-Wert dann Eintrag schreiben
du hattest da noch $credits als Variablenname stehen. So kann die If-Bedingung natürlich nie erfüllt werden und genau dort wird ja geschrieben....
|

24-07-2001, 16:07
|
|
Metallica
PHP Expert
|
|
Registriert seit: Jun 2001
Ort: 20cm vorm Monitor
Beiträge: 2.037
|
|
Hi BrainBug,
tut mir leid, dass ich da extra ein Posting gemacht habe. Anscheinend hab ich zu lange in den Code geschaut. Hab's grad auf winnercredits ausgebessert. Funktionieren tut's aber trotzdem nicht. PHP schreibt nur den neuen Eintrag in die Data.txt und löscht alle anderen raus.
Ich hab's nochmal Zeile für Zeile gecheckt, finde aber keinen Fehler.
Soll ich dir meine Data.txt und die phpSchreiben.php mal mailen damit du es in PHP-Edit testen kannst und vielleicht den Fehler findest ???
__________________
$PHP resource 4ever$
|

25-07-2001, 11:17
|
|
Metallica
PHP Expert
|
|
Registriert seit: Jun 2001
Ort: 20cm vorm Monitor
Beiträge: 2.037
|
|
Hi BrainBug,
hast Du mein Posting bezüglich Highscoretabelle eh gesehen??
__________________
$PHP resource 4ever$
|

26-07-2001, 07:54
|
|
Metallica
PHP Expert
|
|
Registriert seit: Jun 2001
Ort: 20cm vorm Monitor
Beiträge: 2.037
|
|
Hi BrainBug,
eh nicht auf meine Highscoretabelle vergessen ???
__________________
$PHP resource 4ever$
|

26-07-2001, 08:08
|
|
BrainBug
PHP Senior
|
|
Registriert seit: Mar 2001
Ort: Raum Frankfurt
Beiträge: 1.110
|
|
eh
ei wo denn? Ich kann doch net immer das ganze Forum nach einem Artikel durchsuchen...
|

26-07-2001, 08:31
|
|
Metallica
PHP Expert
|
|
Registriert seit: Jun 2001
Ort: 20cm vorm Monitor
Beiträge: 2.037
|
|
Vergiß die vorigen Postings. Ich erklär's dir ab dieser Stelle - das genügt.
Es geht lediglich darum, dass bei der Highscore-Schreiben funktion eine Kleinigkeit noch immer nicht stimmt. Es ist nämlich so, dass er den neuen Highscoreeintrag zwar in die Data.txt übernimmt, dabei aber alle anderen Einträge rauslöscht.
Code:
<?
$winnername="hetfield"; //kommt von Flash zurück
$winnercredits=998; //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)
}
if ($winnercredits>$min) { // wenn übergebener Wert größer als Min-Wert dann Eintrag schreiben
$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);
}
?>
Data.txt:
Erich;150
Hoschi;700
Martin;614
Thomas;592
Richi;397
Alex;541
Wir haben die Funktion erweitert für den Fall dass nicht 10 Einträge vorhanden sind. Dann soll php nämlich nicht den letzten rauslöschen, sondern den neuen Eintrag nur hinzufügen. Du erinnerst dich??
__________________
$PHP resource 4ever$
|

26-07-2001, 08:41
|
|
BrainBug
PHP Senior
|
|
Registriert seit: Mar 2001
Ort: Raum Frankfurt
Beiträge: 1.110
|
|
jetzt aber...
Code:
<?
$winnername="hetfield"; //kommt von Flash zurück
$winnercredits=998; //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 -> dann würde nämlich nix in der while-Schleife rausgeschrieben werden ;-)
if ($winnercredits>$min) { // wenn übergebener Wert größer als Min-Wert dann Eintrag schreiben
$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);
}
?>
|

26-07-2001, 16:31
|
|
Metallica
PHP Expert
|
|
Registriert seit: Jun 2001
Ort: 20cm vorm Monitor
Beiträge: 2.037
|
|
da wäre ich sicher NIE draufgekommen...
BrainBug, mir fehlen echt die Worte. Es funkt!!!!!
Kann ich mich irgendwie revanchieren??
__________________
$PHP resource 4ever$
|

27-07-2001, 07:47
|
|
BrainBug
PHP Senior
|
|
Registriert seit: Mar 2001
Ort: Raum Frankfurt
Beiträge: 1.110
|
|
Preise den Herrn
Lobe das Forum, ehre den Code, schwöre deine ewige Treue.
Wäre für den Anfang mal ganz okay...
Bin ja auch zufrieden, wenn's geklappt hat. Und nun hoffe ich, deinen Namen nieeee wieder lesen zu müssen
Bis dann...
|

01-09-2001, 16:42
|
|
Terminator
Newbie
|
|
Registriert seit: Sep 2001
Beiträge: 25
|
|
Metallica, ich hab dein Skript ausprobiert, bei mir klappt es nicht 
Schikcst du es mir bitte mal, vielleciht hab ich da einen Fehler reingebaut
Tribok@gmx.de
Danke Terminator
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|